- ベストアンサー
【excel VBA】 配列番地の検索
excel2000のVBAで二次元配列を検索して、 検索条件に一致する配列の番地を取得するための、 コード記述に関する質問です。 例えば、 myarray(i,j), i=1,j=1の配列があるとして、それぞれに myarray(0,0) = 1 myarray(0,1) = 2 myarray(1,0) = 3 myarray(1,1) = 4 という値が格納されており、 配列を検索して値が4の番地(i=1,j=1)を返したい、 といった場合、どのようにすれば良いのでしょうか。 ご存知の方、是非回答お願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんな感じで Sub xxx() Dim myarray(10, 10) ' myarray(0, 0) = 1 myarray(0, 1) = 2 myarray(1, 0) = 3 myarray(1, 1) = 4 ' For i = 0 To 1 For j = 0 To 1 If myarray(i, j) = 4 Then MsgBox "i=" & i & vbCrLf & "j=" & j Next j Next i End Sub
その他の回答 (1)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 通常、Excelでは、そのような場合は、Rangeオブジェクトにして、検索します。また、2次元はややこしくなるので、あまり作らないほうがよいですね。 Sub Test1() Dim myArray(1, 1) As Integer Dim i As Integer Dim j As Integer Const F As Integer = 4 myArray(0, 0) = 1 myArray(0, 1) = 2 myArray(1, 0) = 3 myArray(1, 1) = 4 For i = LBound(myArray(), 1) To UBound(myArray(), 1) For j = LBound(myArray(), 2) To UBound(myArray(), 2) If myArray(i, j) = F Then GoTo EndLine End If Next j Next i EndLine: MsgBox "(" & i & "," & j & ")" End Sub
お礼
仰る通り二次元だと難しいです。 質問の例だと、二次元の意味全く無いですもんね。 LBound関数というのも初めて見ました。 これは、動的配列を使った場合に便利そうですね。
お礼
おおっ! ありがとうございます。できました。 vbCrLfというのは初めて見ました。改行させるのですね。