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

Поделиться
HTML-код
  • Опубликовано: 14 дек 2024

Комментарии • 10

  • @reo728reo
    @reo728reo Год назад +1

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

  • @syouzama
    @syouzama Год назад +1

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

  • @あんぼうあんぼう
    @あんぼうあんぼう 5 месяцев назад +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の処理を高速化できるので便利ですよね(^^)
      参考になればと思います。

  • @dr.masirito9612
    @dr.masirito9612 2 года назад +1

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

    • @IT-gx8sf
      @IT-gx8sf  2 года назад

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

  • @teruohino9976
    @teruohino9976 6 месяцев назад +1

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

  • @silverlining9891
    @silverlining9891 Год назад +1

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