今日は昨日やったことの続きをやろうと思っていたら、昨日作ったロジックがどうも思い通りに動いていない。
検索絡みだ。
Find関数を使って、セル範囲内の値検索をしたかったのだが、同値のセルを検索してくれないとキタ。
Find(…) → FindeNext() を最初のセル、または戻り値がNothingになるまで繰り返すのだが、どうもうまくいかない。
で、結合セルが含まれているせいで、検索がうまくいかないのかと、結合セルをすべて解除させたシートを一つ作って、Ctrl+Fで検索してみたのだが、やはりうまくいかなかった。
Ctrl+Fの検索ダイアログでうまくいかないものをマクロでうまくいかそうなどというのは、無駄な抵抗なので、もう行列全体を1つ1つ当たっていくことにした。
With Worksheets(xx) For c=1 to 100 Step 1 For r=1 to 100 Step 1 If Cstr(.Cells(r,c).Value) = CheckText Then ''' ここに処理 ''' End If ''' ここに下の結合セルのMax行数抽出のサンプル挿入 ''' Next r Next c End With
こんな感じに1セルずつ当たっていくわけ。なんとも、面倒な話だが、仕方がない。
しかし、対象セル範囲の中に結合セルがあるので、厄介だ。
というより、結合されている場合は、先頭のセルだけ確認すればよいわけで、検索時間を短縮できると考えた。
下の「結合セルのMax行数抽出のサンプル」は縦結合しかされていないので、横結合の場合はまた変わってくるわけだが・・・
Dim rng As Range '確認対象セルを設定すること If Not rng.MergeCells Then '結合されていない場合 min_row = rng.Row max_row = rng.Row Else '結合されている場合 min_row = rng.MergeArea.Cells(1, 1).Row max_row = SearchMergeRowMin + rng.MergeArea.Rows.Count - 1 End If
次に確認するセルは、同じ列の max_row+1 となる。