コメントありがとうございます! 配列を使って、「"A"」と「"B"」を含む値を抽出したい場合は、次のようなVBAコードになります。 Sub TEST1() Dim A A = Range("A2:B" & Cells(Rows.Count, "B").End(xlUp).Row) Dim B ReDim B(1 To UBound(A, 1), 1 To 2) j = 0 For i = 1 To UBound(A, 1) If InStr(A(i, 1), "A") > 0 Then If InStr(A(i, 1), "B") > 0 Then j = j + 1 B(j, 1) = A(i, 1) B(j, 2) = A(i, 2) End If End If Next Range("D2").Resize(j, 2) = B End Sub If文を2回使って、「"A"」と「"B"」を含む値を抽出しているという感じになります。 また、「"A"」を含む値を抽出して、何かしらの操作をしたあとに、「"B"」を含む値を抽出したいという場合は、次のVBAコードが参考になるかと思います。 Sub TEST2() Dim A A = Range("A2:B" & Cells(Rows.Count, "B").End(xlUp).Row) Dim B ReDim B(1 To UBound(A, 1), 1 To 2) j = 0 For i = 1 To UBound(A, 1) If InStr(A(i, 1), "A") > 0 Then j = j + 1 B(j, 1) = A(i, 1) B(j, 2) = A(i, 2) End If Next '何かの処理をする Dim C ReDim C(1 To j, 1 To 2) j = 0 For i = 1 To UBound(B, 1) If InStr(B(i, 1), "B") > 0 Then j = j + 1 C(j, 1) = B(i, 1) C(j, 2) = B(i, 2) End If Next Range("D2").Resize(j, 2) = C End Sub 流れとしては、 ・「"A"」を含む値を抽出して配列「B」に格納 ・何かしらの操作 ・新しく配列「C」を作成 ・「"B"」を含む値を配列「C」に格納 ・セルに配列「C」を入力 という手順になります。 配列はなかなかとっつきづらい部分がありますけども、うまく使いこなすと、VBAの処理を高速化できるので便利ですよね(^^) 参考になればと思います。
メモ
6:04 つみ
2次元目は2列分欲しい
redim
j0☑️
range以降は☑️
実践的な配列の使い方めちゃくちゃ参考になりました!
ありがとうございます!
少し質問なのですが、
1列を対象として、データ範囲をヘッダ行+1行と末尾からend(xlup)とかで拾った行の範囲が1行だった場合、つまり結果として範囲が1セルだった場合、範囲.valueを取得すると、配列ではなくてそこに入った値が取得されてしまいますよね?
範囲.Cells.Countで1であればという判断で処理分けしてコードを書いてもいいのですが、なんかしっくり来ません。
処理分けしないで書く方法ってないですか?
大変参考になりました。ありがとうございました。一つ質問させて頂きます。抽出の結果を別シートに表示する方法を教えてください。よろしくお願いします。
いつも役に立つ動画をありがとうございます。
またまた質問がございます。
今回の動画のようにまずは”A”を含む値を抽出した後に、”B”を含む値を抽出してどこかに
記載するにはどのようにしたらいいのでしょうか?
ERSE 配列をやってもダメでした、再度 Redimをしてもダメでした。
おそらく配列の何たるかを全く理解できていないからだと思いますが、
解決方法をご教授していただければと存じます。
コメントありがとうございます!
配列を使って、「"A"」と「"B"」を含む値を抽出したい場合は、次のようなVBAコードになります。
Sub TEST1()
Dim A
A = Range("A2:B" & Cells(Rows.Count, "B").End(xlUp).Row)
Dim B
ReDim B(1 To UBound(A, 1), 1 To 2)
j = 0
For i = 1 To UBound(A, 1)
If InStr(A(i, 1), "A") > 0 Then
If InStr(A(i, 1), "B") > 0 Then
j = j + 1
B(j, 1) = A(i, 1)
B(j, 2) = A(i, 2)
End If
End If
Next
Range("D2").Resize(j, 2) = B
End Sub
If文を2回使って、「"A"」と「"B"」を含む値を抽出しているという感じになります。
また、「"A"」を含む値を抽出して、何かしらの操作をしたあとに、「"B"」を含む値を抽出したいという場合は、次のVBAコードが参考になるかと思います。
Sub TEST2()
Dim A
A = Range("A2:B" & Cells(Rows.Count, "B").End(xlUp).Row)
Dim B
ReDim B(1 To UBound(A, 1), 1 To 2)
j = 0
For i = 1 To UBound(A, 1)
If InStr(A(i, 1), "A") > 0 Then
j = j + 1
B(j, 1) = A(i, 1)
B(j, 2) = A(i, 2)
End If
Next
'何かの処理をする
Dim C
ReDim C(1 To j, 1 To 2)
j = 0
For i = 1 To UBound(B, 1)
If InStr(B(i, 1), "B") > 0 Then
j = j + 1
C(j, 1) = B(i, 1)
C(j, 2) = B(i, 2)
End If
Next
Range("D2").Resize(j, 2) = C
End Sub
流れとしては、
・「"A"」を含む値を抽出して配列「B」に格納
・何かしらの操作
・新しく配列「C」を作成
・「"B"」を含む値を配列「C」に格納
・セルに配列「C」を入力
という手順になります。
配列はなかなかとっつきづらい部分がありますけども、うまく使いこなすと、VBAの処理を高速化できるので便利ですよね(^^)
参考になればと思います。
質問です。
抽出する条件のところをシート上のセルを参照し、それと一致するものがあった場合にBの配列に格納していくにはどうすればよいでしょうか?
例)sheet1のセルH1に”ABC”という商品名が表示されていたとし、それを参照して配列から商品”ABC”のみのデータを抽出する。
わかりづらかったら申し訳ないです。
教えていただけると幸いです。
コメントありがとうございます!
例えば、「G2」のセルに入力された値を含むデータを抽出するVBAコードは、次のようになります。
Sub TEST3()
Dim A
A = Range("A2:B" & Cells(Rows.Count, "B").End(xlUp).Row)
Dim B
ReDim B(1 To UBound(A, 1), 1 To 2)
j = 0
For i = 1 To UBound(A, 1)
If InStr(A(i, 1), Range("G2")) > 0 Then
j = j + 1
B(j, 1) = A(i, 1)
B(j, 2) = A(i, 2)
End If
Next
Range("D2").Resize(j, 2) = B
End Sub
セルに「ABC」が入力されている場合は、「ABC」を含むデータのみを抽出することができます。
参考になればと思います(^^)
不明点等ございましたら、コメントいただければと思います。
変数名が、「A」とか「B」ですと初心者にはわかりにくいです。変数の「A」?、セル番地の「A」?、抽出文字の「A」?。解説用のコードとはいえもう少しわかりやすくしていただくとありがたいです。
最終的にはとても参考になりますが、しゃべるときの語尾の「~まーす」がけっこう耳について、内容がなかなか頭に入ってきません。個人の感想です。