
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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelで、あるセルの値に応じて...
-
vba 2つの条件が一致したら...
-
Cellsのかっこの中はどっちが行...
-
B列の最終行までA列をオート...
-
VBA 何かしら文字が入っていたら
-
Changeイベントでの複数セルの...
-
C# dataGridViewの値だけクリア
-
IIF関数の使い方
-
VB2005EE:DataGridViewでチェ...
-
【VBA】2つのシートの値を比較...
-
Worksheets メソッドは失敗しま...
-
VBAを使って検索したセルをコピ...
-
URLのリンク切れをマクロを使っ...
-
DataGridViewに空白がある場合...
-
エクセル 2つの表の並べ替え
-
VBAで、特定の文字より後を削除...
-
セルに値が入っていた時の処理
-
VBAのFind関数で結合セルを検索...
-
複数csvを横に追加していくマク...
-
複数の列の値を結合して別の列...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelで、あるセルの値に応じて...
-
Worksheets メソッドは失敗しま...
-
Cellsのかっこの中はどっちが行...
-
vba 2つの条件が一致したら...
-
【VBA】2つのシートの値を比較...
-
B列の最終行までA列をオート...
-
IIF関数の使い方
-
URLのリンク切れをマクロを使っ...
-
VBAを使って検索したセルをコピ...
-
DataGridViewに空白がある場合...
-
VBA 何かしら文字が入っていたら
-
VBAのFind関数で結合セルを検索...
-
複数の列の値を結合して別の列...
-
VBAでのリスト不一致抽出について
-
データグリッドビューの一番最...
-
VBAで指定範囲内の空白セルを左...
-
rowsとcolsの意味
-
【Excel VBA】 B列に特定の文字...
-
VBAで、特定の文字より後を削除...
-
エクセル 2つの表の並べ替え
おすすめ情報