電子書籍の厳選無料作品が豊富!

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   |
   
説明がわかりにくくてすみません。
よろしくお願い致します。

A 回答 (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
    • good
    • 0

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列を選択し、そのアドレスをメッセージボックスで表示します。

ご参考になれば。
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/09/01 23:17

>列が連続していないので、その際の貼り付け方法が


>どのように指定すればよいのか、わかりませんでした。
Aシートの不要列を非表示にすればどうでしょうか。
    • good
    • 0
この回答へのお礼

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

ありがとうございました。

お礼日時:2008/09/01 23:09

Excel(エクセル) VBA入門:オートフィルタ(AutoFilter)でのデータ抽出


http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/v …
こうゆう感じのことですか。
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/09/01 22:18

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!