VBA Excelのセル検索

このQ&Aのポイント
  • VBAを使用して、Excelのセルを検索する方法について質問があります。具体的には、C列にある特定の文字列を元にセルを検索し、該当するセルの行番号を取得したいです。しかし、検索する文字列は数字であり、上記の方法ではうまく動作しないようです。どのようにすればよいでしょうか?
  • VBAを使ってExcelのセルを検索する方法について質問があります。具体的には、C列にある特定の文字列を検索して、そのセルの行番号を取得したいです。ただし、検索する文字列は数字であるため、上記の方法ではうまく動作しません。解決策をご教示いただけないでしょうか?
  • VBAを使用してExcelのセルを検索する方法について質問があります。具体的には、C列にある特定の文字列を検索し、そのセルの行番号を取得したいです。ただし、検索する文字列は数字であり、現在の方法では正常に動作しません。解決策を教えていただけないでしょうか?
回答を見る
  • ベストアンサー

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が持ってしまうのですが・・・ 色々考えているのですが分かりません。 どなたか教えて頂けませんか?よろしくお願いします。

noname#4100
noname#4100

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

  • ベストアンサー
  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.1

getCell = Columns("C").Find(inputStr).Row でgetCellには"58"が入ったセルの行番号が入るはずですね。試していませんが・・・

noname#4100
質問者

お礼

Findの使い方をよく理解していなかったんですね・・・ nishi6さんの回答通りで行番号、入りました。 とっても助かりました!ありがとうございます。

関連するQ&A

  • エクセルVBAでのエラー

    おはようございます。 昨日ここでいろいろ教えていただき、300のエクセルファイルから特定の範囲のデータ抽出方法を書いてみたのですが、セルが多すぎて実行できません、というエラーがでてしまいます。 これはどのように解消すればよろしいのでしょうか? Sub Test() Dim FPath1 As String, FPath2 As String Dim FName As String, myBook As String Const startROW As Long = 14, lastROW As Long = 20 Const startCOL As Long = 8, lastCOL As Long = 10 Const shtNAME As String = "sheet1" Application.ScreenUpdating = False FPath1 = "D:\MR5567\" FPath2 = "D:\New Microsoft Excel Worksheet\" Workbooks.Add myBook = ActiveWorkbook.Name FName = Dir$(FPath1 & "*.xls") Do While FName <> "" Workbooks.Open Filename:=FPath1 & FName ActiveWorkbook.Sheets.Select Sheets(1).Activate Sheets.Copy After:=Workbooks(myBook).Sheets(Sheets.Count) Workbooks(FName).Activate Application.DisplayAlerts = False ActiveWorkbook.Close FName = Dir$ Loop ActiveWorkbook.SaveAs Filename:=FPath2 & "Renketsu.xls", FileFormat:=xlNormal ActiveWorkbook.Close Application.ScreenUpdating = True End Sub

  • Excel VBA(列全体のセルの処理)の質問です。

    Excel VBA(列全体のセルの処理)の質問です。 初心者です。 やりたいことは、一つの列(C列とします)の各セルに整数もしくは同一文字列がセットされています。行数は不定ですが、全行に渡って処理したい。 処理はセルが文字列なら何もしないで、次の行に移る。 数字なら、数字の大きさに従って背景色を変える(0,1-10,11-20とか)。 セルの書式は 標準 になっています。 行の選択は => Columns("C:C").Select 背景色指定はこんな感じかと思っています。 Dim delay As Long if delay = 0 Then ColorIndex = 10 Pattern = xlSolid ElseIf delay ... Then : Else : End If 列全体に渡って実行する方法、各セル値を取り出してやる方法がわかりません。 宜しく、お願いします。

  • EXCEL VBA作成方法

    職場で頭の痛いことがありまして・・・ 月合計をEXCELで1つのシートに出すことは出来ますが、それを日付ごとに(1日~31日)複数シートにする方法がわかりません。 内容は自分で工夫をして見ましたがうまくできません。ご教授をいただけますでしょうか? Sub 月別シート分割() Dim 元シート As Worksheet Dim 列幅() As Variant Dim 条件列 As Integer Dim 月 As Long Dim 条件1 As String, 条件2 As String Dim i As Integer, j As Long Set 元シート = ActiveSheet ActiveCell.CurrentRegion.Select ReDim 列幅(Selection.Columns.Count) For i = 1 To Selection.Columns.Count 列幅(i) = Selection.Cells(, i).ColumnWidth Next 条件列 = 1 月 = Month(ActiveCell.Offset(1, 条件列 - 1)) If Selection.AutoFilter Then Selection _ .AutoFilter For i = 1 To 31 Sheets.Add Before:=Sheets(i) ActiveSheet.Name = i & "" 条件1 = ">=" & DateSerial(月, i, 1) 条件2 = "<" & DateSerial(月, i + 1, 1) 元シート.Activate ActiveCell.CurrentRegion.Select Selection.AutoFilter Field:=条件列 _ , Criteria1:=条件1 _ , Operator:=xlAnd _ , Criteria2:=条件2 Selection.SpecialCells( _ xlCellTypeVisible).Copy Sheets(i).Range("A1").PasteSpecial For j = 1 To Selection.Columns.Count Sheets(i).Cells(, j).ColumnWidth _ = 列幅(j) Next j Next i Selection.AutoFilter Sheets(1).Activate 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 -------------------------------------------

  • エクセルVBAで検索結果セル位置抽出時、実行時エラーが出ます。

    エクセルVBAで  ・シート"log"のA列にある文字列(A1="AB<CD>EF")を2つにわけて、それぞれシート"edit"のセルに保存(A1="<CD>")(B1="EF")し  ・さらにA1セルをシート"NameList"にあるリストを元に置換する という作業をさせるマクロを組んでいるのですが、 途中で「アプリケーション定義またはオブジェクト定義のエラーです」が出て困ってます。 組んだマクロは下記の通りです。 Option Explicit Option Base 1 Sub Edit() Dim i As Integer Dim log_lastrow As Integer Dim list_lastrow As Integer Dim all As String Dim main As String Dim hn As String Dim chr() As Variant Dim j As Integer Dim k As Integer Dim chrname As String Dim cell As Range Dim line As Integer log_lastrow = 100 list_lastrow = 100 ReDim chr(list_lastrow, 4) For j = 1 To list_lastrow For k = 1 To 2 chr(j, k) = Sheets("NameList").Cells(j , k).Value Next Next For i = 1 To log_lastrow all = Sheets("log").Cells(i, 1).Value hn = Mid(all, InStr(all, "<"), (InStr(all, ">") - 2)) main = Right(all, Len(all) - InStr(all, ">")) Set cell = Sheets("NameList").Columns("A:A").Find(what:=hn, lookat:=xlWhole, MatchCase:=True, matchbyte:=True) line = Sheets("NameList").Range(cell).Row  chrname = chr(line, 2) Sheets("edit").Cells(i, 1).Value = chrname Sheets("edit").Cells(i, 2).Value = main Set cell = Nothing Next End Sub 下から7行目の line = Sheets("NameList").Range(cell).Row 1行上で検索されたセル位置情報の行番号をlineに入れようと思ったのですが、ここでエラーが出ます。何が悪いのかよろしくご教授願います。

  • Excel VBAの数値変換

    ExcelVBAの質問です。 ある文字列から抽出した数字(ただし文字型)を数字型に変換するのはどうしたらよいですか。 Dim moji As String, xxx As String Dim suji As Doulbe xxx = Mid(moji, 3, 4) この後、xxxを数字型にしたいのですが、どうしたらよいですか? よろしくお願いします。

  • EXCEL VBA:結合セルのデータを取り出すには?

    結合セルに書き込まれている文字列を取得したいのですが、 何か良い方法はありますか? 以下のような方法をとってみたのですが、 イマイチうまくいきませんでした。。。 Dim iRow as Integer Dim strData as String iRow = 1 strData = Cells(iRow, 1).MergeArea.Value どなたかご教授頂けないでしょうか? 何卒よろしくお願いします。

  • エクセル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 --------------------------------------------------------- 質問のが悪いかも知れませんが、必要なことがあれば随時追記させてください。 以上、よろしくお願いいたします。

  • Excel VBA でテキストボックスの値をセルA列から検索

    いつもお世話になります。 Private Sub CommandButton3_Click() Dim 行 As String Dim 列 As String Dim 最終行 As String Dim 検索行 As String Dim メッセージ As Integer Dim 一致 As Range Dim myNO As Variant Dim i As Long Sheets(3).Select 最終行 = Range("A2").End(xlDown).Offset(1).Select 行 = ActiveCell.Row 列 = ActiveCell.Column myNO = TextBox2.Value 検索行 = Range("A2").End(xlDown).Select ※・・・Set 一致 = Range("A2:検索検").Findwhat:=TextBox2,lookat:=xlWhole) If 一致 Is Nothing Then MsgBox "データがありません。新規コード入力します。" Cells(行, 列 + 0) = UserForm1.TextBox2.Value Cells(行, 列 + 1) = UserForm1.ComboBox7.Value Else i = Cells(行 - 1, "A") Cells(i, 列 + 0) = UserForm1.TextBox2.Value Cells(i, 列 + 1) = UserForm1.ComboBox7.Value End If End Sub 「エラー1004'Range'メソッドは失敗しました'Global'オブジェクト」とでます。※印が黄色になっています。 ユーザーフォーム1のテキストボックスの値をシート3のA列から検索して、一致すれば、A列の一致セルに上書き入力して、一致が無い場合はA列の空白セルに追加入力したいのです。よろしくお願い致します。

  • 2007エクセルVBが2013エクセルで動かない

    よろしくお願いします。 エクセル2007VBをエクセル2013に移行して動かしたところ >>>>の部分でエラーが出ました 2007では動いていたのですが、なぜエラーになったのかわかりません。 プログラムは下記の通りです。 Dim iti1 As String Dim ITI2 As String Dim ITI3 As String Dim ITI4 As String Dim ITI5 As String Dim ITI6 As String Dim ITI7 As String Dim ITI8 As String Dim myRange As Range Dim myrange1 As Range Dim answer As Integer Dim c As Double Dim n As Double Workbooks(book1).Activate Sheets("A").Select ITI4 = Range("D65536").End(xlUp).Address '----D列の最終行から上方向の終端セルを選択 Set myRange = Worksheets("A").Range("d6", ITI4) answer = Application.WorksheetFunction.Count(myRange) Set myrange1 = Worksheets("A").Range("g5") For c = 1 To answer 'データー個数のカウント If myrange1.Offset(c) = myday Then n = n + 1 Next     Workbooks(book1).Activate Sheets("A").Select 'コピー座標の取得 iti1 = Range("D65536").End(xlUp).Address '----D列の最終行から上方向の終端セルを選択 ITI7 = Range(iti1).Offset(, 9).Address Range("a5", ITI7).AutoFilter FIELD:=7, Criteria1:=myday ITI2 = Range("M65536").End(xlUp).Address '----M列の最終行から上方向の終端セルを選択 'コードコピー ITI5 = Range(ITI2).Offset(-n + 1, -10).Address '左上のセル>>>>>>>>>ここでアプリケーション定義又はオブジェクトの定義エラーがおこります。 ITI6 = Range(ITI2).Offset(, -9).Address '右下のセル Range(ITI5, ITI6).Copy 'scと銘柄コード貼り付け Workbooks(book3).Activate Sheets("記入").Select ITI3 = Range("c65536").End(xlUp).Address '----C列の最終行から上方向の終端セルを選択 ITI8 = Range(ITI3).Address '終端セルの次を選択 Range(ITI8).Offset(1).PasteSpecial Paste:=xlPasteValues よろしくお願いします。 まだ何本かVBのプログラムがあるのですが移行に際しての注意などがあるサイトがあったら教えてください。

専門家に質問してみよう