- ベストアンサー
エクセルVBA条件セル検索時連続時処理中止と列複数
- Excel2013のVBAで条件セル検索時に、連続している場合は処理を中止する方法について教えてください。
- また、複数の列に対してコードを適用する方法も教えてください。
- お手数をおかけしますが、ご教授よろしくお願いいたします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>実際は、複数の列を指定したいです 具体的にどこ列範囲を対象にしたいのでしょう。 AAAやBBBは右4の列に「コピー」されますから、不定の列からAAA・BBBを探して上1右4にコピーしたのを「対象から外す」必要があるハズです。その辺の、やるヤラナイ列関係の条件がありませんね。 また複数列を対象にした際、「連続する」のが縦に繋がってる限定でいいのかちょっと曖昧です。 データが実際に何行から開始されてるのかも情報がありません。 sub macro1() dim a as variant dim buf as variant dim c as range a = array("AAA", "BBB") with worksheets("Sheet1").range("D:F") ’仮にD,E,F列 for each buf in a set c = .find(what:=buf, lookin:=xlvalues, lookat:=xlwhole) do until c is nothing ’全部処理して無くなるまでループ ’一つ上と一つ下を検査 if not iserror(application.match(c.offset(-1).value, a, 0)) _ or not iserror(application.match(c.offset(1).value, a, 0)) then c.offset(-1).resize(3, 1).select msgbox "STOP" exit sub end if c.offset(-1, 4).value = c.value ’上1右4に転記 c.offset(0, -1).resize(1, 7).clearcontents ’左1から7セル消去 set c = .findnext(c) loop next end with end sub
その他の回答 (1)
- keithin
- ベストアンサー率66% (5278/7941)
ご相談にあれもこれも詰め込みしてるので、状況説明も足らず回答も薄くなります。 元々のご質問内容の「連続してたら打ち切り」が解決したのでしたら、それで一回終了して欲しいです。 ホントにF,O,X列でいいのか疑問ですが、自力で適切に応用してください。 変更前: with worksheets("Sheet1").range("D:F") ’仮にD,E,F列 変更後: with worksheets("Sheet1").range("F:F,O:O,X:X") あるいは with worksheets("Sheet1").range("対象範囲の名前定義") それからこれも、ご相談に何の説明もありませんが。 変更前: c.offset(-1, 4).value = c.value ’上1右4に転記 変更後: c.offset(-1, 4).resize(1, 2).value = c.resize(1, 2).value
お礼
お手数をおかけしてすいませんでした。 見事にできました。 どうもありがとうございました。
補足
>具体的にどこ列範囲を対象にしたいのでしょう。 F列、次にO列、X列・・・と続きます。検索は4行目からになります。列でいくとF4から始まりF23で終わり、再びF30:F49、F56:F75と続きますが列全体で指定しても問題ないです。 F列で考えると、AAA・BBBを探してF列、G列をコピーしたものは上1右4にあたるJ列、K列に貼り付けるようになります。 列、次にO列、X列・・・を対象で離れてた列なので、「連続する」のが縦に繋がってる場合限定で横に並ぶ事はありません。 今書いていて思ったのがF4にもしあった場合も、処理をストップさせる必要がありました。 言葉足らずで、いつも色々な想定をさせてしまってすいません。なかなか自分目線で想定不足です。 ご迷惑をおかけします。 すいません、以下の所の指定がわかりませんでした。F列、O列、X列を指定するにはどうすればよろしいでしょうか? with worksheets("Sheet1").range("D:F") 後は、動きは想定したもので問題なさそうでした。複数指定もまとめていただきコンパクトになりとてもありがたいです。