[[20181009203312]] 『プロシージャが大きすぎますの対処方法』(ヤイリ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『プロシージャが大きすぎますの対処方法』(ヤイリ)

IF分で条件分岐を4000近く作成して
実行したところ、プロシージャが大きすぎますとなります。
調べたところ、subを分ければいいとのことですが
(サンプルコード等なく)
具体的に対処方法等アドバイスいただけると助かります。

例 

 If コード = "01101" Then
 tmp = "1"
 ElseIf コード = "01101" Then
 tmp = "2"   
 
 4,000パターン

 endif 

上記を対応できるように分けたいです。
セレクトケースでも対応できるなら構いません。  
お手数ですがアドバイスお待ちしております。

< 使用 Excel:Excel2016、使用 OS:Windows10 >


ワークシートにコードとtmpの対照表を作成してはどうですか

(マナ) 2018/10/09(火) 20:56


アドバイスありがとうございます。
細かくご説明できてなかったのですが
セル上での作業ではなく、色々なコード書いてあるプログラムの
一部で、作業は、csvから配列ごとに読み込んで、csvで書き出す作業方法で
対応してます。
(ヤイリ) 2018/10/09(火) 21:00

そのマクロはExcelブックに保存するのですよね。
データ保存場所としてワークシートを利用できますよ。

(マナ) 2018/10/09(火) 21:09


扱うデータが大きすぎるので、csvデータに書き出しております。
(ヤイリ) 2018/10/09(火) 21:11

マクロはどこに保存するのですか
csvではないですよね

(マナ) 2018/10/09(火) 21:14


本当に分岐先が4000パターンもあるんでしょうか?
本当は分岐先は10通りくらいで、判定される側が4000パターンあるだけなのでは?

もしそうなら、Select case による分岐も検討してみてはどうでしょうか?

(もこな2) 2018/10/09(火) 21:36


データというのは、コードとtmpの対照表のことですよ

対照表を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さん
アドバイスありがとうございます。
私が、アドバイスを理解していなくて失礼しました。

このようなセルの値から、判定する方法は使用したことが
なくて、もこな2さんのサンプルから対応できました。
データとデータのマッチング処理も考えていたのですが
大変助かりました。
ご質問してよかったです。
これからいろいろと検証はしていきますが
とりあえず、土台は出来ました。
また細かいことでご相談するかもしれませんが
その際はよろしくお願いいたします。
その他の方のアドバイスもどうもありがとうございました。
(ヤイリ) 2018/10/09(火) 22:59


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.