• 締切済み

excelのVBAを利用し検索抽出を行う方法

検索というよりデータの抽出の方が正しいかもしれません。 現在、顧客情報を種類別でシートに分けて表で管理しています。 情報には名前などの文字列、日付、時間などが含まれます。 この表の形式を説明すると、 ・列 … B~AI まで項目があります。(A列は使用していません) ・行 … 1行で1つのデータとなります。 ・行数…シートにより行数は異なります。 この形式の表が全部で14シートあります。 このシートのB列に「未・済」のステータスがあるのですが、 すべてのシートの「未」である行のデータを"Sheet1"に抽出させたいと考えています。 さらに、抽出されたデータの"D"列の日付にソートされるようにしたいのですが、 説明がわかりづらかったら申し訳ありません。 VBA初心者のためご教授いただければと思います。 よろしくお願いします。

みんなの回答

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.2

>VBA初心者のためご教授いただければと思います。  ⇒回答ではありませんが、質問の丸投げをする前に先ずはご自身でマクロ記録  (オートフィルタ→抽出データコピー&貼り付け→並び替えの操作)を行っては   如何でしょうか。   このマクロコードは、Alt+F4で標準モジュールフォルダのMudule1に登録   されています。   これを参考にして最終形にカスタマイズしていく過程で不明点や疑問点等が   でれば、改めて質問する方が良いと思います。      因みにweb検索で上記の操作をキーワードにvbaを付加して検索すれば、   役に立つHPが見つかります。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.1

この質問は丸投げで、初心者だからコードを作ってクレという風に読める。 たいした内容ではないので勉強して自分でやってみるべきだ。 Findなどで検索して、「未」の入っている行データをSheet1にコピーして抜き出す方法もあるが、(初心者には難しく 各シートにまたがっていることもあり) この件に関しては (1)指定1ブックのすべてのシート名(Sheet1を除く)を捕らえる方法 (2)各シートのデータ最終行をとらえる方法 の2つを学べば 各シートのB列セルを総当り法(IF分で判別)で判別して、「未」ならSheet1にその行をコピー張り付けをする。 データ数が10万行を超えるようなものでなければ、この全行総当たり法も処理時間の面で、実用に耐えるだろう。 本当は質問にデータ概数を書く心がけが、コンピュター処理には必要なんだ。 「量は質を規定する」ということ。 ーーー >抽出されたデータの"D"列の日付にソートされるようにしたいのですが こんなものデーター並べ替えの操作をして、マクロの記録を取れば仕舞い。質問するようなことではない。 初心者はマクロの記録のことをまず念頭に置くべきはず。 ーーー (1)jは Sub test02() For Each sh In Worksheets If sh.Name <> "Sheet1" Then MsgBox sh.Name End If Next End Sub をやってみて納得のこと。 ーー (2)は((1)とあわせて) Sub test02() For Each sh In Worksheets If sh.Name <> "Sheet1" Then MsgBox sh.Name d = Worksheets(sh.Name).Range("B65536").End(xlUp).Row MsgBox d For i = 1 To d If Cells(i, "B") = "未" Then MsgBox sh.Name & " " & i '本番ではここでコピー貼り付け処理 End If Next i End If Next End Sub をやって、納得してみて、足らない部分('コピー貼り付け処理のところが中心)を付け加えをしてみて。