• 締切済み

エクセルVBAであいまい検索フォームを作りたいです。

エクセルVBAであいまい検索フォームを作りたいです。 (Ctrl+Fではなく) 商品群A・商品群B・商品群C・・・・と分けられたシートの すべてのA列に、商品名が入っています。 テキストボックスと【検索】ボタンと【次を検索】ボタンのみの 単純な検索用ユーザーフォームから 商品名をシートをまたいで検索し、 Ctrl+Fと同じように該当セルに移動、 次を検索で次の商品へ移動、 すべてのシートに該当商品が無ければ メッセージボックス「該当する商品はありません」 なんとなく出来そうな気がしてチャレンジしましたが、 基本がなっていないため行き詰りました。 (自動マクロを少しいじる程度なので・・・) とんでもなく支離滅裂ですが、チャレンジしたゴミコードを晒します。 順番がおかしいのは判るのですが、どうすればいいのか。。。 どなたか、このコードを正し添削して頂けませんか。 (あ、このコードにこだわっているわけではないので、 もっと他に適した方法があるのなら、それを教えてください) よろしくお願い致します。 ちなみに、作成はexcel2007ですが、2000・2003に配布します。 Dim s As Variant Dim c As Range Dim f As Range For Each s In Worksheets 'ブック内各シートに繰り返し With s s.Select 'シートを選択 Set f = Columns("B").Cells 'B列を変数にセット Set c = f.Find(What:=Trim(strData), LookIn:=xlValues, MatchByte:=False, LookAt:=xlPart) 'FINDでstrData(userformからの入力した文字列)をあいまい検索としてセット If Not c Is Nothing Then Application.Goto c, True '見つかった時は該当セルに飛ぶ Else End If End With Next End Sub

  • 13-ya
  • お礼率20% (1/5)

みんなの回答

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.3

昔の記事になってしまいましたが、役に立ったと投票してくださっている方がいらっしゃいますので、バグフィックスです。'<-追加 とある3カ所を追加願います。 これで、実行時エラーで止まる事が減ると思います。 本コードを応用して、エクセルの検索ダイアログのまがい物を作成し、アドインにして使っています。2000文字には収まらないので、まるごと投稿するのは断念しました。 Do targetBook.Activate Worksheets(currentSheetID).Activate With targetBook.Worksheets(currentSheetID) If Not (.UsedRange.Cells.Count = 1 And IsEmpty(.UsedRange)) Then If firstAddress = "" Then With targetBook.Worksheets(currentSheetID).UsedRange On Error Resume Next '<- 追加 Set c = .Find(Me.findStrTextBox.Value, LookIn:=lookInMode, LookAt:=matchMode, _ SearchOrder:=orderMode, SearchDirection:=xlNext, MatchCase:=caseMode, MatchByte:=mbMode) On Error GoTo 0 '<- 追加 End With If Not c Is Nothing Then firstAddress = c.Address previousAddress = c.Address c.Activate Exit Sub End If Else With targetBook.Worksheets(currentSheetID).UsedRange Set c = .Range(previousAddress) Set c = .FindNext(c) End With If (Not c Is Nothing) And (c.Address <> firstAddress) Then previousAddress = c.Address c.Activate Exit Sub End If End If End If End With currentSheetID = currentSheetID + 1 firstAddress = "" Set c = Nothing '<- 追加 Loop While currentSheetID <= targetBook.Worksheets.Count

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.2

#1です。ブックを明示する位しか思いつきません。それでダメなら、当方では検証できませんので、あしからず。 Labelは止めて、グローバル変数にしました。 ☆標準モジュール Sub showForm() UserForm1.Show vbModeless End Sub ☆フォームモジュール Dim targetBook As Workbook Dim currentSheetID As Long Dim firstAddress As String Dim previousAddress As String Private Sub CommandButton1_Click() Dim c As Range If Me.TextBox1.Value = "" Then Exit Sub If currentSheetID = 0 Then currentSheetID = 1 Do targetBook.Activate Worksheets(currentSheetID).Activate If firstAddress = "" Then With targetBook.Worksheets(currentSheetID).UsedRange Set c = .Find(Me.TextBox1.Value, LookIn:=xlValue, lookat:=xlPart) End With If Not c Is Nothing Then firstAddress = c.Address previousAddress = c.Address c.Activate Exit Sub End If Else With targetBook.Worksheets(currentSheetID).UsedRange Set c = .Range(previousAddress) Set c = .FindNext(c) End With If (Not c Is Nothing) And (c.Address <> firstAddress) Then previousAddress = c.Address c.Activate Exit Sub End If End If currentSheetID = currentSheetID + 1 firstAddress = "" Loop While currentSheetID <= targetBook.Worksheets.Count Me.TextBox1.Value = "" Call initialize MsgBox "検索終了" End Sub Private Sub UserForm_Initialize() Set targetBook = ActiveWorkbook End Sub Private Sub initialize() currentSheetID = 0 firstAddress = "" previousAddress = "" End Sub アドイン化してみました。その場合は、xla形式で保存します。 ☆Workbookモジュール Private Sub Workbook_AddinInstall() Dim menu As Object, Submenu1 As Object Set menu = Application.CommandBars("Worksheet Menu Bar").Controls.Add(Type:=msoControlPopup) menu.Caption = "全シート検索" Set Submenu1 = menu.Controls.Add Submenu1.Caption = "検索フォーム表示" Submenu1.OnAction = "showForm" End Sub Private Sub Workbook_AddinUninstall() Application.CommandBars("Worksheet Menu Bar").Controls("全シート検索").Delete End Sub

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.1

昔から気になっていたので、試みに作成してみました。当方xl2000です。 UserFormに、TextBox1,CommandButton1の他に、Label1,2,3を作成します。変数の内容が視認できて、デバッグが楽そうなので、Labelを用いてみました。動くようになったら、各Labelのプロパティを不可視にします。一部ご質問の内容と異なり、各シートのUsedRange全体を検索しています。 2007で動くか、また、安定動作は自信がありませんが、ご参考まで。 '標準モジュール Sub test() UserForm1.Show vbModeless End Sub 'UserForm1のモジュール Private Sub CommandButton1_Click() Dim currentSheetID As Long Dim c As Range If Me.TextBox1.Value = "" Then Exit Sub If Me.Label1.Caption = "" Then Me.Label1.Caption = CStr(1) Do currentSheetID = Val(Me.Label1.Caption) Worksheets(currentSheetID).Activate If Me.Label2.Caption = "" Then 'first find With Worksheets(currentSheetID).UsedRange Set c = .Find(Me.TextBox1.Value, LookIn:=xlValue, lookat:=xlPart) End With If Not c Is Nothing Then Me.Label2.Caption = c.Address 'firstAddress Me.Label3.Caption = c.Address 'previousAddress c.Activate Exit Sub End If Else 'findnext With Worksheets(currentSheetID).UsedRange Set c = .Range(Me.Label3.Caption) Set c = .FindNext(c) End With If (Not c Is Nothing) And (c.Address <> Me.Label2.Caption) Then Me.Label3.Caption = c.Address c.Activate Exit Sub End If End If currentSheetID = currentSheetID + 1 Me.Label1.Caption = CStr(currentSheetID) Me.Label2.Caption = "" Loop While currentSheetID <= ActiveWorkbook.Worksheets.Count Me.TextBox1.Value = "" Call initialize MsgBox "検索終了しました" End Sub Private Sub UserForm_Initialize() Call initialize End Sub Private Sub initialize() Me.Label1.Caption = "" Me.Label2.Caption = "" Me.Label3.Caption = "" End Sub

13-ya
質問者

補足

早速のレスありがとうございます。 試してみたところ、 ”インデックスが有効範囲にありません” Set c =.Find(Me.TextBox1.Value, LookIn:=xlValue, lookat:=xlPart) に黄マーカーが入ります。 Findの使い方もよく分かっていませんが、 ■■■の部分に、検索先オブジェクトを指定しなくてもいいのでしょうか? Set c =■■■.Find(Me.TextBox1.Value, LookIn:=xlValue, lookat:=xlPart) とんちんかんな事を言っていたらすみません。 引き続きご教授いただけると嬉しいです。

関連するQ&A

  • EXCEL VBA 文字列検索とコピー

    以前にも同じ質問をさせて頂いたのですが、どうも上手くいかないので今一度お願い致します! 名簿を作成していて、現在下記のようなシートになっています。 [ Sheet1 ] A   B   C   D   E   F   G   H 日付 ○  ○  ○  ○  名前 電話 メール このF列の名前を検索して、検索文字に該当する全てのセルの行ごと(出きればA1:H2の範囲)コピーして、Sheet2に貼り付けたいです。 現在のコードは、以下のようになってます。 宜しくお願いします!! Sub 検索1() Dim myFind As Variant Dim myfRow As Long, c As Range Dim CopySh As Worksheet Dim i As Long Dim num As Integer Set CopySh = Worksheets("Sheet2") 'コピー先のセルの最初の行 i = 1 '================================== myFind = Application.InputBox("検索文字をカナで入力してください", Type:=2) If VarType(myFind) = vbBoolean Or myFind = "" Then Exit Sub With Worksheets("Sheet1").Cells(4.4) Set c = .Find(myFind, , xlValues, xlWhole) If Not c Is Nothing Then myfRow = c.Row Do c.Copy CopySh.Cells(i, 1) 'コピー Set c = .FindNext(c) i = i + 1 Loop Until c Is Nothing Or myfRow = c.Row End If End With Beep '終了の合図

  • VBA Excelのセル検索

    VBAで以下の要領でセルの検索をしています。 ------------------------------------------- dim getCell As String dim inputStr As String Windows("ExcelBook.xls").Activate Sheets("sheet1").Select inputStr = "58" getCell = Columns("C").Find(inputStr) ------------------------------------------- C列にある文字列を検索して、該当するセルの行番号を取得したいのですが、その検索する「文字列」は数字なんです(0~9000までで重複しません)。 上の方法で実行すると、inputStrに代入した数字をgetCellが持ってしまうのですが・・・ 色々考えているのですが分かりません。 どなたか教えて頂けませんか?よろしくお願いします。

  • エクセルVBAでFindを使った検索について

    エクセル2003でVBAを勉強し始めたものです。 findを用いた検索についてご教授をお願いしたく、ご質問させていただきます。 まず、 <シート1> A列:受付No. B列:氏名 C列:物件名 <シート2> A~F列:省略 G~O列:物件名 とあります。 シート1上にコマンドボタンがあり、クリックするとシート1への入力用フォームが開きます。 さらに、そのフォーム内のテキストボックスに物件名を入力するのですが、テキストボックス内でダブルクリックで、物件検索用のフォームが開きます。 物件検索用フォーム内のテキストボックス(Text物件名検索)に文字列を入力し、コマンドボタン(command物件名検索)をクリックすると、フォーム内下部のリストボックス(List物件検索結果)内に、シート2のG~O列を検索した結果が並ぶようになっています。 その候補の中から選択したものが、シート1の物件名の列に並ぶようにしたいのです。 そこで、エクセルファイルを開いたすぐ後は、検索結果が意図通りに表示するのですが、一度他のコード(マクロにてシート1の行削除等)を実行した後、再度物件検索を行うと、検索結果が“なし”(その場合は「見つかりませんでした」とメッセージボックスが開くようにしてあります)となってしまいます。 変数の扱いがわるいのでしょうか?・・・ どうぞご教授のほどよろしくお願いいたします。 以下、検索用フォームのテキストボックス入力後、コマンドボタン(command物件名検索)をクリックしたときの処理コードです。 --------------------------------------- Private Sub command物件名検索_click() Dim bname As String Dim fndrange As Range Dim firstcell As String bname = Text物件名検索.Text Set fndrange = Sheets("TBオーナー").Columns("g:o").Find(bname) If bname = "" Then MsgBox ("キーワードを入力してください") Exit Sub Else If fndrange Is Nothing Then MsgBox ("見つかりませんでした") Text物件名検索.Text = "" Text物件名検索.SetFocus Else If Not fndrange Is Nothing Then firstcell = fndrange.Address Do Set fndrange = Sheets("TBオーナー").Columns("g:o").FindNext(fndrange) List物件検索結果.AddItem fndrange.Value Loop While Not fndrange Is Nothing And fndrange.Address <> firstcell End If End If End If End Sub ----------------------------------------- また、関係あるかわかりませんが、他のコード(シート1から行を削除するマクロ)も掲載させていただきます。 以下、 -------------------------------------- Private Sub Command削除_Click() Dim t As Long Dim DelNo As String Dim delNos As Long Dim s As Range DelNo = InputBox("削除するデータNOを入力してください") delNos = Val(DelNo) Set s = Sheets("TBマスター").Columns("A").Find(delNos, lookat:=xlWhole) If DelNo = "" Then Exit Sub ElseIf s Is Nothing Then MsgBox ("データがありません") Exit Sub Else t = Sheets("TBマスター").Columns("A").Find(delNos, lookat:=xlWhole).Row Rows(t).Delete End If End Sub --------------------------------------------------------- 質問のが悪いかも知れませんが、必要なことがあれば随時追記させてください。 以上、よろしくお願いいたします。

  • [VBA]他シートから、検索した文字の左隣の数値を合計したい

    エクセルのシートの G列に検索対象の文字列があり、 F列にその文字列に対応した数値があります。 以下のような感じです ・・・ F列 G列 ・・・     100 AAA     200 AAA     500 BBB     800 BBB     700 BBB このシート(ここでは「シートX1」と呼ぶ)に対して、 別シートのセルから kensaku1というユーザ定義関数を使って 該当する検索文字列の左隣(F列)の値を合計したいと 思ってます。また引数は以下のように "シート名"と"検索文字列"を想定してます。 =kensaku1("シート名","検索文字列") したがって、やりたいことは何かといいますと、 =kensaku1("シートX1","BBB")とすると、 500+800+700で2000がセルに入ればOKです。 ネットで調査してある程度のコードを見つけることは できました。 コードは一番下にのせております。 しかし、コードの★1からデバッグすると、 うまく合計した値が返ってくるのですが、 いざシートに =kensaku1("シートX1","BBB")とすると、 合計値が返ってきません。 デバッグすると★2の場所でNothingになってしまいます。 どなたか 原因を教えていただけないでしょうか? 環境はWindows XP SP2 Excel2000です。 ------------------------------------------- Function kensaku1(sheetName As String, myKey As String) As String   Dim c As Range   Dim FirstAdd As String   Dim Gokei As Long   Gokei = 0   Worksheets(sheetName).Activate   Set c = ActiveSheet.Columns("G").Find( _     What:=myKey, _     LookIn:=xlValues, _     LookAt:=xlPart, _     MatchCase:=False)   If Not c Is Nothing Then ←★2     FirstAdd = c.Address     Do       Gokei = Gokei + c.Offset(, -1).Value       Set c = ActiveSheet.Columns("G").FindNext(c)       If c.Address = FirstAdd Then Exit Do     Loop Until c Is Nothing   End If   kensaku1 = Gokei End Function Sub test()  ←★1   Call kensaku1("シートX1","BBB") End Sub -------------------------------------------

  • ExcelにおけるVBAで、データの振り分けをしたい

    Sub a() Dim i As Long Dim s As Long Dim b As Worksheet Dim c As Worksheet Dim maxi As Long Dim maxs As Long Application.ScreenUpdating = False With ThisWorkbook Set b = .Worksheets("bbb") Set c = .Worksheets("ccc") End With maxi = b.Range("A1").CurrentRegion.Rows.Count maxs = c.Range("A1").CurrentRegion.Rows.Count For i = maxi To 2 Step -1 For s = maxs To 2 Step -1 If c.Cells(s, 1) = b.Cells(i, 1) And c.Cells(s, 2) = b.Cells(i, 2) Then c.Cells(s, 14) = b.Cells(i, 3) End If Next s Next i Application.ScreenUpdating = True End Sub ワークシートcとワークシートbの1列目と2列目が一致したときにだけ、cの14列目にbの3列目のデータを代入したく思い、以上のようなコードを書きましたが、重くて終わる様子がありません。 ・そもそもあっているのか、あっていないならどこを修正すればよいか ・早く終わるようにするにはどうしたらいいか アドバイスをよろしくお願いします。

  • Excel VBAを使った重複行の抜き出しについて教えてください

    以下のような2シートから、重複する「商品番号」のあるsheet1の行を抜き出して、別シートに書き出したいと思っております。 sheet1  |  A   |  B   | C -+--------+-------+----- 1|      |      | -+--------+------+-------- 2|商品番号|商品名|責任者 -+--------+------+-------- 3|  123456|  ガム|山田太郎 -+--------+------+-------- 4| 2345678| チョコ|田中花子 ・・・ sheet2  |  A   |  B   | C -+--------+-------+----- 1|      |     | -+--------+------+-------- 2|商品番号|商品名|責任者 -+--------+------+-------- 3| 3987624|     | -+--------+------+-------- 4| 193678|      | ・・・ そこでVBAを作成したのですが、例えば商品番号「222011001」の行を抜き出したいのに、「22011001」の行も一緒に抜き出してしまいます。 どこがいけないのか、教えて頂けないでしょうか。 作成したVBAは以下の通りです。 VBA初心者で本を見ながら作ったため、大変見にくくなっているかと思います。申し訳ありませんが、どなたかおわかりになる方がいらっしゃいましたら、どうぞ宜しくお願い致します。 Option Base 1 Option Explicit Sub 重複データ抽出書き直し() Dim シート(2) As Worksheet Dim 比較列(2) As Integer Dim 一致セル As Range Dim 検索範囲 As Range Dim i As Integer Set シート(1) = Sheets("sheet1") Set シート(2) = Sheets("sheet2") 比較列(1) = 1: 比較列(2) = 1 シート(2).Activate ActiveCell.CurrentRegion.Select Selection.Offset(1, 比較列(2) - 1) _ .Resize(Selection.Rows.Count - 1, 1) _ .Select Set 検索範囲 = Selection Sheets.Add After:=Sheets(Sheets.Count) シート(1).Activate ActiveCell.CurrentRegion.Select Selection.Resize(1).Copy With Sheets(Sheets.Count).Range("A1") If Application.Version >= 9 Then .PasteSpecial 8 End If .PasteSpecial End With For i = 2 To Selection.Rows.Count Set 一致セル = 検索範囲.Find(Selection.Cells(i, 比較列(1)).Value) If Not 一致セル Is Nothing Then Selection.Offset(i - 1).Resize(1) _ .Copy Sheets(Sheets.Count) _ .Range("A65536").End(xlUp) _ .Offset(1) End If Next i Sheets(Sheets.Count).Activate End Sub

  • VBAを使って検索をしたい

    VBAを使って検索をしたい EXCEL2007を使っております。 フォームを立ち上げて日付を入れるとシートの検索を行い、リスト内にその日付のA~Gまでのセルの内容が表示され、それらを別シートに貼り付けるといったことをしたいのですが、複数のセルの情報をリスト内に表示をするのが、よくわからず教えていただきたく思います。 フォーム内のテキストボックスに検索する日付を入れると 画像でいうところのA列を検索し、その日付内のA~Gをリストに表示して、ボタンを押すと貼り付けるといった、動きにしたいのですが、お願いします。 現状検索BOXに以下の記述をしてます これでは、A列のものだけが出てきます。お助けください。 ************************* Private Sub TextBox1_Change() Dim r As Range, FirstCell As Range, rng As Range Dim vnt As Variant Dim prow As Long Dim s As Worksheet Dim cnt As Long Set s = Sheets("sheet2") Set rng = Intersect(s.Range("a:a"), s.UsedRange) '検索キー Set r = rng.Find(What:=TextBox1.Text) If r Is Nothing Then MsgBox "見つかりませんよ" GoTo Exit_sub End If Set FirstCell = r ReDim vnt(0) vnt(0) = s.Cells(r.Row, 1).Resize(1, 5).Value '検索位置 prow = r.Row cnt = 1 Do Set r = rng.FindNext(r) If Not r Is Nothing And (r.Address <> FirstCell.Address) _ And (FirstCell.Row <> r.Row) And (prow <> r.Row) Then ReDim Preserve vnt(UBound(vnt) + 1) vnt(UBound(vnt)) = s.Cells(r.Row, 1).Resize(1, 5).Value '検索位置 prow = r.Row cnt = cnt + 1 End If Loop While r.Address <> FirstCell.Address ' If cnt = 1 Then vnt = s.Cells(FirstCell.Row, 1).Resize(1, 5).Value '検索位置 If cnt > 1 Then vnt = Application.Transpose(Application.Transpose(vnt)) ListBox1.List = vnt ' Set FirstCell = Nothing Erase vnt Exit_sub: If cnt = 0 Then ListBox1.Clear Set r = Nothing Set rng = Nothing Set s = Nothing End Sub

  • VBAで検索してコピー

    エクセル2003を使っています。 下記のような構文で、あるデータを検索しています。 検索まではできましたが、その検索したデータが入力されている行を選択して別のシートにコピーしたいです。 Dim ws1 As Worksheet, ws2 As Worksheet, ws3 As Worksheet Dim rng As Range Set ws1 = Sheets("CSV") '検索先のシート Set ws2 = Sheets("0群加工") '検索データのシート Set ws3 = Sheets("完了") '貼付先シート Set ws4 = Sheets("過程") With ws1.Columns("A") '完全一致でシートの頭から検索(A列) i = 2 Do Until ws2.Cells(i, "E").Value = "" 'ws2のデータがなくなるまで Set rng = .Find(What:=ws2.Cells(i, "E").Value, LookAt:=xlPart, After:=.Cells(.Cells.Count)) '検索 上記は0群加工シートに入力されているデータを、CSVシートに入力されているデータを検索しています。 (ここのデータというのは時間が入力されています。つまり、0群シートに入力されている時間と同じ時間を、CSVシートで検索しています) CSVシートに同じデータがあれば、そのデータがあるセルが属する行をコピーして、違うシートに貼り付けたいです。 よろしくお願いします。

  • VBAの検索で回答をいただいたのですが・・・

    Excel2010VBAの検索で、シート1のE列(2行目から)の「日時」とシート2のE列(2行目から)の日時が一致した場合、シート2のF列(2行目から)からJ列(2行目から)、またはJ列にデータがない場合は、F列(2行目から)からI列(2行目から)にデータを入力するというプログラムを高速化する方法を回答者様から教えていただきました。 シートの内容としては シート1は、A「年」、B「月」、C「日」、D「時刻」、E「日時」(文字列)、F「データ1」、G「データ2」、H「データ3」、I「データ4」、J「データ5」、(1行目はタイトル) シート2も基本的にはシート1と同じです。 教えていただいたプログラムは以下の通りで、これを元にシート3(シート1と同じ配列)のE列の日時とシート2のE列の日時が一致した行のシート3のF~J列(データ1~データ5)、J列のデータがない場合、F~I列(データ1~データ4)のデータをシート2のK~O列(データ1~データ5)に入力するというプログラムを作りたかったのですが、自分にとってはこのプログラムの内容が理解できないため、どこを修正していいか分かりません。 どなたか解説していただけませんか? Sub xxx3() Dim myDic As Object Dim S1_v, S2_v Dim i As Long, n As Long, j As Long 'With Workbooks("ブック.xlsm").Worksheets("シート1") With Sheets("Sheet1") j = .Range("E" & Rows.Count).End(xlUp).Row S1_v = .Range("E1").Resize(j, 6).Value '対象範囲を配列に End With 'With Workbooks("ブック.xlsm").Worksheets("シート2") With Sheets("Sheet2") j = .Range("E" & Rows.Count).End(xlUp).Row S2_v = .Range("E1").Resize(j, 6).Value '対象範囲を配列に End With Set myDic = CreateObject("Scripting.Dictionary") For i = 2 To UBound(S1_v) myDic.Add S1_v(i, 1), i 'keyに追加、itemにi Next i For i = 2 To UBound(S2_v) If myDic.exists(S2_v(i, 1)) Then j = myDic.Item(S2_v(i, 1)) S2_v(i, 2) = S1_v(j, 2) S2_v(i, 3) = S1_v(j, 3) S2_v(i, 4) = S1_v(j, 4) S2_v(i, 5) = S1_v(j, 5) S2_v(i, 6) = S1_v(j, 6) Else 'マッチしなかったときの処理 End If Next 'With Workbooks("ブック.xlsm").Worksheets("シート2") With Sheets("Sheet2") j = .Range("E" & Rows.Count).End(xlUp).Row .Range("E1").Resize(j, 6).Value = S2_v End With Set myDic = Nothing Erase S1_v, S2_v End Sub 回答よろしくお願いします。

  • エクセルVBA初心者です。

    エクセルVBA初心者です。 「テキストボックスとコマンドボタンを使って、シートのA列にあるセルの文字列を左から検索する」という事をやりたいのですが、うまくいきません。お教えください。ちなみにCtrl+Fではなく、VBAで。 Private Sub TextBox1_Change() Dim R As Range With ActiveWorkbook.Worksheets("Sheet名") Set R = .Columns(3).Find(Me.TextBox1.Value) End With If R Is Nothing Then MsgBox "該当セルなし" Else R.Activate End If Set R = Nothing End Sub としましたが、テキストボックス入力+Enterで出来てしまい、コマンドボタンが機能しません。また、BackSpaceやDelをすると、他のセルに飛んでしまいます。????

専門家に質問してみよう