VBAコードを使って1列目の何行目に検索文字があるかを取得する方法

このQ&Aのポイント
  • VBAコードを使用して、Excelの1列目に特定の検索文字が存在する行の行番号を取得する方法について説明します。
  • 提供されたVBAコードの問題点を特定し、エラーの原因を解説します。
  • 実際のコードの動作と結果について詳しく説明し、なぜmyRowに2が代入されないのかを考察します。
回答を見る
  • ベストアンサー

1列目の何行目に検索文字があるかを取得したい

しかしエラーになってしまいます。 エラーの原因がわかりません。 シートの1列目のどこかに「test」と入っている行があるのですが Sub test1() Dim myRow As Long With Sheets("Sheet") myRow = .Column(1).Find(What:="test").Row MsgBox .Cells(myRow, 1) End With End Sub このvbaコードを実行するとエラーになります。 コードとしては「.Column(1)」で1列目と言う意味で、 .Find(What:="test")で、何行目に「test」があるかを取得するという意味だと思うのですが 実行時エラー438が発生します。 実際にtestと言う文字は2行目にあるのですが なぜmyRowに2が代入されないのでしょうか?

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

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

こんにちは! FINDメソッドの細かい使い方は当方が文章で説明するより、↓のサイトが判りやすいと思います。 http://officetanaka.net/excel/vba/cell/cell11.htm 丁寧にやるとすれば 私であれば下記のようなコードにします。 Sub Sample1() Dim c As Range Set c = Worksheets("Sheet1").Range("A:A").Find(what:="test", LookIn:=xlValues, lookat:=xlWhole) If c Is Nothing Then MsgBox "データなし" Else MsgBox c.Row End If End Sub ※ コード内の >Range("A:A") は >Columns(1) にしても大丈夫です。m(_ _)m

DDIZINUHRCMZN
質問者

お礼

回答ありがとうございました。

その他の回答 (2)

回答No.2

正しくはColumns(1)と複数形です。 sub test()の上にOption explicitが入ってますか?型宣言をしないと変数を使えないようにするものです。名前のトラブルが半減されます。

DDIZINUHRCMZN
質問者

お礼

回答ありがとうございました。

  • suo2k
  • ベストアンサー率44% (183/408)
回答No.1

Column(1) の部分、Columns(1) じゃないですっけ。 Sが抜けてる。

DDIZINUHRCMZN
質問者

お礼

回答ありがとうございました。

関連するQ&A

  • vba 結合されたセルの列番号を取得したい

    セルを結合しているセルに、値が入っていて、 その値を検索して列番号を取得したいのですが エラーになります。 A1セルとA2セルを結合して、 「a」をいれて Sub test() MsgBox Cells.Find(What:="a", LookAt:=xlWhole).Column MsgBox Rows("1:2").Find(What:="a", LookAt:=xlWhole).Column End Sub をしても、どちらもエラーになります。 実行時エラー91「オブジェクト変数またはWithブロック変数が設定されていません」 というエラーです。 でもB1に「a」を入れれば、問題なく2が返されます。 結合されててもセルを検索する方法を教えてください。

  • VBA 特定の文字列を含む行を削除する方法

    特定の文字列を含む行を削除する方法が知りたいです。 行を削除する方法はWebで見つけたのですが↓ ---------------------------------------------------- Sub 特定の文字列を含む行を削除() Dim c As Range Dim myRow As Long With Range("A:A") Set c = .Find("特定の文字列") Do While Not c Is Nothing Rows(c.Row).Delete shift:=xlUp Set c = .Find("特定の文字列") Loop End With End Sub ---------------------------------------------------- ↑行を指定している箇所のRowsを Columns  RowをColomn に変更して以下の様にしてみました、   Columns(Colomn,c).Delete shift:=xlUp だめでした、、、。 VBAの知識が乏しく、組み立て方について理解が無いため、どうすればよいかさっぱりわからず、、 こちらで質問させて頂きました。。。 何卒宜しくお願い致します。

  • 文字列を検索しその列をコピーする(VBA)

    よろしくお願いします。 OS:WINDOWS 2000 PRO 環境:OFFICE 2003 エクセルのVBAについての質問です。 A列には数値コードが入っています。 そのコードは"1"と"2"に分類されてます。 マスターはSHEET1で、このマスターから コード1はSHEET2に、 コード2はSHEET3に 振り分けたいのですが、どうもうまくいきません・・・ A列にはコード"1" "2"以外に空白セルが存在します。 空白セルは無視したい。。。 それとこのデータはDBから抽出するのですが、 抽出したデータは規則性はありません。 抽出するごとに"1"と"2"と"空白"はランダムなので、 LOOP等のマクロを調べてやってみたのですが、出来なくて週末になってしまいました。 A列からコード1とコード2を検索して、 ヒットしたコードの行ごと各SHEETにコピーして、 なおかつ各シートA列の入力されていない一番下の セルにコピーしたいのですが、検索でヒットした 上から順番に。。。 これをLOOPと組合わせれば、各シートにコピーするのは 問題ないような気がします。。。 Sub AAA_BBB() .Copy Worksheets("Sheet2").Range("A65536").End(xlUp).Offset(1, 0) End With End Sub LOOP等で上記の条件を満たせる方法はないでしょうか。 ご教示を、よろしくお願いします。

  • 列の番号ではなく文字列で取得するには

    エクセル2003 Sub test() MsgBox ActiveCell.Column End Sub で現在カーソルのあるセルの列番号「3」が取得させるのですが 「C」と言う風に列の文字列で取得するにはどうすればいいのでしょうか? よろしくお願いします。

  • セル入力のタイミングで数式をコピーする方法

    A列に数値を入力→Q2~V2に入っている数式を入力列のQ~V列に コピーをできるようにしたいのですが、、 下記のコードを実行したところ、反応せず(エラーも出ず)で 困っております。 Private Sub Worksheet_Change(ByVal Target As Range) Dim myRow As Long With Target myRow = .Row + 1 If .Column = 1 And TypeName(.Value) = "long" Then    Range("Q2:V2").Copy Cells("Q" & myRow & ":V" & myRow).PasteSpecialPaste:=xlPasteFormulas Application.CutCopyMode = False End If End With End Sub エラーがないため、間違った部分も判らず立ち往生しております。 アドバイス・指摘をお願いいたします!

  • 検索と置換 vba後、そのまま検索できない

    シートに 2014/1/1 が入力されていて VBAで Sub test() If Not Cells.Find(What:=CDate("2014/1/1"), MatchByte:=False) Is Nothing Then Debug.Print "2014/1/1はあります" End If End Sub を実行すると、"2014/1/1はあります"が返りますが このコードを実行し終わってから、ワークシート画面で検索と置換を開くと、 「1/1/2014」の状態で入っています。 そのまま検索ボタンを押しても、さっきはVBAでは"2014/1/1はあります" だったのに、手作業だと「ありません」になります。 どういうことなのでしょう?

  • ある文字を含む列と同じ行にある列と一致の文字の除外

    "名称"(D列)で*ABCD*と含まれるものと同じ行にある"番号"(B列)が一致するものを全て除外したい(D列の値は異なるが、 B列の値が一緒なものを除外したい)。 下記のコードに上記の内容のコードを加えたいのですがやり方を教えていただけないでしょうか? ちなみにVBA初心者なためお手柔らかにお願い致します。 Sub 分別() Dim j As Long j = Cells(Rows.Count, 1).End(xlUp).Row With Range(Cells(3, 1), Cells(j, 43)) .AutoFilter Field:=37, Criteria1:="EFGK" .AutoFilter Field:=4, Criteria1:="*FF0001*", Operator:=xlOr, Criteria2:="*DD0002*" End With End Sub

  • 増やした列へ決められた文字を入力するには?

    いつもお世話になっております。 表があり、A列の前に1列追加し、その新しいA列の3行目のセルから表の最終行に「□」(四角)を表示するようにしたいのですが、思うように行かず困っております。 「□」は印刷後に手でチェックを入れる為に使うのが目的です。 Sub test() Columns("A").Select Selection.Insert shift:=xlToRight Dim myrow() As Variant Dim i As Integer For i = Cells(Rows.Count, 2).End(xlUp).Row To 2 Step -1 myrow(i, 3) = "□" & i Next End Sub A列は増えるんですが、その先が動きません。 よろしくお願いいたします。 環境はWindowsXP Excel2003です。

  • ワイルドカードにしたくない

    例えばシートに aaa iii *********** eee ooo と入って場合、「***********」ならヒットさせたいのですが Sub test() Dim myRow1 As Integer With Sheets("Sheet1") For myRow1 = 1 To .Cells(Rows.Count, "A").End(xlUp).Row If .Cells(myRow1, 1) Like "***********" Then MsgBox "ありました" End If Next myRow1 End With End Sub これだと、aaaの時点でヒットしてしまいます。 If .Cells(myRow1, 1) Like "~***********" Then にすると、***********の行の時もヒットしません。 ***********を文字列としてvbaで検索する方法はありますか?

  • 最終列の列番号を列文字に変換することはできますか?

    例えばaaaがある列を探し、その列番号は4で列文字がDですが、 列番号から列文字をvbaで取得する方法はありますか? Sub Sample() Dim i As Long Dim Colmoji As String i = Rows(1).Find(What:="aaa", LookAt:=xlWhole).Column Colmoji = i 'ここで列文字に変換したい MsgBox i & "の列文字は" & Colmoji & "です" End Sub このようなコードを作ってみたのですが列文字に変換する方法がわかりません。

専門家に質問してみよう