0

私は大きなxmlファイル(600mb)を読んでいて、Excelファイルで値をチェックしています。そこで私はいくつかのループを使用しており、実行に時間がかかります。いくつかのループを条件文に置き換えることを考えました

このように:

この関数は、ワークシート名を文字列として受け取り、シートを見つけようとします (すべての xml ノードに対して)

function searchValue( val, rng, worksheet ) 
    set objWorksheet = nothing
    For Iter = 1 To objWorkbook.Worksheets.Count
        If objWorkbook.Worksheets(Iter).Name = worksheet then
            Set objWorksheet = objWorkbook.Worksheets(Iter)
            exit for
        end if
    next

選択ケースを使用して、以下のようにシート名の代わりにシート番号を渡すとどうなりますか

sub getSheetNumber( worksheet)
    select case worksheet
    case "A"
        getSheetNumber = 1
    case "B"
        getSheetNumber = 2
    case "C"
        getSheetNumber = 3
    case "D"
        getSheetNumber = 4
    case "E"
        getSheetNumber = 5
    case "F"
        getSheetNumber = 6
    case else
        getSheetNumber = worksheet

それは良い考えですか、それともループを回避する他の方法はありますか

4

3 に答える 3

2

文字から数字へのマッピングは次のように計算できます。

>> For Each c In Split("A B C D E F")
>>     WScript.Echo c, Asc(c) - Asc("A") + 1
>> Next
>>
A 1
B 2
C 3
D 4
E 5
F 6
于 2013-11-13T08:53:25.660 に答える
1

値を計算する以外の別のオプションは、辞書を使用することです。

Set getSheetNumber = CreateObject("Scripting.Dictionary")
getSheetNumber.Add "A", 1
getSheetNumber.Add "B", 2
getSheetNumber.Add "C", 3
getSheetNumber.Add "D", 4
getSheetNumber.Add "E", 5
getSheetNumber.Add "F", 6

...

WScript.Echo getSheetNumber(worksheet)

単純なキーと値のマッピングを実装する場合、使用Select..Caseはやり過ぎです。

于 2013-11-13T12:58:11.483 に答える
0

これがあなたの要件であると仮定します:

この関数は、ワークシート名を文字列として受け取り、シートを見つけようとします (すべての xml ノードに対して)

ワークシートの参照に Excel 自体を使用してみませんか?

function searchValue(val, rng, worksheet) 
    set objWorksheet = nothing
    On error resume next
    Set objWorksheet = objWorkbook.Worksheets(worksheet)
    On error goto 0

    If objWorksheet Is Nothing then
         ' Error! worksheet not found
    End if

    <..>
于 2013-11-13T16:42:55.953 に答える