エクセルマクロで空白行の一つ下の行を削除する方法

このQ&Aのポイント
  • エクセルマクロを使用して、空白行の一つ下の行を一括で削除する方法について教えてください。
  • 8000行のテーブルデータがあり、空白行の下には小計があります。マクロを使用して、「青山」と「北山」の行を一度に削除することは可能でしょうか?
  • 質問者は一定の行数なら方法を知っていますが、8000行もあるため、効率的な方法を知りたいと考えています。マクロを使用して一括削除する方法を教えてください。
回答を見る
  • ベストアンサー

エクセルマクロで、空白行の一つ下の行を削除したい

下記のようなデータがあるとき、空白行の一つしたの町名を一括で削除するには、どのようなマクロがあるでしょうか。 一定の行数なら私にもわかるのですが…、どなたか教えていただけないでしょうか。 町名   男  女  計 青山    86  183  269 →これが下の四つの町の小計になります。 ○○町  25  43  68 ××町  11  45  56 ▽▽▽  30  55  85 ◆◆◆  20  40  60                  →空白行 北山町   41  100 90 →これが下の二つの町の小計になります。 △△町  11  45  56 ■■■  30  55  85 このような表が、8000行あります。必ず空白行の下の行が小計になります。 空白行の一つ下の行、「青山」と「北山」の行を、マクロを使って一度に削除できるでしょうか?

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.5

ロジックを、行削除はせずに、別シートにほしいものだけ結果を出すほうが良い(ロジックが考えやすく安全)と思う。 ただ下記では、空白行を見つけるのに、Findメソッドを使っているので難しくなっているかも。 まねするなら十分テストして使ってください。 例データ Sheet1 町名 男 女 計 青山 86 183 269 ○○町 25 43 68 ××町 11 45 56 ▽▽▽ 30 55 85 ◆◆◆ 20 40 60 北山町 41 100 90 △△町 11 45 56 ■■■ 30 55 85 本町 41 100 90 AA 11 45 56 ーー コード Sub test01() Dim sh1, sh2 Set sh1 = Worksheets("Sheet1") Set sh2 = Worksheets("Sheet2") '-- k = 2 d = sh1.Range("A65536").End(xlUp).Row sh1.Select sh1.Range("A2").Select sh1.Range("A1:A" & d).Select Selection.Find(What:="", After:=ActiveCell, LookIn:=xlFormulas, LookAt _ :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _ False, MatchByte:=False, SearchFormat:=False).Activate r1 = ActiveCell.Row r0 = r1 Do Selection.FindNext(After:=ActiveCell).Activate r2 = ActiveCell.Row MsgBox r2 If r2 = r0 Then GoTo p1 '先頭の空白行に帰ったら sh1.Range(sh1.Cells(r1 + 2, "A"), sh1.Cells(r2, "D")).Copy sh2.Cells(k, "A") k = k + r2 - r1 - 2 'Sheet2で次の貼り付け行 r1 = r2 Loop p1: r2 = d + 1 sh1.Range(sh1.Cells(r1 + 2, "A"), sh1.Cells(r2, "D")).Copy sh2.Cells(k, "A") End Sub ーー 結果 Sheet2 ○○町 25 43 68 ××町 11 45 56 ▽▽▽ 30 55 85 ◆◆◆ 20 40 60 △△町 11 45 56 ■■■ 30 55 85 AA 11 45 56 CCC 30 55 85

kuskus_2
質問者

お礼

素晴らしいです。 元のデータはそのままで、取りたいところだけシート2に転記されました。 私には高度すぎて、まだ理解はできないですが解読してマネしたいと思います。 本当にありがとうございました。

その他の回答 (4)

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.4

一案です。 マクロを使用しない方法ですが如何でしょうか。 対象の表範囲を選択→オートフィルタ→任意列のダウンリストボタンで空白セルを選択→抽出した行番号を選択して削除→オートフィルタフィルタ解除 因みにマクロが必要なら前操作をマクロ記録後、alt+F11押下して標準モジュールのmodule1をクリックしてみて下さい。

kuskus_2
質問者

お礼

回答ありがとうございます。 私も空白行の削除の際、オートフィルターにはいつもお世話になっています。 また、編集→ジャンプから空白セルを選んで削除したりもします。 マクロ記録後、alt+F11押下して標準モジュールが出てくるのは知りませんでした。 参考になりました。ありがとうございました。

  • jcctaira
  • ベストアンサー率58% (119/204)
回答No.3

kuskus_2さん こんにちは A列が完全に空白なら削除するようにしています。 ご確認ください。    Sub 空白削除()   Range("A:A").SpecialCells(xlCellTypeBlanks).EntireRow.Delete End Sub

kuskus_2
質問者

お礼

すごいですね。 空白が一度でなくなりました。 いつもオートフィルターを使っていましたが、マクロでできるんですね。 ぜひぜひ、使わせていただきます。 ありがとうございました。

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

>空白行の一つしたの町名を一括で削除するには 空白行(空白のセル)を調査して,その下の1行を削除します。 sub macro1()  dim h as range  on error resume next  for each h in range("A1:A" & range("A65536").end(xlup).row).specialcells(xlcelltypeblanks)   h.offset(1, 0).entirerow.delete  next end sub といった具合に。 #「空白行」はホントに空っぽ行の事で,たとえば数式で""が計算されている等の意味であってはいけません。

kuskus_2
質問者

お礼

綺麗に、各ブロックの空白行の一つ下の行がなくなりました。 私のイメージどおりです。 ただ、気をつけなくちゃいけないのはホントに空っぽの行でなくては駄目なのですね。 でも、空白行を調査してから削除するので、間違えて消しちゃったということはないようなので安心しました。 本当にありがとうございました。

  • xls88
  • ベストアンサー率56% (669/1189)
回答No.1

必ず空白行があるということで データ行の一番上の行にしてみました。 Dim rng As Range Dim i As Long Application.ScreenUpdating = False Set rng = Range("A2", Range("D" & Rows.Count).End(xlUp)) Set rng = rng.SpecialCells(xlCellTypeConstants) With rng For i = .Areas.Count To 1 Step -1 .Areas(i).Rows(1).Delete Next End With Application.ScreenUpdating = True

kuskus_2
質問者

お礼

早々にありがとうございました。 なるほど、確かに空白行の一つ下の行は綺麗に削除されました。 ただ、連続していかないので繰り返しできるように考えたいと思います。 頑張ってみます。

関連するQ&A

  • エクセルで下の空白行を削除したい

    エクセルで100行までの表を作成しました。何度か行削除や行挿入をしているうちに、その下に300行ほどの空白行ができてしまったようで、右にあるスライド(何というのか知りません)を下までもっていくと400行のところまで飛んでしまいます。100行のところはスライドのちょうど1/4位のところです。 本当はスライドを下まで持っていくと100行でストップしてくれれば作業をしやすいのですが、直す方法はあるのでしょうか。 300行分削除しても直りません。

  • Excelで空白行を削除するマクロは?

    マウスやキーボードを使った記録式でマクロを作っています。 その中でシート上に散らばっている数十行の空白行を削除する行程が必要です。 しかし、マウスやキーに依るメニューでは「空白行の削除」と言うのが有りません。 VBEに直接打ち込まないといけない様です。 ステートメントが分かる方が要らしたら教えてください。

  • アクティブになっている行をマクロで削除したい

    特定の文字の入っている行とそれ以下の行全部を削除したいのですが どうしたらよいでしょうか 例えば"小計"の入っている行から下の行を削除したいのですが 行の位置はいつも違っています セルの位置は検索で分かりますし行の削除はShift+スペースで消し それより下はShift+ctrl+方向キー+delで出来るのですが それだとマクロで実行するときいつも同じ行を消してしまいます どの位置にも関係なくアクティブセルの含まれている行とそれ以下の行を マクロで削除するにはどのように記述すればいいですか

  • エクセル マクロ 連続する空白行の削除

    エクセルのマクロ処理で、連続する空白行を削除するにはどうしたらいいでしょうか。 行いたい処理は、データ間に存在する一行のみの空白行は残し、二行以上連続する空白行を一行の空白行に縮めるといったことです。

  • excel マクロ ○○集計 の下に空白行を2行入れる

    Win XP Office2000 マクロ初心者です。 エクセル集計機能を使って作った表の太字で表示される○○集計の 行の下に空白行を2行挿入したいのです。 普通に行の挿入をすると○○集計の上に入ってしまいます。 Sub 行の挿入() Selection.SpecialCells(xlCellTypeFormulas,).Select Selection.EntireRow.Insert End Sub このマクロに何かを加えるとできると思うのですが、よろしくお願いします

  • Excelで空白行を削除したい

    他の書類からExcelにコピペしたんですが、もとの書類の書式のせいか偶数行が全て空白行になっています。 実際に必要なデータは奇数行の各列に並んでいます。 見づらいので空白行(または偶数行でも同じ)を削除したいんです。 行数が500を超えるので、一行づつ行の削除をやっていると大変な手間です。 一発でやる方法はないでしょうか?

  • Excelの行削除について

    A1のセルに「小計」という文字が入力してあり、A5にも「小計」という文字が入力してあるとします。 マクロを使いA2~A4を削除したときに「小計」が並びます 。   A       A 1 小計    1 小計 2       2 小計 3     → 3 4       4 5 小計    5 このときに下の行にある小計を自動で削除する方法があれば教えてください。   A       A 1 小計    1 小計 2 小計    2   3     → 3 4       4 5       5 よろしくお願いします

  • 【Excel VBA】一定数以上の空白行を削除する

    お世話になります。 現在、見積用のVBAを作成していますが、行き詰った為、質問いたします。 <前提> ・作成する見積明細は横8列で、行数は入力する項目数により可変です。 ・印刷して提出する為に、カテゴリごとに小計をページ最下行に挿入します。 (1ページあたりの行数は見出しを含めず20行です。) ・各カテゴリ内の項目数により、項目の最下行と小計行の間に相応の空白行ができます。 (例1) 項目が5個の場合は14行の空白行、その下に小計が表示される(ページ数は1ページ) (例2) 項目が25個の場合は14行の空白行、その下に小計が表示される(ページ数は2ページ) <問題> ・19行以下の空白行はそのままにし、20行空白ができた場合に該当行を削除して、シートを整えることが目的です。(21行以上空白ができることはありません) ・20行の空白はランダムに発生し、数も不定です。 下から最下行を探して、その一つ上の行から更にその上を探して、 差分が20の場合に該当行を削除する・・・ を繰り返して、上に上がっていく処理をイメージしますが、力不足でまとめられません。 書き方のヒントだけでもご教示ください。 何卒、宜しくお願いします。

  • 空白行を削除するマクロ

    空白行を削除するマクロについて質問です。 「Aが空白の場合」ではなく「A~Lセルすべてが空白の場合」に行を削除したいです。 下記のマクロでは、Aが空白の場合に行がすべて削除されてしまいます。 Aが空白でも、BやLに数字や文字があれば、その行は残るようにしたいです。 このマクロをどう変化させれば、うまく作業が実行されますか? マクロは初心者です。よろしくお願いいたします。 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・ sub macro1()  dim s as long  dim e as long  dim r as long  s = 5  e = range("A65536").end(xlup).row  for r = e to s step -1   if application.trim(cells(r, "A")) = "" then    cells(r, "A").entirerow.delete shift:=xlshiftup   end if  next r end sub

  • EXCELマクロを使い、空白行ではさまれた範囲の数字を合計

    下記のようなデータがあります。 条件 並び方:コード順 行数:変動する 見出し行の下とコードが変わる毎に空白行が1行あります。 マクロで空白行にコード毎の計と最後に合計を入れる方法を教えてください。 元データ コード 金額 1 10 1 20 1 50 2 40 2 20 2 30 3 50 3 10 マクロ実行結果 コード 金額 1 10 1 20 1 50 計 80 2 40 2 20 2 30 計 90 3 50 3 10 計 60 合計 230

専門家に質問してみよう