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

このQ&Aのポイント
  • Excel VBAを使用して、特定の条件に基づいて一定数以上の空白行を削除する方法について教えてください。お手数ですが、具体的な書き方のヒントだけでも教示していただければ幸いです。
  • 見積用のVBAを作成している際に、20行以上の空白行が生成された場合、該当行を削除してシートを整える方法を知りたいです。具体的なVBAの書き方のヒントを教えてください。
  • Excel VBAを使用して、一定数以上の空白行を削除する方法について教えてください。20行以上の空白行が発生した場合、該当行を削除してシートを整える方法を知りたいです。具体的なVBAの書き方のヒントをお願いします。
回答を見る
  • ベストアンサー

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

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

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

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

>20行空白ができた場合に該当行を削除 ホントにそれでよいのなら,こんな具合でしょうか。 簡易版:「空白行」であるか否か,たとえば項目列のA列の記入の有無で判定できる sub macro1()  dim h as range  dim lastRow as long  lastrow = range("A65536").end(xlup).row  on error resume next  for each h in range("A1:A" & lastrow).specialcells(xlcelltypeblanks).areas   if h.rows.count >19 then    h.entirerow.delete shift:=xlshiftup   end if  next end sub ついでに:「空白行」であるか否か,全列をくまなく調べたい sub macro2()  dim h as range  dim i as long  for i = 1 to 8   range("A:H").autofilter field:=i, criteria1:="="  next i  on error resume next  for each h in activesheet.autofilter.range.specialcells(xlcelltypevisible).areas   if h.rows.count > 19 then    h.entirerow.delete shift:=xlshiftup   end if  next  activesheet.autofiltermode = false end sub #余談 >20行空白ができた場合に該当行を削除 1ページ20行の設定で各ページの最終行に小計欄があるのに,20行の空白になるのですか? もちろん削除の判断基準だけのお話なので,修正や応用はたやすいとは思いますが。

lightsteelblue
質問者

お礼

早速のご回答、ありがとうございます! お陰様で目的を果たすことができました。 > 1ページ20行の設定で各ページの最終行に小計欄があるのに,20行の空白になるのですか? 説明がうまくなくて申し訳ないです。 小計欄は各ページにあるのではなく、各カテゴリの最後に挿入しているので、 例えば、25個の項目があるカテゴリであれば、 最初の1ページ目は、見出しが1行、次に項目が19行、 2ページ目に項目が6行、空白行が13行、小計が1行されます。 余談ですが、作成中の見積ファイルは、ボタンクリック時に 入力シートから印刷シートに入力した見積が転記される仕組みにしています。 その際、見出しフラグを設定した行間の小計を上のイメージで挿入したり、 印刷用の書式調整等をしたりしています。 ただ、小計行を挿入する処理が不完全で、項目数によって空白行が 20行発生してしまう場合があり、最初はそこを直そうとしたのですが、 出来上がった印刷シートから空白行を20行消す方が早そうだと思い、 今回の質問に至った次第でございます。 ともあれ、これで先に進めます。 ありがとうございます!

関連するQ&A

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

    下記のようなデータがあるとき、空白行の一つしたの町名を一括で削除するには、どのようなマクロがあるでしょうか。 一定の行数なら私にもわかるのですが…、どなたか教えていただけないでしょうか。 町名   男  女  計 青山    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行あります。必ず空白行の下の行が小計になります。 空白行の一つ下の行、「青山」と「北山」の行を、マクロを使って一度に削除できるでしょうか?

  • 空白の行を削除したい

    宜しくお願い致します。 オフィスのワードで文章の途中途中に空白の行が多数ある場合ですが それらの空白の行を削除して文章を上のほうに詰めて行きたいのですが あまりに多数の空白行ですと 逐一削除するのは大変です いっきに削除するプログラム マクロなどはあるのでしょうか もちろん秀丸などのソフトで そのようなことが実行できるものがあれば コピペしてから そういう操作を出来たら助かります これをお尋ねしたのも 印刷する時 ほとんど空白行の散見されるページがある場合 これを 詰めることが出来れば 印刷ページを減らせるという動機から質問しました 宜しくお願い致します。

  • エクセルで数字が入力されている行の数を出したい

    エクセル2000を使用しています。 数百行くらいのデータがあります。 C列は数字の1、2、9、が入力、又は空白となっています。 最下行3行にそれぞれ1、2、9が入っている行の数を出したいの ですが、どのようにすれば良いのでしょうか? 1、2、9の和を求めているのでは無く、入力されている行数を 出したいのです。

  • Wordでページ番号を入れてから削除したら空白行が

    Word2007を使っています。 文書を仕上げた後で、ページ番号を入れようかと思い、下に入れてみたり上に入れてみたり、空白に入れてみたりしました。 結局入れない方が良いと思い削除したのですが、文書の一番上と一番下に空白行が入ってしまいました。その空白行を消したいと思ってその改行マークの所にカーソルを入れようとしても入りません。 どうしたら上下に入ってしまった空白をなくすことができるでしょうか。 教えてください。 宜しくお願い致します。

  • VBAで空白行を削除する。

    初めまして、VBA初心やです。なので具体的にご教授願います。環境WindoesXP SP3 EXCEL2010です。やりたい事Book1に空白行が沢山あるSheetが一枚あります。Sheetの中身は下記の通りです。 一行目に項目があります。n行目にも項目があります。nは、10個です。項目の下の行には、デターがあります。以下のようになっております。初めの位置はB2です。    B2    項目A 項目B 項目C 項目D・・・・・    項番1 データ1 データ2 データ3 データ4・・・・・・    項番2 データ1 データ2 データ3 データ4・・・・・・    項番3 データ1 空白  データ3 データ4・・・・・・    項番4 データ1 データ2  空白 データ4・・・・・・    項番5 データ1 データ2  空白 空白・・・・・・    項番6 データ1 データ2  空白 空白・・・・・・ 項番7 データ1 データ2  空白 空白・・・・・・ 項番8 空白   空白   空白 空白・・・・・・ ・    ・ ・     ・   ・     Bn    項目A 項目B 項目C 項目D・・・・・ 項番1 データ1 データ2 データ3 データ4・・・・・・ と続きます。この項番1は残して、項番8の様な空白セルが続く行だけ削除したいので、 以下のマクロを組みました。 Dim ii As Long Dim MaxRow(1 To 100) As Long Dim MaxCol As Long '============================ MaxRow(1) = Cells(Rows.Count, 2).End(xlUp).Row MaxRow(2) = Cells(Rows.Count, 21).End(xlUp).Row MaxRow(3) = Cells(Rows.Count, 22).End(xlUp).Row MaxRow(4) = Cells(Rows.Count, 23).End(xlUp).Row MaxCol = Range("IV4").End(xlToLeft).Column Application.ScreenUpdating = False '============================ For i = MaxRow(1) To 3 Step -1 '配列にした。 '============================ For j = 1 To MaxCol Step 1 '============================ If Cells(4, j).Value = "" Then GoTo Label22 'Else GoTo Label11 Label22: Range(4 & ":" & MaxCol).Delete Label11: Next j 'End If Next i Application.ScreenUpdating = True MsgBox "マクロが終了しました" End Sub しかし、ソートしてMaxRowの配列のいくつになるかを計算する処が判りません。 なので、空白行を削除できません。 ようするに、各項目(行)の空白セルがまちまちで(凹凸があり)、全ての項目が空白である処を探す事が出来ません。 何卒宜しくご教授願います。

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

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

  • VBAの行削除について

    VBAで行を削除したいです。 データが何百行かあって、その下から空白行が最終行までできています。 その空白行部分を削除したいのですが。 どのようにコーディングすればいいのですか?

  • excel2013 余白にある空白の行を消す

    excel2013で単語帳を作りました。もっとも多いのがSで2000行くらいです。しかし、その 下の行が延々と続いていて、右側にあるスクロールバーをスライドすると3000行を超えるほど 空白の行が続きます。右側のスライドバーが2000行くらいにある最後の行で止まるようにする には、どうしたら良いのでしょうか? 空白の行を選択して右クリックで削除→行全体、をしましたが空白行全体は消えません。

  • エクセル2013 空白行の不思議

    お助け下さい エクセルで家計支出を記録しています、 何時の時点からか分かりませんが、最近気づいたら 先頭行(1行目は項目を表示し行固定しています) 2行目から→679行までが空白行となり、680行以降に入力データが表示されており、 内容は正しいと思います、 今日 2~679行までを選択して削除してみたところ、単に行項目の数値が 下へ変更になっただけ(行数値が増加)実際の空白行数は変化なしのように見えます。 (焦っているため、厳密はよく分かりません) バックアップの目的で異なるドライブに保存してあるものも、 同様な挙動を示します(同じものを保存してあるので当たり前と言えば当たり前?) このような体験は初めてで、設定をどうしたこうしたの記憶も無く、 なぜ? の一語につき困っています。 原因もしくは体験談等でお心当たりのある方に助言を頂きたく、質問させて頂きました。 よろしくお願いします

  • 削除して空白になった行を下から詰めたい

    A行には項目の名前があり、A列には番号が上から1,2,3・・と振られています。 そして、B2からR999までにはそれぞれデータが入っています。 このとき、任意のR列のセルを選択したまま、マクロを実行すれば、 任意の行のB列からR行が削除されて、下から上に詰めるように(空白にならないように) するマクロを作りたいです。(A行に割り振っている番号を消してしまうと 連番が崩れるので、B列からR列までを詰めていくような感じです) 例: 今、R11のセルを選択しています。希望のマクロを実行すると、C11~R11が削除されて    C12以降のデータが丁度上に移行するような感じです。 どのようなコードを作れば良いのか、お力をかしていただければ幸いです(/_;)

専門家に質問してみよう