• ベストアンサー

エクセルの行削除VBA

次の条件を満たすエクセルVBAの記述を教えてください。 A列に「ページTOP」の文字がある行から文末までの行を削除 A列に「PROGRAM…」のある行と次の1行を残して「4:00~…」を含む行までを削除 (例 A10 PROGRAM… A11 AB A12 hij A13 tuy A14 4:00… ※A12~A14を削除 A1からA列に「PROGRAM…」のある行まで行削除 Excel2010/WindowsXP

質問者が選んだベストアンサー

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.1

ALT+F11を押す 現れた画面で挿入メニューから標準モジュールを挿入する 現れたシートに下記をコピー貼り付ける sub macro1() dim r as long on error resume next r = application.match("*ページTOP*", range("A:A"), 0) range(cells(r, "A"), range("A65536").end(xlup)).entirerow.delete end sub sub macro2() dim h1 as range dim h2 as range set h1 = range("A:A").find(what:="PROGRAM", lookin:=xlvalues, lookat:=xlpart) if h1 is nothing then exit sub set h2 = range("A:A").find(what:="4:00~", after:=h1.offset(2), lookin:=xlvalues, lookat:=xlpart) if h2 is nothing then exit sub range(h1.offset(2), h2).entirerow.delete end sub sub macro3() on error resume next range("A1:A" & application.match("*PROGRAM*", range("A:A"), 0)).entirerow.delete end sub ファイルメニューから終了してエクセルに戻り、適宜実行する。 #幾つかパターンを示していますので、実際にヤリタイ事に応じて、適切に自力で応用してください。

noro6857
質問者

お礼

ありがとうございました macro1,3はmatch関数で文字のある行をさがし、エクセル最下段から上へ、またはA1からそこまでをentirerow.deletで削除するものですね。 macro2が理解するのにちょっとややこしいかと思っていますがこちらはfindでPROGRAMを探し、h1に削除しない2行をsetして、h2(4:00findの行)まで削除と考えていいでしょうか。残す行が2行でない場合offset(2)を変えればいいでしょうか。 それとmacro2ではfindに部分一致のアスタリスクがないけれど、matchとの違いはなんでしょうか

関連するQ&A

専門家に質問してみよう