[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『プロシージャが大きすぎますの対処方法』(ヤイリ)
IF分で条件分岐を4000近く作成して
実行したところ、プロシージャが大きすぎますとなります。
調べたところ、subを分ければいいとのことですが
(サンプルコード等なく)
具体的に対処方法等アドバイスいただけると助かります。
例
If コード = "01101" Then tmp = "1" ElseIf コード = "01101" Then tmp = "2" 4,000パターン
endif
上記を対応できるように分けたいです。
セレクトケースでも対応できるなら構いません。
お手数ですがアドバイスお待ちしております。
< 使用 Excel:Excel2016、使用 OS:Windows10 >
(マナ) 2018/10/09(火) 20:56
(マナ) 2018/10/09(火) 21:09
(マナ) 2018/10/09(火) 21:14
もしそうなら、Select case による分岐も検討してみてはどうでしょうか?
(もこな2) 2018/10/09(火) 21:36
対照表をa列とb列に作っておけば
下記の1行になりませんか
tmp=worksheetfunction.vlookup(コード,thisworkbook.sheets(1).columns("a:b"),2,0)
(マナ) 2018/10/09(火) 21:51
おっと、
>セレクトケースでも対応できるなら構いません。
ってもう書いてありましたね。
そうすると、マナさんがおっしゃるように、シート上に対応表を用意しておいてMATCH関数で読み取るようにしてみてはどうでしょうか。
【対照表】シート
____A_______B___ 1 01101 1 1 01111 2 1 11111 3
Sub Sample() Const 検索値 As String = "01111" Dim tmp As String Dim buf As Variant
With Worksheets("対照表") buf = Application.Match(検索値, .Range("A1:A3"), 0) If IsError(buf) Then MsgBox "検索失敗" Else tmp = .Cells(buf, "B").Value MsgBox "tmpに格納されているのは " & tmp End If
End With End Sub (もこな2) 2018/10/09(火) 22:00
tmp = "1"
だけなのかどうかですよね。
実は例外的な処理のものがあるからIfやCaseに拘ってる可能性が・・
それならそれで、例外的なものだけ処理するようにする方法が提案できると思いますが。
(名無し) 2018/10/09(火) 22:07
このようなセルの値から、判定する方法は使用したことが
なくて、もこな2さんのサンプルから対応できました。
データとデータのマッチング処理も考えていたのですが
大変助かりました。
ご質問してよかったです。
これからいろいろと検証はしていきますが
とりあえず、土台は出来ました。
また細かいことでご相談するかもしれませんが
その際はよろしくお願いいたします。
その他の方のアドバイスもどうもありがとうございました。
(ヤイリ) 2018/10/09(火) 22:59
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.