• 締切済み

エクセルVBAで、検索・抽出の仕方を教えてください

VBAを殆ど使ったことがないのですが、 仕事でどうしても必要なため、以下のやり方を教えてください。 Aというシートにあるデータを貼り付けた後、 自動的にあるキーワードで検索してヒットした行と、 必要な項目が飛び飛びになっている列(複数)を 抽出してBというシートに貼り付けたいと思っています。 イメージとしては、Aというシートから商品名iで抽出して 商品名   |D(不要な列) |容量|E(不要な列)|製造会社| F(商品名)|D’(不要)  |G |E’(不要) |H   | i(商品名)|D’(不要)  |J |E’(不要) |K   | L(商品名)|D’(不要)  |J |E’(不要) |K   | i(商品名)|D’(不要)  |M |E’(不要) |N   | ________________________________ ↓不要な列を省いた状態にしてBというシートに この様な状態で貼り付けたいと思っています。 商品名   |容量|製造会社| i(商品名)|J |K   | i(商品名)|M |N   |     説明がわかりにくくてすみません。 よろしくお願い致します。

みんなの回答

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.4

キーワードは1列目と限定しています。もととなるシート(A?)で検索したいセル(またはその行のセル)をセレクトした状態で、以下のマクロを実行すれば別シートに集計されます。 注1)別シートは新しく作成され、名前が"B"または"B#"(#は番号:すでに同名のシートがある場合連番で振られる)となり、ここに結果が集計されます。 注2)コピーしたい列はマクロの中のcolで定義されていますので、ここを任意に変えればコピーされれる列が変わります。(サンプルでは1,3,5列を設定=A列、C列、E列) Sub test() Dim ss As Worksheet, ds As Worksheet Dim cv As String, col, rc, i, j, imax col = Array(1, 3, 5)   '←ここにコピーする列番号を列挙  Set ss = ActiveSheet  j = Selection.Row  imax = Cells(Rows.Count, 1).End(xlUp).Row  i = 0  Do   If i = 0 Then cv = "B" Else cv = "B" & Format(i, "#")   rc = 0   For Each ds In Worksheets    If ds.Name = cv Then rc = 1   Next   i = i + 1  Loop Until rc = 0  Sheets.Add after:=ss  Set ds = ActiveSheet  ds.Name = cv  cv = ss.Cells(j, 1)  For i = 1 To imax   If ss.Cells(i, 1).Value = cv Then    rc = rc + 1    For j = 0 To UBound(col)     ds.Cells(rc, j + 1).Value = ss.Cells(i, col(j))    Next j   End If  Next i End Sub

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.3

ANo.1です。 新規Bookのシート1のA1~F10位に適当なデータを打ち込みます。 Sub try() Dim r As Range Dim rr As Range Set r = Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible) Set rr = Intersect(r, Range("A:A,C:C,E:E")) r.Select MsgBox r.Address rr.Select MsgBox rr.Address End Sub コードを貼り付けて実行します。 1回目はセルA1から表示されているデータ範囲を選択し、そのアドレスをメッセージボックスにて表示します。 2回目は1回目の範囲から、A・C・E列を選択し、そのアドレスをメッセージボックスで表示します。 ご参考になれば。

takeme
質問者

お礼

これで挑戦してみたいと思います。 本当に困っていて、助かりました<(_ _)> 本当にありがとうございます。

  • xls88
  • ベストアンサー率56% (669/1189)
回答No.2

>列が連続していないので、その際の貼り付け方法が >どのように指定すればよいのか、わかりませんでした。 Aシートの不要列を非表示にすればどうでしょうか。

takeme
質問者

お礼

それもありですよね・・・。 ただ、貼り付け後のシートから、 また計算したり、他のシートへ移動させたいので できれば非表示ではなく、完全にすっきりできれば いいかなぁと思っておりました。 ありがとうございました。

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

Excel(エクセル) VBA入門:オートフィルタ(AutoFilter)でのデータ抽出 http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_autofilter.html こうゆう感じのことですか。

takeme
質問者

お礼

ありがとうございます。 拝見させていただきました。 大体回答いただいたHPの内容でなんとかなりそうですが、 列が連続していないので、その際の貼り付け方法が どのように指定すればよいのか、わかりませんでした。 大変申し訳ありませんが、教えていただけませんか?

関連するQ&A