• ベストアンサー

Excel帳票の余剰行を削除したい

WinXp、Excel2002環境でVBAを使用して以下の事を行っています。 既作成済みのcsvファイルをExcelのワークシートへ貼り付けて帳票を作成しているのですが、貼り付けるデータの長さが不定の為、罫線を引いた帳票の余白部分を削除したいと思っています。 最終行への移動は Range("c65536").end(xlUp).Select で行えている(筈)ですが、その次の行から罫線を引いた最終行(このカラムはコンスタントで渡せます)迄の範囲指定を今一つ上手く行えず困っています。 あまり凝らずに行範囲選択と削除を行う方法をお教え下さい。

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

  • ベストアンサー
  • takibo
  • ベストアンサー率57% (116/200)
回答No.5

ANS1の者です。 必ずデータが入っている列はありますか? 質問文から引用して 最終行 = Range("C65536").End(xlUp).Row としましたが もしそういった列があればその列を指定してください。 【例】E列 → Range("E65536").~ といった具合です。 もし必ずデータが入っている列がないのであれば別の方法はありますが、少々コードが長くなります。 必要であればまた質問してください。

Adenau
質問者

お礼

対象列は決め撃ち可能ですので、先頭アルファベットをパラメータで渡す事で対応する事にしました。 お陰様で、複数帳票に対応する事が出来ます。 有難うございました。

その他の回答 (4)

  • big_fool
  • ベストアンサー率22% (43/193)
回答No.4

No3です Borderオブジェクトも確認してください

Adenau
質問者

補足

回答有難うございます。 対象の帳票に計算式を埋め込んでおり、自動印刷を行うと後続の行が印刷対象になってしまう為、行削除がベターかと考えた次第です。 Borderは考慮外でした。勉強せねば…。

  • big_fool
  • ベストアンサー率22% (43/193)
回答No.3

行を削除するよりは「罫線」を引き直したほうが早いと思います。 列が固定されているのであれば Range("A1").CurrentRegion.Rows.Count等で行数を検索し、Borders コレクションを使用して罫線を引く形ではいかがでしょう。

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.2

最終行が取得できるなら、その行の次行から65536行までを削除すれば良いのでは?

Adenau
質問者

補足

回答有難うございます。 VBA内でのカラム移動を上手く行えなかったもので…(汗)

  • takibo
  • ベストアンサー率57% (116/200)
回答No.1

Sub 不要行削除()  最終行 = Range("C65536").End(xlUp).Row  If 最終行 < 1000 Then   Rows(最終行 + 1 & ":1000").Delete  End If End Sub 罫線を引いた最終行を1000と仮定しています。 コードの意味は以下の通りです。 (1)最終行の行番号を取得 (2)最終行が1000行より少なければ、最終行のの次の行から1000行目までを削除

Adenau
質問者

補足

有難うございます。思った様な処理が出来ました。 但し、この方法だと1列目にデータが入っていないと、次行以降は削除対象行になってしまう様です。 最終行を特定する列を指定するにはどうしたら良いでしょうか。

関連するQ&A

  • 行を削除するマクロ

    以下のような、行を削除するマクロがあります。 Workbooks("123.csv").Activate Rows("5:10").Select Selection.Delete Shift:=xlUp しかし、123.csvを開いていない場合にはエラーが出てしまいます。 そこで、このようにしました。 On Error Resume Next Workbooks("123.csv").Activate Rows("5:10").Select Selection.Delete Shift:=xlUp しかし、エラーが出ない代わりに、アクティブなブックの行が削除されてしまいます。 123.csvが開かれている場合には、行を削除し、 開かれていない場合には、何もせずエラーも出さないようにするにはど のようにすればいいでしょうか。 よろしくお願いします。

  • エクセルで結合セルがあるため最終行が解りません。

    エクセルで結合セルがあるため最終行が解りません。 A列2行目と3行目が結合セル(見出し)のためA列の最終行(罫線を除きデータが入ってる行)を求めれなくて困ってます。データは4行目以降から入力していく予定ですが Range("A" & Rows.Count).End(xlUp).Row は2となるため+1で入力行を求めてると3となってしまいます。A4からAの最後の行の範囲で罫線を除く最終行を出せればよいのですが  最初は4 以下順次5 6 7 ‥ どなたかご教示頂けないでしょうか?

  • VBA 21行目~表の最終行まで行削除

    WinXPでExcel2003を使用しています。 VBAで、21行目から表の最終行までの行削除するマクロを作りたいのですが、上手くいきません。 Sub 行削除() Range("A21").CurrentRegion.Select Selection.Delete End Sub だとその上下に文字が入ったセルがあると一緒に削除されてしまうので、 どの様にすればいいのか分からないでいます。 最終行を何行目と特定せずに表の最終行を取得して、 削除範囲を設定出来るものが希望です。 どなたか教えて下さると助かります。 よろしくお願い致します。

  • 帳票作成ツール

    CSVやXMLで作成したデータを簡単に取り込んで、 帳票を作成できるツールを探しています。 プログラミングなしで、罫線や文字を簡単に埋め込めるものが希望です。 ご存知の方がいらっしゃいましたら、宜しくお願い致します。

  • 空白行の削除マクロについてご教示ください

    空白行の削除に、下記マクロを活用させていただいていますが、 見た目空白なのに削除されない行が時々残ってしまいます。 削除されなかったセルを「Deleteキー」で空白にするとマクロが 実行され、きちんと削除されます。 こういった、スペースか何かが入っていても、見た目空白なら 削除するようにはできないでしょうか。 どなたかよろしくお願いいたします。 Sub 削除() Dim c As Range Dim 開始行 As Long Dim 最終行 As Long 開始行 = 5 最終行 = Range("a5000").End(xlUp).Row For Each c In Range("a" & 開始行 & ":a" & 最終行) If c.Value = "" Then Rows(c.Row).Delete End If Next End Sub

  • オートフィルタ 最終行を指定する必要は?

    エクセルでVBAでオートフィルタをする場合、 ******************************************* Sub test1() 最終列 = Range("IV1").End(xlToLeft).Column Range(Cells(1, 1), Cells(1, 最終列)).AutoFilter End Sub Sub test2() 最終行 = Range("a65536").End(xlUp).Row 最終列 = Range("IV1").End(xlToLeft).Column Range(Cells(1, 1), Cells(最終行, 最終列)).AutoFilter End Sub ******************************************* どちらでもできるのですが、 test2のように最終行を取得・指定する必要はあるのでしょうか?

  • 行削除のマクロ

    B列~F列にデータが入っていてB列の最終行の下セルを選択しクリップボードのデータを貼り付けた後、貼り付けたデータの最初の3行を削除するマクロを作っています。 Sub Macro1() ''Worksheets("Sheet1").Activate ' addrw = Range("b65536").End(xlUp).Offset(1).Row Cells(addrw, 2).PasteSpecial end sub これでB列の最終行の下にデータを貼り付けることまで出来たのですが貼り付けた最初の3行の削除の仕方がわかりません。 いい方法があれば教えていただけないでしょうか。  例えばB列の10行目まで既に入力されていた場合、11行目からクリップボードのデータを貼り付け(ここまでは上のプログラムで出来ました。)、11行目から13行目を削除したいのですがどうしたらいいでしょうか?

  • マクロで指定したセル内の改行を削除

    エクセル2013です。 既に動いているマクロに別な処理を追加したいです。 まずその追加したい処理だけの単独のコードを 作成し、正しく動いたら 今使用しているマクロの最初に組込たいです。 内容はシート内において、指定した複数のセルの中の すべての改行を削除です。 マクロでなくてもできますが、上記理由でマクロで行いたいです。 ・質問1 Sub 実験() 最終行 = Cells(Rows.Count, 6).End(xlUp).Row 'F列の最終行を求める Range(Cells(4, 1), Cells(最終行, 6)).Value = Replace(Range(Cells(4, 1), Cells(最終行, 6)).Value, vbLf, "") End Sub これですと 「型が一致しません」でERRです。 これは何処が悪いのでしょうか? ・質問2 Sub 改行削除() Dim 対象範囲 As Range 最終行 = Cells(Rows.Count, 6).End(xlUp).Row 'F列の最終行を求める   Set 対象範囲 = Range(Cells(4, 1), Cells(最終行, 6)) 対象範囲.Replace vbLf, "", xlPart End Sub ↑これなら正しく動きました。 でこれを、今動いているマクロの先頭に入れたら 対象範囲.Replace vbLf, "", xlPart ↑ ここで「型が一致しません」でERRです。 なぜ単独では動作するのに、別のマクロの先頭に組み込むとERRに なるのかわかりません。 よろしくお願いします。

  • Stringbuilderの行削除

    お世話になります。 VB2005で測定PGを作成しています。 StringBuilderを使って測定したデータを"文字列 & vbCrLf"とデータ一つずつ改行して溜めていっています。 測定に失敗した時に最終行を削除したいのですが、行で削除する事は可能でしょうか? 調べてみたのですが、Removeの文字数指定削除しか分かりませんでした。 (文字数不定のため、使用できず) アドバイスを宜しくお願い致します。

  • エクセルマクロ行削除

    エクセル2013です。 以下の行削除マクロを作りました。 取得した 最終行が20行目として 最終列がZ列として セル Z20 の値が 1以上なら問題なく動作するのですが セル Z20 の値が 0 だとループして終了しません。 どこを修正しても、思うように動作しません。 どこを修正すれば、いいのでしょうか? よろしくお願いします。 Sub 行削除() Dim 最終行 Dim 最終列 Dim 対象行 最終列 = Cells(8, Columns.Count).End(xlToLeft).Column '8行目の最終列を取得 最終行 = Cells(Rows.Count, 1).End(xlUp).Row 'A列の最終行を取得 Application.ScreenUpdating = False '画面切替停止 For 対象行 = 10 To 最終行 If Cells(対象行, 最終列) = 0 Then Rows(対象行).Delete 最終行 = 最終行 - 1 '削除により最終行が1行減ったので最終行の値を1行減らす 対象行 = 対象行 - 1 '削除により対象行が1行繰り上がったので対象行の値を1行減らす Else End If Next 対象行 Application.ScreenUpdating = True '画面切替停止解除 End Sub

専門家に質問してみよう