電子書籍の厳選無料作品が豊富!

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)を返したい、
といった場合、どのようにすれば良いのでしょうか。

ご存知の方、是非回答お願いします。

A 回答 (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
    • good
    • 2
この回答へのお礼

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

お礼日時:2008/03/13 23:00

こんばんは。



通常、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
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/03/13 23:06

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!