エクセル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を見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QAccess2007のフォームウイザードでデータシートを作りたいが方法が分からない

Access2003では、フォームウイザードでデータシートを作れたが。
Access2007では、フォームウイザードでは単票のフォームしか作れない様だ。

どうやって、作るのだろうか。操作が分からない。

Aベストアンサー

どういう帳票が欲しいかわかりませんが一応例として....
まずAccess上部にある作成をクリックします。
フォームウィザードをクリックして使用するテーブルとフィールドを選択します。
次に表形式を選択すれば帳票形式でフォームが作成されます。

もう1つはその他のフォームから複数のアイテムを選択すれば帳票形式でフォームが作成されます。

QエクセルVBA シートにある複数のコンボボックスクリア

下のようにワークシートにコンボボックス(ツールボックス)
があります。
ComboBox_りんご1~ComboBox_りんご10
ComboBox_みかん1~ComboBox_みかん10
シートがアクティブになった時に、.AddItemで
リストを追加しています。
ある処理を終える時に、各リストをクリアします。
ComboBox_りんご1.Clear
ComboBox_りんご2.Clear
・・・
これを
For i = 1 to 10
ComboBox_りんご i .Clear
Next
のようにするにはどうしたらよいでしょうか?
また、一つ一つ記述するのに比べて、処理速度など
何か影響はありますでしょうか?
よろしくお願いします。

Aベストアンサー

下記では如何でしょう。

Sub Test()
Dim i As Long
For i = 1 To 10
ActiveSheet.OLEObjects("ComboBox_りんご" & CStr(i)).Object.Clear
Next
End Sub

Q【Access】複数フォームを閉じる時の、選択処理について

Access Ver. : 2003
Windows Ver.: XP

Accessフォームの「閉じる時」処理で、下記のような工夫をした
いと考えております。

・フォームがひとつしか開かれていないとき、Accessを終了する
・複数のフォームが開かれている時、そのフォームのみを閉じる

そんなVBAコードがありましたら、教えてください。
何か参考になるページでも、かまいません。
どうぞ、宜しくお願いいたします。

Aベストアンサー

forms.count で開いているフォーム数を得て分岐
Application.quit

Access VBE のヘルプで、CurrentProject オブジェクト を見てみたら?

QエクセルVBAでコンボボックスを使いシートのデータをリストアップする方法

VBAの詳しい方教えて下さい。
ConboBox1でSheets1のA列に入ってるデータをピックアップします。
そのピックアップされたのがAAなら
次のConboBox2でSheets2のA列に入ってるデータをピックアップして
BBならSheets3のA列に入ってるデータをピックアップたいのですが、どのようにすれば良いのでしょうか。


ComboBox1.RowSource = Sheets("Sheets1").Range("A1:A2").Address
もしComboBox1にAAが入ったら
ComboBox2.RowSource = Sheets("Sheets2").Range("A1:A2").Address そして
また もし ComboBox1にBBが入ったら
ComboBox2.RowSource = Sheets("Sheets3").Range("A1:A2").Address

これをひとつのUserFormで行いたいのです。
得意先別・商品別・単価をピックアップしたいのです。

教えて下さい。
宜しくお願い致します。

VBAの詳しい方教えて下さい。
ConboBox1でSheets1のA列に入ってるデータをピックアップします。
そのピックアップされたのがAAなら
次のConboBox2でSheets2のA列に入ってるデータをピックアップして
BBならSheets3のA列に入ってるデータをピックアップたいのですが、どのようにすれば良いのでしょうか。


ComboBox1.RowSource = Sheets("Sheets1").Range("A1:A2").Address
もしComboBox1にAAが入ったら
ComboBox2.RowSource = Sheets("Sheets2").Range("A1:A2").Address そして
また もし Com...続きを読む

Aベストアンサー

まず、test もしくは test2 というのは変数ですか?
testという文字列と比較したいのであれば、"test"となります。

あと、RowSource指定時にAddressプロパティを指定してしまうと
"$A$1:$A$4"のような文字列になってしまうと思うのですが。。。
RowSource指定には(ComboBox1の設定時も同じく)文字列を使用するようにしてください。
ComboBox1.RowSource = "CCB!A3:A4"
ComboBox2.RowSource = "NT!A3:A4"
ComboBox2.RowSource = "98!A3:A4"
となります。『シート名!』という書き方がポイントですね。
ここは上手く動いているのであれば、そのままでも結構なんですが。

そして、イベントですが、現在、UserForm_Activateを使用してらっしゃるようですね。
UserForm_InitializeでComboBox1.RowSourceの設定を行い、
ComboBox1_ChangeでComboBox1.TextをString型の変数に取得する
(現在、Dim t As VariantですがDim t As Stringに変更)ようにして、
If t = "test" Then ~ ElseIf t = "test2" Then ~ End If としてみてください。

・・・なるべくご本人が修正したほうがいいと思い、ソースは書かずに
説明してみましたが、私は説明下手なので、わからなかったら、
または私の勘違いなどありましたら、
また補足に入れてください。(^-^;

まず、test もしくは test2 というのは変数ですか?
testという文字列と比較したいのであれば、"test"となります。

あと、RowSource指定時にAddressプロパティを指定してしまうと
"$A$1:$A$4"のような文字列になってしまうと思うのですが。。。
RowSource指定には(ComboBox1の設定時も同じく)文字列を使用するようにしてください。
ComboBox1.RowSource = "CCB!A3:A4"
ComboBox2.RowSource = "NT!A3:A4"
ComboBox2.RowSource = "98!A3:A4"
となります。『シート名!』という書き方がポイントですね。
...続きを読む

QACCESSフォームのボタン表示

ACCESSフォームのボタン表示

ACCESS2000で作成したフォームのボタンはACCESS2007でも変わりません。
ACCESS2007で一から作成したMDBは、ボタンの表示スタイルが異なります。
※ボタンの角が丸く、マウスカーソルをボタンの上に当てるだけで色が変わる。
ACCESS2000で作成したMDBをACCESS2007で上記のように表示させる設定は
あるのでしょうか?
いろいろ見ても、見当たらないのです。
よろしくお願いします。

Aベストアンサー

[Office ボタン] - [Accessのオプション] - [カレントデータベース] で
「フォーム上のコントロールに Windows のテーマを使用する」にチェック。

QExcel VBA シートのコピー時に、シート上のコンボボックスもコピーしたい。

こんにちは。
Excel VBAについて質問させていただきます。
やりたいことは、
シートAにボタンとコンボボックスを配置し、
コンボボックスには氏名の一覧を設定しています。
そこで、ボタンを押すとシートAをボタンとコンボボックスごと
シートBという名前でコピーをしたいと思っています。

ActiveSheet.Copy Before:=Worksheets(1)
でシート・ボタン・コンボボックスのコピーはうまく出来たのですが、
コンボボックスに設定していた氏名の一覧はコピーされていませんでした。

コピー先のシートのコンボボックスにもう一度氏名の一覧を
設定するしかないのでしょうか?
それともシートのコピー時に何かいい方法があるのでしょうか。

宜しければアドバイスをお願い致します。
OSはWindows2000Pro
Excelは2000です

Aベストアンサー

こんばんは。再度の登場です。

先の回答は、ListFillRangeプロパティを使用したものですのでコピーしても値は保持されますが、
質問者のように、AddItemメソッドでセットしたものはコピーしても保持されませんので改めてセットする必要があります。

現在”コンボボックスの中身もコピー”されてるようですが、
その中身のコピーを実行するタイミングを誤ると上手くいかない場合があります。
シートのコピーと同時に”中身のコピー”をするとそれは一見上手くいってるようでも
ブックを閉じて再度開いたときにはクリアーされますので、
コピーしてできたシートがActiveになるたびにそのシートのComboboxにも値をセットしなければいけません。
WorkBookOpenイベントでセットしているのは「元のComboboxにのみ」Listをセットしているわけですから。

●要約●
以下、コピーされてできた新しいシートは、見積書2、とする
(方法1)
「見積書2」がアクティブになる度に「見積書」のComoboxのListをコピーする
(方法2)
WorkbookのOpenイベントの”Function SetComboBox()”を標準モジュールへ移し、
「見積書」「見積書2」それぞれのActivateイベントで、”Function SetComboBox()”を呼び出す
その場合、”Function SetComboBox()”のComboboxのコンテナである固有のシート名は使わずに、ActiveSheetに変更しておく
(方法3)
WorkBookのOpenイベントでは、リスト一覧を配列変数に作成しておき
「見積書」「見積書2」がActiveになったときそのシート上のComboBoxのListに配列変数をセットする
 
●もし興味があれば、配列変数をListプロパティに直接セットするコードをアップしてもいいのですが。。。
 
それから、敬称Comboのリストは決まっているようですから、
別なシートのどこかのセルに一覧を作っておき、
ListFillRangeプロパティにセットしておけばいいですね。

以上です。

 

こんばんは。再度の登場です。

先の回答は、ListFillRangeプロパティを使用したものですのでコピーしても値は保持されますが、
質問者のように、AddItemメソッドでセットしたものはコピーしても保持されませんので改めてセットする必要があります。

現在”コンボボックスの中身もコピー”されてるようですが、
その中身のコピーを実行するタイミングを誤ると上手くいかない場合があります。
シートのコピーと同時に”中身のコピー”をするとそれは一見上手くいってるようでも
ブックを閉じて再度開いたとき...続きを読む

QExcelで作成されたフォームをAccessにコンバージョンしたいので

Excelで作成されたフォームをAccessにコンバージョンしたいのですが、フォームのインポートはできないのでしょうか?
Accessのフォーム作成画面から、インポートを選択していって、Excelファイルを開くのですが、シートしか選択できません。
コントロールのコピペもできないみたいですが。。。
Excelで作成されたフォームはAccessにはインポートできないのですか?
コーディングをそっくり使用することはできなくても、せめてフォームのデザインはコピーしたいのですが。。。(> <)
よろしくお願いします。m(_ _)m

Aベストアンサー

質問者はプロかプロ経験者ですか。でないならこんな勉強は試みないほうが良いでしょう。
市販の書物や初心者向けの講習で説明される話題ではない。プロで会社にその辺の経験者がいたりすれば聞けるでしょうが。原理的には最熟練者の人は変換プログラムは組めるかもしれませんが、そのレベルの人は、この質問コーナーを読んでないでしょうし、無料で教えるスキルではないと思います。
WEBの記事も多分少ないでしょう。
Googleででも「エクセル フォーム アクセス 移行」で出てくる記事を参考にしてはどうでしょう。
http://www.accessclub.jp/bbs2/0080/beginter24987.html
同じ発想の人はいることはいるが。
ーー
VBAとVBのフォームはコードで扱う上で微妙に違うし、アクセスVBAとエクセルVBAでは違う点も多い。
またコントロールの生成もコードで行う方法は隠して、易しいD&Dやマウスによる移動、プロパティボックスでの入力にして易しくしています。
エクセルのUserForm1のフォームも本格的なものではないサービスのような気がする。エクセルで第3者を巻き込んだ業務の開発までは予定して無いように推測する(何でもエクセル的な過大期待が横行している)。
それにエクセルでのセルとの連携をつけた機能LinkedCell、FillいstRangweなどはエクセル特有で、RecordSourceのSQL指定やフォーム指定はアクセス特有と思います。
外観を決めるサイズや書式関係は(エクセルでフォームやコントロールの)プロパティーメモー(アクセスでのフォームやコントロールの)プロパティ設定でやや似せて移せるかもしれない。
エクセルバージョン内の相違、エクセル・アクセルで使えるコントロールの種類の相違などもあります。

質問者はプロかプロ経験者ですか。でないならこんな勉強は試みないほうが良いでしょう。
市販の書物や初心者向けの講習で説明される話題ではない。プロで会社にその辺の経験者がいたりすれば聞けるでしょうが。原理的には最熟練者の人は変換プログラムは組めるかもしれませんが、そのレベルの人は、この質問コーナーを読んでないでしょうし、無料で教えるスキルではないと思います。
WEBの記事も多分少ないでしょう。
Googleででも「エクセル フォーム アクセス 移行」で出てくる記事を参考にしてはど...続きを読む

Qコンボボックスから検索するVBA(エクセル)

sheet1にメニュー画面 sheet2に一覧表を作成しました。
(1)sheet1でユーザーフォームを起動させる。
(2)ユーザーフォームにはコンボボックスを1つ、コマンドボタンを2個配置しました 
(3)コンボボックスのプルダウンメニューはsheet2の一覧表より取得しました
(4)sheet2の一覧表は今後データが増えていきます(データは4行目以降)
という条件で以下のコードを作成しました。
(1)と(2)のコマンドボタンは正常に作動しています。
コンボボックスのコードのみ書いています。
Private Sub UserForm_Initialize()

Dim i As Long

With Worksheets("sheet2")
For i = 4 To .Cells(Rows.Count, 3).End(xlUp).Row
ComboBox1.AddItem Cells(i, 3).Value
Next i
End With

End Sub

このときプルダウンメニューを押しても空欄が表示されてしまいます。
できない理由が分かりません。よろしくお願いします。

また、Private Sub ComboBox1_Change()とは何が違うのでしょうか?

最近 VBAを始めた初心者です。よろしくお願いします。

sheet1にメニュー画面 sheet2に一覧表を作成しました。
(1)sheet1でユーザーフォームを起動させる。
(2)ユーザーフォームにはコンボボックスを1つ、コマンドボタンを2個配置しました 
(3)コンボボックスのプルダウンメニューはsheet2の一覧表より取得しました
(4)sheet2の一覧表は今後データが増えていきます(データは4行目以降)
という条件で以下のコードを作成しました。
(1)と(2)のコマンドボタンは正常に作動しています。
コンボボックスのコードのみ書いています。
Private Sub UserForm_I...続きを読む

Aベストアンサー

>プルダウンメニューを押しても空欄が表示されてしまいます
確認はしていませんが
ComboBox1.AddItem Cells(i, 3).Value

ComboBox1.AddItem .Cells(i, 3).Value
ではありませんでしょうか?

QVBからmdbファイル(Access2000)の特定のフォームを開きたい?

VisualBasicのフォームに配置したコマンドボタンをクリックすることで、特定のmdbファイルをAccess2000で開き、開くと同時に特定のフォームが表示されるようにしたいのですが、こんなことできますか?できるとすればどのようにすればよいのですか?

例えば、C:\商品管理\在庫一覧.mdbにフォーム商品があるとしたとき、
Form1のcommand1をクリックすると、C:\商品管理\在庫一覧.mdbがAccess2000で開き、フォーム商品が最初に表示されるようにしたいのですが・・・
ちなみに、Access2000の起動時の設定では他のフォームが最初に開くようになっています。
よろしくお願いします。

Aベストアンサー

オートメーションを使ってAccessを制御しましょう。
で、他のフォームが最初に開くようになっていることなので、最初に開くフォームを閉じてからAccessを表示するようにすればいいと思います。

Dim acs as Object

'AccessのApplicationオブジェクトを取得する。
Set acs = CreateObject("Access.Application")

'c:\test.mdbを開くacs.OpenCurrentDatabase "c:\test.mdb"

'起動時に開かれたフォームを閉じる
'2はacForm定数のこと
acs.Close 2,"フォーム名"

'Accessを表示させる
acs.Visible = True

'表示させたいフォームを開く
acs.OpenForm "フォーム名"


こんな感じで。

最後に、Accessを終わらせるときは

'オブジェクトの開放
Set acs = Nothing

で、オブジェクトを開放してください。

オートメーションを使ってAccessを制御しましょう。
で、他のフォームが最初に開くようになっていることなので、最初に開くフォームを閉じてからAccessを表示するようにすればいいと思います。

Dim acs as Object

'AccessのApplicationオブジェクトを取得する。
Set acs = CreateObject("Access.Application")

'c:\test.mdbを開くacs.OpenCurrentDatabase "c:\test.mdb"

'起動時に開かれたフォームを閉じる
'2はacForm定数のこと
acs.Close 2,"フォーム名"

'Accessを表示させる
acs.Visibl...続きを読む

Qエクセル VBA コンボボックスの計算

UserForm1上に
コンボボックスには数字がリストされます!
ComboBox1、ComboBox2、ComboBox3
3つ作成して
例えば
ComboBox1=1
ComboBox2=0
ComboBox3=5
と表示された時
CommandButton1をクリックしたら
UserForm2の
TextBox1に”6”と足し算
された数字を表示したいのですが
普通のセルなら
出来るのですが・・
ComboBoxでするなら
どのような記述に
なるのでしょうか?
すいません、教えて下さい!

Aベストアンサー

Private Sub CommandButton1_Click()
UserForm2.TextBox1 = Val(UserForm1.ComboBox1) + _
Val(UserForm1.ComboBox2) + Val(UserForm1.ComboBox3)
UserForm2.Show
End Sub

でどうでしょう。


人気Q&Aランキング