• ベストアンサー

結合させた状態で、vbaで列番号を取得する方法

A1とA2を結合させた状態で、vbaで列番号を取得する方法はありますか? この状態で Sub Sample() Dim 列 As Long 列 = Rows(1).Find(What:="検索文字", LookAt:=xlWhole).Column End Sub をすると、エラーになります。 結合を解除すれば、1が返ります。 結合させた状態でなおかつ列番号を取得する方法をご教授下さい。

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

  • ベストアンサー
  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.1

次のようにすればよいでしょう。 Sub Sample() Dim 列 As Long 列 = WorksheetFunction.Match("検索文字", Range("1:1"), 0) End Sub

lsqaesdfrdp
質問者

お礼

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

その他の回答 (1)

回答No.2

No.1 さんのように、MATCH 関数のほうが手っ取り早いと思います。ですが、あえて Find メソッドについて回答してみます。 A1:A2 が結合されている状態で、手動で検索(Ctrl+F)してみれば分かりますが、ヒットしません。結合の位置が B1:B2 であれば、アクティブセルの位置が適切なら結合セル中の文字列でもヒットしますけど。というわけで、これは Excel の仕様ということで、何ともならないと思います。 下のコードでは、A1 セルとその他の範囲というふうに分けて、それぞれを調べています。 また、Find メソッドのほうは「Rows("1:2")」あるいは「Range ("1:2")」というふうに結合セルの全体を含む範囲にしないと、やはりヒットしません。手動でも同じです。 なお Range.Find.Column というふうに、いきなりプロパティを求めようとしてしまうと、Find メソッドが Nothing を返したとき(文字列が見付からなかったとき)に、エラーになってしまいます。したがって面倒でも、検索結果を Set するなどして、必ず Nothing か否かを確認してから列を求めるのがいいでしょう。 あと、何だか前述の説明と矛盾しているような話ですが、Cells.Find であれば、A1:A2 が結合されていてもヒットします。シート上の適当な位置にカーソルをドラッグせずに置いて手動で検索しても、同様です。 Sub Sample()   Const s As String = "検索文字"   Dim r As Range   Dim 列 As Long   If Range("a1").Value = s Then     Debug.Print 1     Exit Sub   End If   Set r = Rows("1:2").Find(What:=s, LookAt:=xlWhole)   If Not r Is Nothing Then 列 = r.Column   Debug.Print 列 End Sub

lsqaesdfrdp
質問者

お礼

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

関連する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が返されます。 結合されててもセルを検索する方法を教えてください。

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

    例えば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 このようなコードを作ってみたのですが列文字に変換する方法がわかりません。

  • マクロ findを使用しての列番号検索

    いつも回答して頂き、とても感謝しています。 質問内容ですが、 FINDを使用して列番号を検索する時、FINDでセル位置を取り出し、そのセル位置を元に列番号を取り出しています。FINDの記述部分で列番号を検索するにはどうしたらよろしいのでしょうか?宜しくお願い致します。 Dim 項目1 As Range Dim c1 As Long If Application.CountIf(Rows(4), "みかん") = 1 Then Set 項目1 = ws2.Rows(4).Find(what:="みかん", LookIn:=xlValues, lookat:=xlWhole, _ SearchOrder:=xlByColumns, searchdirection:=xlPrevious) c1 = 項目1.Column End If

  • VBAで列を探して最終行までハイパーリンクを付けた

    A列に URL http://oshiete.goo.ne.jp/ http://oshiete.goo.ne.jp/ http://oshiete.goo.ne.jp/ http://oshiete.goo.ne.jp/ http://oshiete.goo.ne.jp/ http://oshiete.goo.ne.jp/ http://oshiete.goo.ne.jp/ http://oshiete.goo.ne.jp/ http://oshiete.goo.ne.jp/ が入ってる場合は、 Sub Sample1() Dim R As Range For Each R In Range("a2:a" & Cells(Rows.Count, "a").End(xlUp).Row) ActiveSheet.Hyperlinks.Add Anchor:=R, Address:=R.Value Next End Sub でハイパーリンクを付けられますが、 URL列がA列じゃない場合の応用の聞かせ方がわかりません。 場合によっては、画像のようにB列であったりC列であったりします。 なので Dim C As Long C = Cells.Find(What:="URL", LookAt:=xlWhole).Column で列番号を取得して、ループさせようと思ったのですが、 For Each R In Range("a2:a" & Cells(Rows.Count, "a").End(xlUp).Row) の部分でどうすればいいのかわかりません。 range表記ではなくcells表記にすればいいような気がしますがどうやって改造すればいいでしょうか? あと、この場合はForEachではなくDoloopやForNextを使った方が良いのでしょうか?

  • vbaで困っております

    エクセルであるキーワードの値が入っている列番号を取得したいのですが、 Find(キーワード, lookat:=xlWhole).Column でうまくいかないです、どなたかご教授いただけないでしょうか。

  • ExcelのVBA ListBox.RowSourceの範囲について教えてください。

    下記のように範囲を変数で検索指定したいのですが、うまくいきません。VBAは初心者です。誰か助けて。 内容は・・・五十音順にあるリストを作り、ウ音のみをListBoxに表示したいのですが。 Private Sub ToggleButton3_Click() Dim A As Range Dim BBB As String Dim C As Range Dim DDD As String Set A = Cells.Find(what:="ウ", lookat:=xlWhole) BBB = Cells(A.row, A.Column + 1).Address Set C = Cells.Find(what:="エ", lookat:=xlWhole) DDD = Cells(C.row - 1, C.Column + 1).Address ListBox商品名.RowSource = "BBB:DDD" End Sub PS 違う方法でもいいのでどなたか教えてください。

  • マクロセルの値によってセルの色を消す

    エクセル2013です。 セルの値が0又は空白の場合でそのセルが色塗りされていたら色を消す というマクロをを作成しました。 ただ700行55列では処理が遅いです。 Sub 色消() '成功 Dim 最終行 Dim 最終列 Dim 対象セル As Range 最終列 = Cells(8, Columns.Count).End(xlToLeft).Column '8行目の最終列を取得 最終行 = Cells(Rows.Count, 1).End(xlUp).Row 'A列の最終行を取得 For Each 対象セル In Range(Cells(10, 17), Cells(最終行, 最終列)) If 対象セル.Value = 0 Or 対象セル = "" Then 対象セル.Interior.ColorIndex = 0 End If Next 対象セル End Sub 対象範囲から対象セルを全部見つけて一括処理すれば早いのではと 以下のマクロを作成してみましたが Set 対象範囲 = Cells.Find(What:=0 Or "", LookIn:=xlValues, LookAt:=xlWhole) で構文ERRです。 どこを直せばいいのでしょうか? よろしくお願いします。 Sub 色消2() '2014/8/4 '失敗 Dim 対象範囲 Dim 最終行 Dim 最終列 最終列 = Cells(8, Columns.Count).End(xlToLeft).Column '8行目の最終列を取得 最終行 = Cells(Rows.Count, 1).End(xlUp).Row 'A列の最終行を取得 対象範囲 = Range(Cells(10, 17), Cells(最終行, 最終列)) Set 対象範囲 = Cells.Find(What:=0 Or "", LookIn:=xlValues, LookAt:=xlWhole) If Not 対象範囲 Is Nothing Then 対象範囲.Interior.ColorIndex = 0 End If End Sub

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

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

  • タイトル名で複数列を取得し、その列を削除するマクロ

    1行目にタイトル名があり、タイトル名で複数列を取得し、その列を削除するマクロを作成したいです。 いろいろ調べ、下記のコードを試し、1つの列は削除可能でしたが、 複数となるとどのようになるのか分からず・・どなたかお教えいただければ助かります。 以下は「たんぽぽ」のみですが、1行目に花の名前が多数並んでおり、「たんぽぽ」「バラ」「百合」…を一緒に削除したいです。 Dim R As Range Do Set R = ActiveSheet.Range("A:ZZ").Find(What:="たんぽぽ", LookAt:=xlWhole) If R Is Nothing Then Exit Sub R.EntireColumn.Delete Shift:=xlToLeft Loop

  • 改行のあるセルをFindで検索したい

    エクセルです。 A1セルに 「あああ」と入力して、ALT+Enterで改行し、「いいい」と入力しました。 VBAで Sub test() MsgBox Cells.Find(What:="あああ" & Chr(13) & "いいい", LookAt:=xlWhole).Address End Sub として、セル番地を取得したいのですが オブジェクト変数または With ブロック変数が設定されていません。(Error 91) と言うエラーが返ってきてしまいます。 $a$1が返ってきてほしいのですが。 Sub test() Debug.Print Cells.Find(What:="あああ*", LookAt:=xlWhole).Address End Sub で、$a$1が返ってきますが、 できれば改行含む検索ができるようになりたいです。

専門家に質問してみよう