VBA初心者です。
エクセルで、ある列(仮にA列)のみに限定し、ショートカットキーを押した時に、
別シートにあるデータベースから検索、
検索結果をショートカットキーを押したセルに反映させるマクロを組みたいと思っています。
具体的には、
シート1→(請求明細用シート)
A列→コード
B列→企業名
C列→部署名
D列→請求内容
E列→金額 etc
シート2→データベース(全コード一覧)
A列→コード
B列→企業名
C列→部署名、のみが記載。
検索ボックスは、
ユーザーフォームにテキストボックスひとつ、ボタン1つ、リストボックス1つ。
テキストボックスに文字を入力し、ボタン(検索用)を押すと、
リストボックスにシート2上のAーC列の結果が表示され(検索条件:部分一致)、
検索結果をリストボックス上でダブルクリックすると、
ショートカットキーを押したA列のセル(及びB-C列)に検索結果を出力することができる、
といったプログラムを考えています。
(B-C列への出力はVLOOKUPだけで大丈夫なので、マクロ上で組む必要はないです。
また、テキストボックスで検索する時は、基本的にB列(会社名)の内容で検索する予定です。
そして同じ会社でも部署が違えば、別のコードを採用している為、
検索結果が複数ある場合があります。
注文が多くて申し訳ありませんが、よろしくお願いします。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
どうしてもUserFormを使いたい場合は参考にならないかもしれませんが、
以下は、Excelの基本機能 AutoFilter を使った例です。
こんな感じのが簡単だと思うんですけどね..
定数ws1とws2の設定は該当シート名に変更しなければいけません。
また、マクロについては共用で、キーは[Shift]+[Enter]キー。
ws1とws2とも ActiveCellがA:C列の範囲内ならマクロが稼働します。
#初回はWindowをDeactivate/Activateが必要です。
#OnKeyでマクロが登録されます。
'標準モジュールに記述
Option Explicit
Public Const ws1 = "Sheet1" '請求明細用シートの名前をセット
Public Const ws2 = "Sheet2" '全コード一覧の名前をセット
'-------------------------------------------------
Sub keySet()
Application.OnKey "+~", "test"
End Sub
'-------------------------------------------------
Sub keyReset()
Application.OnKey "+~"
End Sub
'-------------------------------------------------
Sub test()
If Intersect(ActiveCell, Columns("A:C")) Is Nothing Then Exit Sub
Dim x
Select Case ActiveSheet.Name
Case ws1
Call ws2_ShowAll
With Sheets(ws2)
Application.Goto .Range("A1")
x = InputBox("?")
If Len(x) = 0 Then
Sheets(ws1).Activate
Exit Sub
End If
.Range("A1").AutoFilter Field:=2, _
Criteria1:="=*" & x & "*"
End With
Case ws2
If Len(ActiveCell.Value) > 0 Then
If Not Sheets(ws2).FilterMode Then Exit Sub
x = ActiveCell.EntireRow.Range("A1:C1").Value
Sheets(ws1).Activate
ActiveCell.EntireRow.Range("A1:C1").Value = x
Call ws2_ShowAll
End If
End Select
End Sub
'-------------------------------------------------
Sub ws2_ShowAll()
With Sheets(ws2)
If .AutoFilterMode Then
If .FilterMode Then
.ShowAllData
End If
Else
.Range("A1").CurrentRegion.Resize(, 3).AutoFilter
End If
End With
End Sub
'ThisWorkbookモジュールに記述
Option Explicit
'-------------------------------------------------
Private Sub Workbook_WindowActivate(ByVal Wn As Window)
keySet
End Sub
'-------------------------------------------------
Private Sub Workbook_WindowDeactivate(ByVal Wn As Window)
keyReset
End Sub
#Sub test でActiveSheet.Nameによる分岐をしてますから、
#他シートでのOnKey解除はしてません。
#場合によってはSheetActivate/SheetDeactivateイベントコードも必要になります。
No.1
- 回答日時:
類似の事をされた方がいらっしゃいますので、ご参考にどうぞ。
テキストボックスの入力確定はチェンジイベントを用いず、ご質問にある様にボタンを用いる方が良いでしょう。
http://okwave.jp/qa/q7309041.html
ご自分の要件に合わせてアレンジしたコードをご提示の上、不明点を御質問いただけると回答もつきやすいと存じます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- Excel(エクセル) 【Excel】指定のセル内容を基に別シートのセルを検索して選択する【VBA】 1 2022/06/16 16:16
- Excel(エクセル) VLOOKUP が機能しない、その原因は何 ? 8 2022/10/19 12:06
- Visual Basic(VBA) VBA 検索と入力 Excel ブック ぶぶぶ シート ししし 列V 検索対象の列です 最終行は、お 6 2023/05/17 01:40
- Excel(エクセル) Excelでの検索結果を含む行だけを表示させたい 5 2023/03/10 17:08
- Visual Basic(VBA) VBA 改行コードの取り方 1 2022/03/22 14:14
- Excel(エクセル) Vlookup関数で#N/Aエラー表示について 3 2022/09/03 20:59
- Visual Basic(VBA) 検索のユーザーフォームの表示について 1 2023/03/27 23:31
- Visual Basic(VBA) エクセルのマクロで対象ごとにシート分けしてその内容をセルに書き込みたい 9 2022/08/24 13:23
- Excel(エクセル) Excel_マクロ_複数のシートのVLOOKUPで表示された#N/A以外に色付けをしたいです 1 2023/02/16 22:37
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA指定行削除
-
Worksheets メソッドは失敗しま...
-
空文字 "" ですが 空文字の意味...
-
VBAコンボボックスで選択した値...
-
B列の最終行までA列をオート...
-
VBAで指定範囲内の空白セルを左...
-
VBAでのリスト不一致抽出について
-
VBA カスタムオーダーのあと...
-
VBAを使って検索したセルをコピ...
-
VBAの初心者なのですが、「並び...
-
VBAを用いて条件付きの平均値、...
-
マクロについて。S列の途中から...
-
Cellsのかっこの中はどっちが行...
-
Excelで、あるセルの値に応じて...
-
vba 2つの条件が一致したら...
-
重複データをまとめて合計を合...
-
VBAのFind関数で結合セルを検索...
-
URLのリンク切れをマクロを使っ...
-
エラーコード1004
-
文字列の結合を空白行まで実行
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Worksheets メソッドは失敗しま...
-
Excelで、あるセルの値に応じて...
-
B列の最終行までA列をオート...
-
vba 2つの条件が一致したら...
-
Cellsのかっこの中はどっちが行...
-
VBAを使って検索したセルをコピ...
-
文字列の結合を空白行まで実行
-
VBAのFind関数で結合セルを検索...
-
IIF関数の使い方
-
【VBA】2つのシートの値を比較...
-
マクロ 最終列をコピーして最終...
-
VBA 何かしら文字が入っていたら
-
Changeイベントでの複数セルの...
-
URLのリンク切れをマクロを使っ...
-
エクセルVBAにて =A1=B1とすれ...
-
VBAでのリスト不一致抽出について
-
データグリッドビューの一番最...
-
マクロについて。S列の途中から...
-
VBA UserFormからの転記で
-
targetをA列のセルに限定するに...
おすすめ情報