こんにちわ。
下記のような、検索プログラムを組みました。
ざっくりいうと、「検索にヒットしたら1行配列を増やして要素を入れる。」というような感じです。
困っていることは、1行目です。
下記プログラムの(X)の部分で、1行目だと二次元配列と認識されず「インデックスが有効範囲にありません」というエラーが発生します。
検索結果が1つでも要素数を2行へRedimしたら問題なく動きます。
しかし、常に空の要素が1つできてしまい保守の際さまざまな問題がでないか心配です。
この現象を回避する術はあるのでしょうか?
初心者で的外れなことを言っているかもしれませんが、なにとぞよろしくお願いいたします。
※RedimPreserve2D()はサイトからお借りしたものです。
VBA
1 2 Sub sample() 3 Dim Result As Variant '結果を入れる配列 4 Dim All As Variant 'すべての配列 5 Dim Hit As Long '検索ヒット数 6 7 Hit = 0 8 9 ReDim Result(1,26) 'とりあえず1行用意 10 All = (別シートの10000*26のデータ) 11 12 For i = 1 To 10000 13 If All(i,1) = "検索ワード" '検索ワードにヒットしたらResultへ格納 14 Hit = Hit + 1 15 If i <> 1 Then 16 Result = RedimPreserve2D(Result,Hit)'行を1つ加算 17 End If 18 For k = 1 To 26 19 Result(Hit,k) = All(i,k) '・・・(X) 20 Next 21 End If 22 Next 23 End Sub 24 25'2次元配列の1次元目の長さを変更する関数 26'orgArray … 二次元配列 27'legthTo … 1次元目の長さ 28 Function RedimPreserve2D(ByVal orgArray, ByVal lengthTo) 29 Dim transedArray() 30 transedArray = WorksheetFunction.Transpose(orgArray) 31 ReDim Preserve transedArray(1 To UBound(transedArray, 1), 1 To lengthTo) 32 RedimPreserve2D = WorksheetFunction.Transpose(transedArray) 33 End Function 34コード
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/06/21 08:26
2021/06/21 08:37