【VBA】配列を使って値の抽出を高速化する【2次元配列を使えば簡単です】

แชร์
ฝัง
  • เผยแพร่เมื่อ 21 ต.ค. 2024

ความคิดเห็น • 10

  • @syouzama
    @syouzama ปีที่แล้ว +1

    実践的な配列の使い方めちゃくちゃ参考になりました!
    ありがとうございます!

  • @田舎の苦労人
    @田舎の苦労人 11 หลายเดือนก่อน

    大変参考になりました。ありがとうございました。一つ質問させて頂きます。抽出の結果を別シートに表示する方法を教えてください。よろしくお願いします。

  • @reo728reo
    @reo728reo ปีที่แล้ว +1

    メモ
    6:04 つみ
    2次元目は2列分欲しい
    redim
    j0☑️
    range以降は☑️

  • @あんぼうあんぼう
    @あんぼうあんぼう 3 หลายเดือนก่อน +1

    少し質問なのですが、
    1列を対象として、データ範囲をヘッダ行+1行と末尾からend(xlup)とかで拾った行の範囲が1行だった場合、つまり結果として範囲が1セルだった場合、範囲.valueを取得すると、配列ではなくてそこに入った値が取得されてしまいますよね?
    範囲.Cells.Countで1であればという判断で処理分けしてコードを書いてもいいのですが、なんかしっくり来ません。
    処理分けしないで書く方法ってないですか?

  • @pontakunwf6
    @pontakunwf6 2 ปีที่แล้ว +2

    いつも役に立つ動画をありがとうございます。
    またまた質問がございます。
    今回の動画のようにまずは”A”を含む値を抽出した後に、”B”を含む値を抽出してどこかに
    記載するにはどのようにしたらいいのでしょうか?
    ERSE  配列をやってもダメでした、再度 Redimをしてもダメでした。
    おそらく配列の何たるかを全く理解できていないからだと思いますが、
    解決方法をご教授していただければと存じます。

    • @IT-gx8sf
      @IT-gx8sf  2 ปีที่แล้ว

      コメントありがとうございます!
      配列を使って、「"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の処理を高速化できるので便利ですよね(^^)
      参考になればと思います。

  • @teruohino9976
    @teruohino9976 4 หลายเดือนก่อน +1

    変数名が、「A」とか「B」ですと初心者にはわかりにくいです。変数の「A」?、セル番地の「A」?、抽出文字の「A」?。解説用のコードとはいえもう少しわかりやすくしていただくとありがたいです。

  • @dr.masirito9612
    @dr.masirito9612 ปีที่แล้ว +1

    質問です。
    抽出する条件のところをシート上のセルを参照し、それと一致するものがあった場合にBの配列に格納していくにはどうすればよいでしょうか?
    例)sheet1のセルH1に”ABC”という商品名が表示されていたとし、それを参照して配列から商品”ABC”のみのデータを抽出する。
    わかりづらかったら申し訳ないです。
    教えていただけると幸いです。

    • @IT-gx8sf
      @IT-gx8sf  ปีที่แล้ว

      コメントありがとうございます!
      例えば、「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」を含むデータのみを抽出することができます。
      参考になればと思います(^^)
      不明点等ございましたら、コメントいただければと思います。

  • @silverlining9891
    @silverlining9891 ปีที่แล้ว +1

    最終的にはとても参考になりますが、しゃべるときの語尾の「~まーす」がけっこう耳について、内容がなかなか頭に入ってきません。個人の感想です。