• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Excel シート検索 VBA)

Excelシート検索VBAで機器管理の効率化を実現する方法

このQ&Aのポイント
  • Excelを使用した機器管理では、使用履歴などの情報が増えてきており、現在は20シートを使用している状況です。さらに機器が増える予定なので、VBAを使用してシートを探すプログラムを作成し、効率化を図りたいと思っています。
  • 具体的には、機器の製造番号を入力し、ボタンを押すと指定のセルを検索して該当するシートにジャンプするプログラムを作る予定です。VBAの知識がないため、こちらで質問させていただきました。
  • VBAに詳しい方に、シート検索のVBAプログラムを教えていただけると助かります。機器管理を効率化するためには、シートの検索がスムーズに行えることが重要です。

質問者が選んだベストアンサー

  • ベストアンサー
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.3

こんにちは! VBAで可能だとは思いますが、具体的なSheetのレイアウトが判らないので とりあえず流れだけ! 各Sheetの名前は「機器名」となっていて、製品番号は各SheetのA列に半角英数で入っているとします。 インプットボックスに「Sheet名(機器名」」を入力 → その「機器」の「製品番号」を入力 → 最初に入力したSheet名のA列の製品番号の行を選択 という感じでやってみました。 Alt+F11キー → メニュー → 挿入 → 標準モジュール → VBE画面に ↓のコードをコピー&ペーストしてマクロを実行してみてください。 (Alt+F8キー → マクロ → マクロ実行です) Sub Sample1() 'この行から Dim k As Long, i As Long, c As Range, sTr1 As String, sTr2 As String, myFlg As Boolean 1: sTr1 = InputBox("機器名を入力してください。") For k = 1 To Worksheets.Count If Worksheets(k).Name = sTr1 Then myFlg = True Exit For End If Next k If myFlg = False Then If MsgBox("入力したシートが存在しません" & vbCrLf & "再入力しますか?", vbYesNo) = vbYes Then GoTo 1 Else Exit Sub End If Else sTr2 = InputBox("製造番号を入力してください。") Set c = Worksheets(sTr1).Range("A:A").Find(what:=StrConv(sTr2, vbNarrow), LookIn:=xlValues, lookat:=xlWhole) If Not c Is Nothing Then i = c.Row Worksheets(sTr1).Activate ActiveSheet.Cells(i, "A").Select Else MsgBox "入力した製造番号が存在しません。" Worksheets(sTr1).Activate End If End If End Sub 'この行まで ※ あくまで流れだけですので、列・行などは実状に合わせる必要があります。m(_ _)m

hiroshi110016
質問者

お礼

お礼が遅れて申し訳ありません。 お陰様で思っているようなプログラムが組めました。 ありがとうございました。

その他の回答 (2)

  • MSZ006
  • ベストアンサー率38% (390/1011)
回答No.2

ちょっとややこしいですが・・・。 製造番号は各シートの【A2】セルに入っているものとします。(コード中、2カ所に出てきます。実際にあわせて変更してください) ユーザーフォームを作成し、そこにリストボックスとコマンドボタンを配置してください。 (リストボックスに製造番号を表示します。コマンドボタンはフォームを閉じるボタンです。) 下記コードをフォームモジュールに入力してください。 -------- Private Sub CommandButton1_Click() Unload UserForm1 End Sub Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean) Worksheets(Val(ListBox1.List(ListBox1.ListIndex, 1))).Activate End Sub Public Sub UserForm_Initialize() Dim Ws As Worksheet Dim i As Long i = 1 ListBox1.ColumnCount = 2 ListBox1.ColumnWidths = "50;0" ListBox1.Clear For Each Ws In Worksheets ListBox1.AddItem Ws.Range("A2") ListBox1.List(ListBox1.ListCount - 1, 1) = i i = i + 1 Next End Sub -------- 次に、標準モジュールを作成し、そこに下記コードを入力してください。 -------- Sub Auto_Open() Load UserForm1 UserForm1.Show vbModeless End Sub --------- 次に、ThisWorkbookモジュールに下記コードを入力してください。 ---------- Private Sub Workbook_SheetActivate(ByVal Sh As Object) Call UserForm1.UserForm_Initialize End Sub Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) If Target = Range("A2") Then Call UserForm1.UserForm_Initialize End If End Sub ---------- 以上で準備は終了です。 一度ブックを閉じて、再度開いてください。 自動的にマクロが実行されてフォームが表示されます。 製造番号をダブルクリックすると対応するシートがアクティブになります。 シートの追加/削除、製造番号の変更も即座に反映します。 フォームを画面の端のほうに表示させたままにしておいて使うと便利だと思います。

hiroshi110016
質問者

お礼

お礼が遅れて申し訳ありません。 お陰様で思っているようなプログラムが組めました。 ありがとうございました。

  • lv4u
  • ベストアンサー率27% (1862/6715)
回答No.1

質問の回答にはなりませんが、 個人的には、エクセルで処理する業務としては、限界になってきているように思います。 もちろん、頑張ればこのままエクセルでも処理できるでしょうけど、作業効率が「悪化」するように思います。 このジャンルであるVisualBasicとか、アクセスとかFileMakerなど、違うソフトで処理されるほうが良いように思います。

hiroshi110016
質問者

お礼

確かにExcelでは限界があります。 今後は、ほかのソフトも検討して改良していきます。 アドバイスありがとうございました。

関連するQ&A