プロが教えるわが家の防犯対策術!

マクロは記録しかできない初心者です。
たとえば、
田中 6月 ナシ 12
鈴木 4月 林檎 23
安部 5月 葡萄 34
田中 5月 イモ 12
鈴木 7月 エビ 23
というデータがあって、別シートに「田中」だけのデータを抽出したい場合はどのようなマクロを組めばよいですか。
田中 6月 ナシ 12
田中 5月 イモ 12

しかも、その検索するデータを入力すると検索できるようにしたいのですが。たとえば、
A1に田中←と入力するとそれ以下に
田中 6月 ナシ 12
田中 5月 イモ 12  と抽出されるようにしたいです。

マクロ初心者ですので、詳しく説明をいただければ幸いです

A 回答 (5件)

データ行数が多いということらしいが


テストデータでテストプログラムで600行ぐらいのデータでやったが、1瞬でした。10000行ぐらいなら辛抱できる処理時間でしょう。やってみて言っていますか。
下記は一番泥臭い総舐め法です。
下記コードで実際やってみてください。
こんな簡単なコードで出来ることです。
Sub test01()
k = 1
d = Worksheets("Sheet1").Range("A65536")
For i = 1 To d
x = Worksheets("Sheet1").Cells(i, "A")
If x = "田中" Then
Worksheets("Sheet2").Cells(k, "A") = Worksheets("Sheet1").Cells(i, "A")
Worksheets("Sheet2").Cells(k, "B") = Worksheets("Sheet1").Cells(i, "B")
Worksheets("Sheet2").Cells(k, "C") = Worksheets("Sheet1").Cells(i, "C")
k = k + 1
Else
End If
Next i
End Sub
ーー
If x = "田中" Then
の田中は検索条件の値の入っているセル(Sheet1のA1らしい)を指定してください。
実行のキッカケはボタンのクリックイベントなどに登録。
ーーー
処理するロジック・手法
(1)総なめ法(上記)
(2)Find,FindNext法
(3)Filter・コピー法
(4)ソートし田中の塊の行を抜き出し
(5)データ構造を持ち込む(作りこむ)
(6)アクセスなどに持ち込んで(MSクエリなど)SQLで処理
(7)ユーザー関数を作る(第n番目出現のの田中の行番号を返す関数)
私が思いつくものでも色々ある。
    • good
    • 0

> 上記で表示している「田中」に該当する者が300種類ぐらいありまして、オートフィルタで300の中から田中を探す時間をかけることができない状況です。

行自体は400行近くあります

あのぉ・・・オートフィルタが何なのか、解っていらっしゃいますか?

400行くらいの中から、「田中」に該当するものが300くらいあるんですよね?
その300くらいある田中を抽出するためにオートフィルタを使います。

その抽出した300くらいの「田中」の中から、さらに田中を探す???
意味が解らないのですが・・・
    • good
    • 0

> オートフィルタ+コピペで行うにはデータの量が多すぎたもので…



Ctrl+A で全選択したり、Ctrl+Shift+* でデータ領域を選択したり、Ctrl+Shift+矢印で終端までを選択したりできるので、特に問題は無いと思うのですが、データの量が多すぎることで、どんな不都合があるのでしょうか?
    • good
    • 0
この回答へのお礼

上記で表示している「田中」に該当する者が300種類ぐらいありまして、オートフィルタで300の中から田中を探す時間をかけることができない状況です。行自体は400行近くあります

お礼日時:2008/05/02 14:45

マクロの記録でも近い部分までできますね。


マクロの記録開始
Sheet1の範囲を指定、コピィ
Sheet2のA2を指定、貼り付け
Sheet2の範囲を指定、オートフィル、A列 田中 等しくないでフィルター
適当に行を範囲指定、行の削除
フィルター 解除
マクロの記録終了
少し手を加えましたが
Sub Macro1()
Range("A2:D10").Select
Selection.Copy
Sheets("Sheet2").Select
Range("A2").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Range("A1:D10").Select
Selection.AutoFilter Field:=1, Criteria1:="<>" & Range("A1").Value, Operator:=xlAnd 'この行をRANGEに一部変更
Rows("2:12").Select
Selection.Delete Shift:=xlUp
Selection.AutoFilter
End Sub
参考にしてください。
    • good
    • 0

A1に名前を入力すると別シートに抽出されるようなマクロに比べるとほんの少しだけ手間はかかりますが、オートフィルタで抽出してコピペすれば、やりたいことはできますよ。



オートフィルタ+コピペでやれることは解っていて、その手間すら省きたいということでしょうか?

この回答への補足

ありがとうございます。
オートフィルタ+コピペで行うにはデータの量が多すぎたもので…

補足日時:2008/05/02 13:57
    • good
    • 0

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