エクセルVBA初心者です。
シート1行目には工場名、2行目に見出し、3行目からデータが記入されています。
2行目に見出しとして、A列には作業者名、B列に工事番号、C列から作業時間などが記入されています。
ユーザーフォームにコンボボックス、コマンドボタンを設置し、コンボボックスには工事番号一覧が表示されるようにするところまではできましたが、コンボボックスで工事番号を選択し、コマンドボタンを実行することで、1シート内の一致する行だけを表示したいのですが、いろいろなサイトを参考に試してみたのですがうまくいきませんでした。
同じ内容のシートが複数ありますが、シート毎での検索・抽出をしたいと考えています。
どのようなコードを作成したら良いのかご教授願えたら幸いです。
よろしくお願い致します。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

>コンボボックスで検索


表題として「メイン」の課題を表してないでしょう。
コンボはあくまで項目を選択する道具。
本件はコードを作ってくださいという依頼で(質問ではない。丸投げ)になっているが基本は自分で作ること。
データの簡略実例も載せてないので回答者が作らないといけない。面倒を少しでもかけないこと。
>シート1行目には工場名、2行目に見出し、3行目からデータが記入されています。
2行目に見出しとして、A列には作業者名、B列に工事番号、C列から作業時間
など文章で書かず、シートの見た目で表現できないのか。
ーー
工場が複数あって、工場ごとに別シートになっているのかな。
>シート毎での検索・抽出をしたいと
この表現はあいまい。
(1)指定工場のシート内だけの検索で該当リストを出すのか
すると指定工場はどうして指定するのか
(2)全工場を検索して該当をすべて出すのか
判りにくい。
ーー
結局は検索のコードが書けないということだろう。そこをはっきりさせて質問をすること。
コンボなんぞ、色々言っているが、カッコを重視するコントロールなどに目が移ってはいけない。
>してみたのですがうまくいきませんでした
どう旨くいかないのか?それも書いてない。
検索や全体のロジックが書けないのが原因であると思うが、これはプログラムの経験不足に尽きる。
ブックのシートをすべてとらえる方法は
Sub test01()
For Each sh In Worksheets
If sh.Name <> "結果" Then
MsgBox sh.Name
End If
Next
End Sub
を実行してみて。
ここでは「結果」というシート以外の全シートを捉えていることを納得すること。
ーーー
あと、検索はFind、Filter,SQL,など色々あるが初心者には難しいので将来の課題とし
(やるならマクロの記録をとって勉強すること)
各シートの全行を探しまくる方法でやるしかなかろう。
Sub test01()
Dim sh As Worksheet
Dim k
k = k + 2
For Each sh In Worksheets
If sh.Name <> "結果" Then
MsgBox sh.Name
test02 sh, k
End If
Next
End Sub
Sub test02(sh, k)
d = sh.Range("B65536").End(xlUp).Row
MsgBox sh.Name & " " & d
For i = 2 To d
If sh.Cells(i, "B") = "123" Then
Worksheets("結果").Cells(k, "B") = sh.Cells(i, "B")
Worksheets("結果").Cells(k, "C") = sh.Cells(i, "C")
k = k + 1
End If
Next i
End Sub
ーー
例えばB列で123を検索。これはコンボなどからもってくる。そのやり方は質問者がやってみて。
例データ
Sheet1  B2:C6
B列   C列
234
123a
456
111
222
Sheet2以下略。C列データも一部略。
ーー
結果シート B2:C4
123a  <-Sheet1から
123b  <-Sheet2から
123c  <-Sheet3から
各シートで123は1つしかない例でやったため。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
いくつかご指摘いただきましたが、確かにその通りです。
シートの構成は以下のような感じです。シート名は工場名になっています。
   A      B     C      D       E
1 工場名
2 作業者名 工事番号 客先名  開始時間   終了時間
3 山田太郎 3110025 (株)○○○ 4月6日8:00 4月6日17:00
4 伊藤一郎 3110028 ○○○(株) 4月6日8:00 4月6日17:00

全工場の集計をする必要はなく、集計するのは各工場毎です。
一覧表示したい行は、B列の工事番号を元に、該当する行だけを表示させたいのです。


教えていただいたことを参考に、もう少し自分で頑張ってみようと思います。
ありがとうございました。

お礼日時:2011/04/07 15:48

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

このQ&Aを見た人はこんなQ&Aも見ています


人気Q&Aランキング