![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
No.2ベストアンサー
- 回答日時:
こんにちは。
KenKen_SP です。Set Rng = WS.Columns(ColNo).Find(what:=Data, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext)
このコードと補足いただいた状況を試しましたが、Excel2002でも Nothing に
なりますね。
どうもA列とB列の結合セルが ColNo 1 にあるのか 2 なのかうまく VBA が判断
できてないみたいです。これが規定の動作かもしれません。
回避策としては、Find での検索範囲を Cells に広げて、見つかった rng を
Intersect(rng, Columns(ColNo)) で Nothing とならなければ良し、とする方法
を考えてみました。
サンプルをアップしますが、動作するコードということで余計な部分を付け足し
てありますが、ご参考下さい。
それから蛇足ですが、Find メソッドは LookIn も明示的に指定した方が良いで
しょう。詳しくはヘルプをみて下さい。
Sub Sample()
Dim rng As Range
Dim WS As Worksheet
Dim ColNo As Long
Dim DATA As String
Dim strFIRST As String
Dim flag As Boolean
Set WS = Sheet1
ColNo = 1
DATA = "検索文字列"
'ここから---------------------------------
'一度セル全体で検索する
Set rng = WS.Cells.Find( _
What:=DATA, _
LookIn:=xlValues, _
LookAt:=xlPart, _
SearchOrder:=xlByRows, _
SearchDirection:=xlNext)
'見つかったらそれが Intersect で ColNo の列と交差するか調べ
'交差するばOK、、しなければ見つからなくなるまで再検索
If Not rng Is Nothing Then
strFIRST = rng.Address
Do
If Not Intersect(rng, Columns(ColNo)) Is Nothing Then
flag = True
Exit Do
Else
Set rng = WS.Cells.FindNext(rng)
End If
Loop While Not rng Is Nothing And rng.Address <> strFIRST
If flag Then
MsgBox "Found Row Number:=" & rng.Row
End If
End If
End Sub
こんばんは、blue_001です
ご教授いただいた方法で無事行番号を取得することができました
LookInも前回の設定をそのまま引き継ぐとは知らず省略していましたが、指定しておいたほうがよさそうですね
本当に助かりました
ありがとうございました
No.3
- 回答日時:
こんにちは。
Wendy02です。昨日から、様子を見ていました。
Set Rng = WS.Columns(ColNo).Find(what:=Data, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext)
基本的な疑問なのですが、結合セルを探すのに、なぜ、ColNo を1つの列にしなければならないのでしょうか?二列にすれば、ヒットしますね。
それと、それ以前の問題ですが、結合セルとそうでないセルの混在のデータ領域を検索すること自体に、設計的な問題があるような気がします。ここの板では、あまり指摘しないようですが、一般的には、VBAでは、結合セルを含んだ処理は専用のオプションコードが必要とされるので、避けられますね。
一応、1列だけの検索でしたら、こういうものでもよいかと思うのですが。
On Error Resume Next
RowNo = 0
RowNo = WorksheetFunction.Match(Data & "*", Columns(ColNo), 0)
'LookAt:=xlPartの代わりにワイルドカードを使いました。
On Error GoTo 0
If RowNo > 0 Then
Set rng = Cells(RowNo, ColNo)
End If
この回答への補足
こんばんは、blue_001です
先日はお世話になりました
前まで使っていたシートを変更することができないので(見た目の変更が絶対禁止なんです…)、結合セルとそうでないセルが混在している領域を検索する必要があるんです
検索のコードも記述していただき、前回同様色々と勉強になります
本当にありがとうございます
No.1
- 回答日時:
こんにちは、KenKen_SP です。
VBAマイグレーション について記された PDF の技術資料をみてみましたが、
確かに SearchOrder について、
> SearchOrder に 列方向を表す xlByColumns を指定した場合、対象の文字列
> が結合セルにあると、Excel 2003 では無視されます。
> この現象を回避するには、SearchOrder に 行方向を表す xlByRows を指定し、
> 次のように記述します。
とありますね、、でも逆に言えば、これさえ設定すればちゃんと動作するはず
なのでは?
原因はどこか他にある気がします。コードの主要部分を前後を含めて提示し、
どのような状況、例えば、どのセルを選択した状態でコードを実行しているの
かを補足してみてはどうですか?
この回答への補足
KenKen_SPさん、回答ありがとうございます
質問した後にコード記述忘れに気づいたんですが、補足だけの投稿ができず、ありゃ~と思っておりました…
言われたとおり、コードだけでなく状況も説明させていただいたほうがよさそうなので、以下に記述させていただきます
例えば、ワークシート名がシート1で、A・B列を結合したセルの中身に"検索文字列"を含んだものがあり、それを検索し、行番号を返そうと思っています
下にコードを記述させていただきます
Set Rng = WS.Columns(ColNo).Find(what:=Data, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext)
WSがワークシート名(例でいうとシート1)、ColNoが列番号(例でいうと1(A列))、Dataが検索文字列(例でいうと"検索文字列")となっております
以上、宜しくお願いいたします
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 【Excel】指定のセル内容を基に別シートのセルを検索して選択する【VBA】 1 2022/06/16 16:16
- Excel(エクセル) 日付で矢印マクロ 4 2023/07/25 16:47
- Visual Basic(VBA) VBA 検索と入力 Excel ブック ぶぶぶ シート ししし 列V 検索対象の列です 最終行は、お 6 2023/05/17 01:40
- Visual Basic(VBA) ExcelVBAのマクロについて。 9 2022/05/04 14:50
- Visual Basic(VBA) WordのVBAについて 5 2023/01/11 14:38
- その他(Microsoft Office) EXCEL VLOOKUPに関する質問 5 2023/02/08 11:38
- Excel(エクセル) セルの値をグーグルで検索するエクセルVBAについて! 2 2022/08/01 21:41
- Excel(エクセル) エクセル 条件に合う日付に入力された時間数の合計したい 4 2022/06/17 22:18
- Excel(エクセル) 指定値をマクロで検索&シート移動 2 2022/04/27 23:29
- Excel(エクセル) Excelでの検索結果を含む行だけを表示させたい 5 2023/03/10 17:08
このQ&Aを見た人はこんなQ&Aも見ています
-
「環境が人を育てる」って本当?環境によって人格や生き方は本当に変わるのか
環境が人生に与える影響は実際どれほどのものなのか、専門家の田宮由美さんに伺った。
-
VBAのFind関数で結合セルを検索するとヒットしない
Visual Basic(VBA)
-
結合させた状態で、vbaで列番号を取得する方法
Excel(エクセル)
-
EXCEL VBAで全選択範囲の解除
Excel(エクセル)
-
-
4
エクセルVBAのIf,Then 構文でOr条件とAnd条件の結合方法?
Excel(エクセル)
-
5
エクセルVBA テキストボックスに3桁ごとにコンマ
Visual Basic(VBA)
-
6
マクロで空白セルを詰めて別シートに転記
Visual Basic(VBA)
-
7
Rangeメソッドは失敗しました。globalオブジェクトについて
Excel(エクセル)
-
8
【Excel VBA】書き込み先ブックが既に開かれてた場合の処理
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセル: セルの枠を超えて表示
-
セル内の一部の文字だけをハイ...
-
Excel countif関数で取り消し線...
-
エクセルで1つのセルにスクロ...
-
Excelでcsvやtxtで保存する時に...
-
エクセルで画像を透過させて画...
-
セルは大きくさせず、中の文字...
-
エクセルの入力規則プルダウン...
-
エクセルファイルに _x000D_ と...
-
マウスポインターが白十字のまま
-
セルを結合しても、文字をセル...
-
エクセル2013で英単語を折り返...
-
全セルの末尾に改行(Alt+Enter...
-
エクセルの白黒の反転で困って...
-
エクセルで右隣のセルより優先...
-
Excel入力で勝手にエンター押さ...
-
VBA:結合されたセルに対する「...
-
エクセル 折り返して全体を表...
-
エクセルの行の下げ方
-
マクロでセルの右から2番目の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセル: セルの枠を超えて表示
-
Excel countif関数で取り消し線...
-
セル内の一部の文字だけをハイ...
-
Excelでcsvやtxtで保存する時に...
-
セルは大きくさせず、中の文字...
-
エクセルファイルに _x000D_ と...
-
マウスポインターが白十字のまま
-
エクセルで画像を透過させて画...
-
エクセルで1つのセルにスクロ...
-
エクセルの白黒の反転で困って...
-
Excel入力で勝手にエンター押さ...
-
セルを結合しても、文字をセル...
-
エクセルで右隣のセルより優先...
-
エクセルでセルを上下に結合し...
-
エクセルの入力規則プルダウン...
-
エクセル2013で英単語を折り返...
-
エクセルの2つのセルを内容も消...
-
エクセルで文字を打つと下に、...
-
VBA:結合されたセルに対する「...
-
エクセルのセル外改行は可能で...
おすすめ情報