• ベストアンサー

Excel VBAで検索をするには

他シートのセル位置を指定して、その言葉をキーワードに 検索をかけて、該当列の列数を取得しようと思っております。 他シートのセル位置の指定の仕方がわかりません。。 言葉指定の検索は下記の通りできました。 Dim i As Integer Application.ScreenUpdating = False '2行目で検索 i = Range("IV2").End(xlToLeft).Column To 1 Step -1 If InStr(Cells(2, i).Value, "$金額$") > 0 Then '列数取得  ・   ・ End If Application.ScreenUpdating = True ここまで。 $金額$の場所に、他シートのRange("A1")を指定する方法を 教えて下さい!!

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

  • ベストアンサー
  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.5

#02です。 >Worksheets("自シート").Cells(65536, i).End(xlup).Row >でやったのですが、やはり、シート選択でエラーがでます。  上の命令ではシート選択はしていませんが???  せっかく補足していただいているのですが意味が通じません。私の想像力が乏しくてすみません。 どんな命令で、どのようなエラーが出たかを教えていただかず、ただ「エラーになりました」と言われても回答が難しいです。コードを掲載して、エラーが出た行とエラー内容を明示してください。補足説明していただくよりその方が早いと思います。 Worksheets("自シート").Cells(65536, i).End(xlup).Row でシートを明示していればActiveSheetがどのシートであってもエラーにはならないと思います。エラーになっているのは本当にこの行ですか? >括弧でエラーがでているのでしょうか? シート名タブに入力できているなら問題はありません。私の環境でも問題なく動きました。 少なくとも Sheets("自シート(CSV)").Active は動きません。Activateというメソッドはありますが、Activeというメソッドはないからです。

その他の回答 (4)

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.4

#01です >最終セルを行を取得したいのですが、 >Cells(11,i)は、固定で11行目を選択したいのですが・ が矛盾しているような気がするのですが… Cells(11,i)をSelectしたいなら  Worksheets("自シート").Activate  ActiveSheet.Cells(11, i).Select にしてください。エラーになるのはシートがActivateでないからです 最終行を取得したいなら  Worksheets("自シート").Cells(65536, i).End(xlup).Row などで取得できます。

ichigobana
質問者

補足

何度もありがとうございます! Worksheets("自シート").Cells(65536, i).End(xlup).Row でやったのですが、やはり、シート選択でエラーがでます。 シート名は、 自シート(CSV) で、括弧でエラーがでているのでしょうか? Sheets("自シート(CSV)").Active どうぞよろしくお願い致します!

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.3

#02です >コマンドボタンは、Sheets("他シート")に作っています。 するとActiveSheetは「他シート」になっているのですね。これでは検索が「他シート」に対して行われます。 (質問にあるコードはActiveSheetの明示がないのですが、2行目にデータがあるシートがActiveSheetになっています) 解決策1:ボタンは「自シート(?)」に配置する 解決策2:Range、Cellsを   Sheets("自シート").Range("IV2").End(xlToLeft)   Sheets("自シート").Cells(2,i).Value のようにシートを明示する。

ichigobana
質問者

補足

出来ました!! 検索は出来ました。 検索後、自シートの、検索該当セルを選択し、最終セルを 行を取得したいのですが、 selectメソッドが失敗しましたとエラーがでました・・。 Dim i As Integer Application.ScreenUpdating = False '1行目で検索 For i = Sheets("自シート").Range("IV2").End(xlToLeft).Column To 1 Step -1 If InStr(Sheets("自シート").Cells(2, i).Value, Sheets("他シート").Range("J12")) > 0 Then ’ここでエラーがでます Worksheets("自シート").Cells(11, i).Select  ・   ・   ・ Cells(11,i)は、固定で11行目を選択したいのですが・。 ずうずうしくすみませんが、よろしくお願いします。

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.2

たぶん質問は端折って書かれただけだと思いますが、文字列が見つからなかった時の処理が書かれていませんね。 Sub Macro3() Dim i As Integer Dim psw As Boolean Application.ScreenUpdating = False '2行目で検索  For i = Range("IV2").End(xlToLeft).Column To 1 Step -1   If InStr(Cells(2, i).Value, Sheets("他シート").Range("A1")) > 0 Then    psw = True    Exit For   End If  Next i  If psw Then   MsgBox ("検索文字は" & Chr(64 + i) & "列にあります")  Else   MsgBox ("検索文字列が2行目にありません")  End If Application.ScreenUpdating = True End Sub

ichigobana
質問者

補足

ご回答ありがとうございます! 上記コードを記述しましたが、MsgBox ("検索文字列が2行目にありません")となりました。 コマンドボタンは、Sheets("他シート")に作っています。 Private Sub CommandButton1_Click() ’コードを1行追加しました。 Worksheets("入力データ").Select Dim i As Integer Dim psw As Boolean Application.ScreenUpdating = False '2行目で検索 ・ ・ 入力データシートの、2行目の文字列(例:金額)は、 リンク貼付けで数式が入っています。これが原因でしょうか? なんどもすみませんがよろしくお願い致します。

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.1

Sheets("Shtte2").Range("A1")

関連するQ&A

専門家に質問してみよう