- ベストアンサー
エクセルマクロでFINDを使用して特定セルを探し出す方法
- エクセルマクロを使用して特定のセルを探し出し、それを起点にコピーする領域を設定する方法について質問します。
- 質問者はFINDの部分でエラーが発生しているため、何が問題なのかわからず困っています。
- エラー名は「実行時エラー13:型が一致しません」と表示されています。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
sub macro1r1() dim c as range dim c0 as string with worksheets("書面").columns("B:D") set c = .find(what:="作業状態", lookin:=xlvalues, lookat:=xlwhole) if c is nothing then exit sub c0 = c.address do application.intersect(c.mergearea.entirerow, range("B:BQ")).select msgbox "OK" set c = .findnext(c) loop until c.address = c0 end with end sub ホントに列範囲を限定する必要があるのか疑問ですが。
その他の回答 (3)
- keithin
- ベストアンサー率66% (5278/7941)
FindおよびFindNextのヘルプの使用例に、ほとんどそのまま利用できるサンプルがあります。が、そういやヘルプをパソコンで見られないんでしたっけ。 sub macro1() dim c as range dim c0 as string with worksheets("書面").columns("B:D") set c = .find(what:="作業状態", lookin:=xlvalues, lookat:=xlwhole) if c is nothing then exit sub c0 = c.address do c.mergearea.entirerow.select msgbox "OK" set c = .findnext(c) loop until c.address = c0 end with end sub
お礼
回答して頂き、ありがとうございました。 今回は家からなんで、HELPは見れましたが(実際見たのはエクセル大辞典)さっぱり分からなくて。色々書き直しましたが??でした。 今回の回答内容を見てみると、列の指定が間違っていた事が分かりました。(B列しか指定していなかった。)試しに、自分の記述Set b1 = .Columns("B")の部分のBをB:Dに変更したらうまくいきました。 あと、次の部分まで考えて下さりありがとうございました。かなり短い記述でほぼ自分が考えていた通りの動作が出来ていてびっくりしました。 で、質問ですが、c.mergearea.entirerow.selectの部分ですが列を指定する方法はないのでしょうか?(例:一つ目の選択エリアはB14:BQ23です。)
- KURUMITO
- ベストアンサー率42% (1835/4283)
例えば次のようなコードにします。 Sub 作業状態の部分を作業名別に各シートに貼り付ける() Dim b1 As Variant Dim i As Integer With Worksheets("Sheet3").Range("A1:A1000") Set b1 = .Find("作業状態", LookIn:=xlValues, SearchDirection:=xlByRows) If b1 Is Nothing Then End i = b1.Row Do i = i + 1 Loop Until Range("A" & i) <> "" Range(Cells(b1.Row, 1), Cells(i - 1, "X")).Select End With End Sub
お礼
返事が遅れてしまい申し訳ありませんでした。 貼り付けて確認してみました。 作業状態の下に文字が入力されている場合は正確に選択されますが、作業状態の下に文字が入力されていない場合は、永久ループに入るようです。解決方法が分からなかったので、回答No.3を参考にさせてもらう事にしました。 貴重な時間をこの質問に費やして頂き、ありがとうございました。
- mu2011
- ベストアンサー率38% (1910/4994)
引数名省略の場合、カンマは省略できません。 又、見つからない場合は終了としましましょう。 Set b1 = .Columns("B").Find("作業状態", , xlValues, xlWhole, xlByColumns, xlNext) If b1 Is Nothing Then End 因みに、Set b1 = .Columns("B").Find(What:="作業状態", Lookin:=xlValues, Lookat:=xlWhole)でも可。
お礼
回答ありがとうございました。 質問していた問題ですが、回答No.3の記述事例を確認して、列の指定が間違っていた事が分かりました。(B列しか指定していなかった。)試しに、自分の記述Set b1 = .Columns("B")の部分のBをB:Dに変更したらうまくいきました。 貴重な時間を私の質問に費やして頂き、ありがとうございました。
お礼
返事が遅くなって申し訳ありませんでした。 列を指定したのは、添付図と同じのが2つ並んでいるからで、列の始まりと終わりを指定してあげないと、不要な隣の情報まで選択されてしまうと思ったからです。 貼り付けて確認し、思っていた通りに選択されました。ありがとうございました。