• ベストアンサー

エクセルマクロ 値の検索と削除

エクセル2010を使っています。 一人じゃとてもわからないので、教えていただけませんか? 画像の様に A1~CQ8、A9~CQ16 と言う風に A~CQ列の8行1括りの表があります。 その中で、G列に0が一つでも出現したら、その表のみを削除する方法ってありますか? 詳しい方、よろしくお願い致します。

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

  • ベストアンサー
  • qualheart
  • ベストアンサー率41% (1451/3486)
回答No.2

以下のマクロを実行すればOKだと思います。 Sub Macro1() n = 1 Do While Cells(n, 7) <> "" For i = 0 To 7 If Cells(n + i, 7) = 0 Then Range(Cells(n, 7), Cells(n + 7, 7)).EntireRow.Delete n = n - 8 Exit For End If Next n = n + 8 Loop End Sub

gekikaraou
質問者

お礼

回答ありがとうございます。 試してみました! ほとんどの場合大丈夫そうなのですが、途中から少し変なんです。 表の最下段に0がある時かな? 表がズレてしまうんです。 お心当たりは無いでしょうか?

gekikaraou
質問者

補足

訂正します。 元データを整理したら無事出来ました、ありがとうございました!

すると、全ての回答が全文表示されます。

その他の回答 (4)

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.5

No.4です。 投稿後気づいたのですが、 前回のコードでは他の列に空白セルがあった場合、必要な列のデータまで削除されてしまいます。 A~CQ列すべてのセルにデータがあれば問題ないと思います。 その点を考慮すればNo.3さんの方がふさわしいかと思います。m(_ _)m

gekikaraou
質問者

お礼

回答ありがとうございます。 他セルにも値がありますので仰る通り、No.3さんのやり方でやってみました。 いつも回答ありがとうございます!

すると、全ての回答が全文表示されます。
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.4

こんばんは! すでに回答は出ていますので、参考程度で・・・ Sub Sample1() Dim i As Long, lastRow As Long, c As Range lastRow = Cells(Rows.Count, "G").End(xlUp).Row For i = 1 To lastRow Step 8 Set c = Cells(i, "G").Resize(8).Find(what:=0, LookIn:=xlValues, lookat:=xlWhole) If Not c Is Nothing Then Range(Cells(i, "A"), Cells(i, "CQ")).Resize(8).ClearContents End If Next i Range(Cells(1, "A"), Cells(lastRow, "CQ")).SpecialCells(xlCellTypeBlanks).Delete shift:=xlUp End Sub こんな感じではどうでしょうか? >その表のみを削除する方法って・・・ とありますのでA~CQ列を削除しています。m(_ _)m

すると、全ての回答が全文表示されます。
  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.3

削除するとは,「削除」して上に詰めたいのか,単に「消去」して空白を残していいのか? sub macro1()  dim h as range  set h = range("G:G").find(what:=0, lookin:=xlvalues, lookat:=xlwhole)  do until h is nothing   cells(application.floor(h.row - 1, 8) + 1, "A").resize(8, 1).entirerow.delete shift:=xlshiftup   set h = range("G:G").findnext()  loop end sub 適切に応用して下さい。

gekikaraou
質問者

補足

回答ありがとうございます。 削除は、G列に0を見つけたら、その表全体(A~CQ列を削除し、上に詰めるという意味でした、説明不足で申し訳ありません。) 無事出来ました、いつもありがとうございます。

すると、全ての回答が全文表示されます。
  • eden3616
  • ベストアンサー率65% (267/405)
回答No.1

(1)1行目に1行挿入する (2)セルCS2に以下の数式を貼り付ける  =IF(MOD(ROW(),8)=2,COUNTIF(G2:G9,0),CS1) (3)CS2のセルを表の最後の行まで下方向にフィルハンドルでオートフィル (4)A~CS列を全選択してデータ→フィルタ (5)CS列のフィルタ[▼]で「0」のチェックを外す (6)1行目を含む、表示されている表範囲を行の全選択 (7)選択した行番号を右クリックで「行の削除」 (8)CS列を全選択して右クリックで「削除」 とか。

すると、全ての回答が全文表示されます。

関連するQ&A