• ベストアンサー

【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)を返したい、 といった場合、どのようにすれば良いのでしょうか。 ご存知の方、是非回答お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • suz83238
  • ベストアンサー率30% (197/656)
回答No.1

こんな感じで 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

motsuniko
質問者

お礼

おおっ! ありがとうございます。できました。 vbCrLfというのは初めて見ました。改行させるのですね。

その他の回答 (1)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんばんは。 通常、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

motsuniko
質問者

お礼

仰る通り二次元だと難しいです。 質問の例だと、二次元の意味全く無いですもんね。 LBound関数というのも初めて見ました。 これは、動的配列を使った場合に便利そうですね。