dポイントプレゼントキャンペーン実施中!

セルを結合しているセルに、値が入っていて、
その値を検索して列番号を取得したいのですが
エラーになります。

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 結合されたセルの列番号を取得した」の質問画像

A 回答 (3件)

今まで結合セルと設けたシートで検索を使ってきて問題がなかったのですが、お示しの例でやってみると確かにエラーになり、悩んでしまいました。


結論としては、結合セルの先頭セル以外のセルを起点に検索をかけようとすると、エラーになる様です。
当方の用いているワークシートでは先頭セルは結合してありませんので、問題なかったのですね。ご参考まで。
Sub test()
'a1:a2結合
Dim c As Range

'afterを指定しないと、expression(Cellsなので、A1セル)の左上セルを指定したことになる
Set c = Cells.Find(what:="a", lookat:=xlWhole)
If c Is Nothing Then Debug.Print "Test1 みつかりません"

Set c = Cells.Find(what:="a", after:=Range("A1"), lookat:=xlWhole)
If c Is Nothing Then Debug.Print "Test2 みつかりません"

Set c = Cells.Find(what:="a", after:=Range("A2"), lookat:=xlWhole)
If c Is Nothing Then Debug.Print "Test3 みつかりません"
End Sub
'結果
'Test1 みつかりません
'test2 みつかりません

Sub test2()
'a2:a3結合
Dim c As Range

Set c = Cells.Find(what:="a", lookat:=xlWhole)
If c Is Nothing Then Debug.Print "Test1 みつかりません"

Set c = Cells.Find(what:="a", after:=Range("A1"), lookat:=xlWhole)
If c Is Nothing Then Debug.Print "Test2 みつかりません"

Set c = Cells.Find(what:="a", after:=Range("A2"), lookat:=xlWhole)
If c Is Nothing Then Debug.Print "Test3 みつかりません"
End Sub
'結果
'Test3 みつかりません
    • good
    • 0
この回答へのお礼

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

お礼日時:2013/05/02 22:25

#2です。

推敲不足で申し訳ありません。下記が正しいです。
'afterを指定しないと、expressionの左上セル(ここでは対象がCellsなので、A1セル)を指定したことになる
    • good
    • 0
この回答へのお礼

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

お礼日時:2013/05/02 22:25

A1とA2を結合して"A"と入力しても、"A"が入力されているのはA1のみでA2は空欄のままです。

ただ、表示上結合されているだけです。

自宅PCにExcelがインストールされていないので確認してませんが

Sub test
Dim SRange As Range
Set SRange = Cells.Find(What:="a",LookAt:=xlWhole)
MsgBox SRange.Column
End Sub

で、出ませんか?
    • good
    • 0
この回答へのお礼

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

お礼日時:2013/05/02 22:25

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!