- 締切済み
エクセル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 | 説明がわかりにくくてすみません。 よろしくお願い致します。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- fujillin
- ベストアンサー率61% (1594/2576)
キーワードは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)
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列を選択し、そのアドレスをメッセージボックスで表示します。 ご参考になれば。
- xls88
- ベストアンサー率56% (669/1189)
>列が連続していないので、その際の貼り付け方法が >どのように指定すればよいのか、わかりませんでした。 Aシートの不要列を非表示にすればどうでしょうか。
お礼
それもありですよね・・・。 ただ、貼り付け後のシートから、 また計算したり、他のシートへ移動させたいので できれば非表示ではなく、完全にすっきりできれば いいかなぁと思っておりました。 ありがとうございました。
- n-jun
- ベストアンサー率33% (959/2873)
Excel(エクセル) VBA入門:オートフィルタ(AutoFilter)でのデータ抽出 http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_autofilter.html こうゆう感じのことですか。
お礼
ありがとうございます。 拝見させていただきました。 大体回答いただいたHPの内容でなんとかなりそうですが、 列が連続していないので、その際の貼り付け方法が どのように指定すればよいのか、わかりませんでした。 大変申し訳ありませんが、教えていただけませんか?
お礼
これで挑戦してみたいと思います。 本当に困っていて、助かりました<(_ _)> 本当にありがとうございます。