• ベストアンサー

【マクロ】データが1つもない行を削除する

添付した画像のようなファイルがあります。 この表の中で、データが一つもない行は削除して、上詰めにするマクロを実行したいです。 また、このシートの表は11行で終わっていますが、 他のシートは25行目で終わっていたりとバラバラです。 すべてのシートでこの処理を行いたいと思っていますので、 他のシートで処理を行ってもエラーのでないマクロを教えていただけたら幸いです。 ちなみに、 ・各シートに表はひとつづつ。 ・各シートの表の開始セルは同じ。 ・全シートに対して一気に処理を行いたい。←指定した処理をすべてのシートで行うマクロは作成済なので大丈夫です。

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

  • ベストアンサー
回答No.3

>すると >c = Cells(l, Columns.Count).End(xlToLeft).Column >がエラーになり、実行できません。 きちんと当方で動作確認して正常に動いているモノを、訳も判らずイジクリ回すから、そうなります。 >までを貼り付けてみましたが、そうするとマクロを実行できないため、 当方が書いたルーチンは「マクロとして呼び出すモノではない」です。 「他のマクロからcall文を使って呼びなさい」と書いたのに、それに従わないなら、貴方に教えるのはもうやめます。言う事を聞かない者に教え続ける義理はありませんから。 >あと、表の1列目が空欄の場合に行を削除したいわけではなく、その行のすべての列にデータがない場合にその行を削除したいです。 これを読んで「何も理解してない」って事が、よ~~~~く判りました。申し訳ありませんが、もう見捨てます。 当方が書いたルーチンは、ちゃんと「その行のすべての列にデータがない場合に『のみ』、その行を削除する」ようになっていますが、それを疑うなら、もう知りません。当方の事を疑うような者に教える義理はありませんから。 もうこれ以上この質問には回答しませんので、自力で頑張って下さい。見捨てます。

tanpopopoketto5
質問者

お礼

私の拙い質問に対し、丁寧に教えて下さったのに、 こちらの勉強不足のため、不愉快な思いをさせてしまい、失礼いたしました。 初めてのマクロであること、仕事で頼まれた作業であるため、 焦ってしまい失礼な返事をしてしまいました。 大変申し訳ありません。

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

その他の回答 (2)

回答No.2

>回答してくださったように貼り付けてみたのですが、エラーになりました。 エクセルのブックを開いて、Alt+F11を押して(Altキーを押しながらF11キーを押して)Visual Basic Editorを開きます。 Visual Basic Editorのメニューで「挿入」→「標準モジュール」とクリックして下さい。 そしたら「Module1」と言う、VBのマクロプログラムを入力する画面が「何も入ってない状態」で開くので、そこに Public Sub DELETE_NULL_LINE(ByVal St As Integer, ByVal Ed As Integer) から End Sub までを貼り付けて下さい。 >最初にSubを入れて、あとは回答者様の作ってくださったものを貼り付けてみたのですが... 回答の中にもう既に「Subの宣言」が入っているので、余計なモノは書かずに、そのまま貼り付けて下さい。 これを呼び出す場合は Sub ボタン1_Click() Call DELETE_NULL_LINE(3, 6) End Sub のように、Call文で呼び出します(この例では「ボタン 1」をクリックした場合に呼び出します)

tanpopopoketto5
質問者

補足

何回も教えていただき、ありがとうございます。 教えていただいた通り、 Public Sub DELETE_NULL_LINE(ByVal St As Integer, ByVal Ed As Integer) から End Sub までを貼り付けてみましたが、そうするとマクロを実行できないため、 Sub 空白削除() 'lは今見ている行 Dim l As Integer 'cは表の右端の列番号 Dim c As Integer 'lを開始行にセット l = St 'lがEdになるまで繰り返す Do 'lの行の右端を取得 c = Cells(l, Columns.Count).End(xlToLeft).Column '右端がA列で、その右端のセルが空セルなら If c = 1 And IsEmpty(Cells(l, 1)) Then 'lの行を削除 Range(l & ":" & l).Delete '1行減ったのでEdを1減らす。行が下から詰まるのでlは足さない Ed = Ed - 1 Else 'lの行が空でなければ、lに1を足して、次の行を見に行く l = l + 1 End If '処理した結果、lがEdより小さいなら、まだ終わってないので繰り返す Loop While Ed > l End Sub と貼り付けました。 すると c = Cells(l, Columns.Count).End(xlToLeft).Column がエラーになり、実行できません。 あと、表の1列目が空欄の場合に行を削除したいわけではなく、その行のすべての列にデータがない場合にその行を削除したいです。 その行の1列目にデータがなくても、二列目や三列目にデータがあれば、その行は残しておきたいです。 理解能力が足りずすみませんが、お願いいたします。

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

’アクティブなシートの空行を削除する 'Stに開始行の行番号、Edに終了行の行番号を指定 Public Sub DELETE_NULL_LINE(ByVal St As Integer, ByVal Ed As Integer) 'lは今見ている行 Dim l As Integer 'cは表の右端の列番号 Dim c As Integer 'lを開始行にセット l = St 'lがEdになるまで繰り返す Do 'lの行の右端を取得 c = Cells(l, Columns.Count).End(xlToLeft).Column '右端がA列で、その右端のセルが空セルなら If c = 1 And IsEmpty(Cells(l, 1)) Then 'lの行を削除 Range(l & ":" & l).Delete '1行減ったのでEdを1減らす。行が下から詰まるのでlは足さない Ed = Ed - 1 Else 'lの行が空でなければ、lに1を足して、次の行を見に行く l = l + 1 End If '処理した結果、lがEdより小さいなら、まだ終わってないので繰り返す Loop While Ed > l End Sub

tanpopopoketto5
質問者

補足

回答してくださったように貼り付けてみたのですが、エラーになりました。 最初にSubを入れて、あとは回答者様の作ってくださったものを貼り付けてみたのですが... マクロは初心者ですので本当にわかりません。 どうしたらエラーが起きずに表内の空白の行を削除できますでしょうか? 説明も稚拙で大変恐縮ですが、よろしくお願いいたします。

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

関連するQ&A