マクロを使用して行を削除する方法

このQ&Aのポイント
  • Windows NTでExcel 2000を使っている場合、マクロを使用して行を削除する方法について教えてください。
  • 特定の条件で空白の行を挿入し、2行目にデータの合計を出した表に対して行った作業を元に戻したい場合、どのようにすればいいですか?
  • マクロで範囲指定し、空白の行を削除する方法を教えてください。
回答を見る
  • ベストアンサー

マクロで行を削除するには?

Windows NTでExcel 2000を使っています。 あるデータベースがあって、ある条件で空白の行を3行挿入して区切りを入れ、 その2行目にデータの合計を出した表に対して行う作業なのですが この挿入した行を全て消して元の表に戻したいという場合には どうしたらよいのでしょうか。 私の思いつきですが、範囲指定した後に 「もしA1が空白の時にはその行全体を削除する。もしA2が…(以下同文)」 というマクロが書ければ可能なことだと思います。 ちなみに「データベースのコピーで合計作業をすれば」というのは こちらの都合上、無理と判断しているので これ以外でよい方法があれば教えてください。 よろしくお願いします。

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

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

再度訂正を入れます。2行空白が続くと1行削除しないロジックになっていて、誤りがあります。下記に訂正してください。済みません。 Sub test01() p = 1 For i = 1 To 15 If Cells(p, 1) = "" Then Cells(p, 1).EntireRow.Delete Else p = p + 1 End If Next i End Sub 空白が続いた部分は同じ行で、行Deleteを繰り返さないと ダメなわけです。 [行の一部(A以外)に数式が入っている行は消えませんでした」は関係ないことが判りました。

その他の回答 (3)

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

#2で回答を入れたものです。よく考えると処理すべき最下行は、行削除と共にせりあがって来ることを思い出しました。最下行より下に別表があると消してしまうので修正します。最下行より下に別表がなければ実害はないが考慮不足ですので、お詫びして訂正させてください。 Sub test01() d = 15 For i = 1 To d If Cells(i, 1) = "" Then Cells(i, 1).EntireRow.Delete d = d - 1 End If Next i End Sub なおDELETEキーでセル内容を空白にしたセルも「=""」 で判別できることがわかりました。

Sheep17
質問者

補足

ありがとうございました。 早速マクロを組み込んで感激したところです。 改めてマクロってすごいと思いました。 ところで1つ問題が…。 行全体が空白の場合は問題なかったのですが 行の一部(A以外)に数式が入っている行は消えませんでした。 もう一度マクロにかけたら消えてくれるんですけどね。 2度やればいいことなのですが、できれば一度で処理できればと思います。

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

1.セルA3の行を削除するのはRange("A3").EntireRow.Deleteです。 消す行が変化しますのでCells(i,1).EntireRow.Deleteを使います。 これは第 i 行を抹消します。 2.あとは i 行が空白行かを判別すれば良いだけです。 3.第 i 行ですが、第1行i=1 から 最下行(仮に15行として) i=15 まで変化させて空白かどうかを聞き(判別)します。 4.セルA1からA15までにデータの入ったセルといれてないセルを 作って Sub test01() For i = 1 To 15 If Cells(i, 1) = "" Then Cells(i, 1).EntireRow.Delete End If Next i End Sub を実行すれば空白行がなくなりデータ行だけに詰まります。 実験してください。 5.あとはどの列で空白を判別するか、空白と見えるセル(行)は 本当に””か、違う場合もあり得ます。ただし新規シートの加工していない行の空白はIf Cells(i, 1) = "" Thenで聞けます。 6.あとプログラムの作成実行に関する経験の有無が判りません。 それで、マクロの記録を使って何でも良いから「Macro1」など作ってください。(1の部分は、過去のマクロ作成状況で大きな数になりますよね。) そしてSub Macro1()とEnd Subを除いて消してください。 その後上記のプログラムのSub test01()とEnd Sub以外の中間部分をコピーして、Sub Macro1()とEnd Subの間に貼りつけてください。 そしてMacroの実行の要領はご存知でしょう。

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

3行削除するには以下のコードでOKかと。 Rows("1:3").Select Selection.Delete Shift:=xlUp ただし、削除する前に削除してよいかどうかの判断に注意してください。 もともと挿入を行なうマクロでセルに対して式設定しているでしょうから その式設定と同一である場合に削除を実行する、など。

関連するQ&A

  • 「新しいマクロの記録」機能を使っての行挿入

    「新しいマクロの記録」機能を使って1行と2行の間に10行の空白行を挿入後、A13のセルを選択というマクロを作りました(マクロ1とします)。このマクロを実行すると1行と2行の間に10行の空白行が挿入された後、A13が選択されます。ここでもう一度、マクロ1を実行すると1行と12行の間にさらに空白行が10行挿入されA13が選択されます。このようになるのは当たり前と言えば当たり前なのですが、2回目にマクロを実行したときに12行と13行の間に10行の空白行が挿入された後、A24が選択されるようにするには、どのようにマクロを記録すればよいのでしょうか?  ようは、10行の空白行を挿入した後、セルを11行下に移動させるというマクロを作りたいのです。VBAの記述方法はほとんど分からないので「新しいマクロの記録」機能を使うことを前提にご教授ください。

  • excelのマクロで条件による行の挿入

    列AとBがあり列Aに学校のクラス名A組、B組、C組・・・(20クラスほど)と氏名が 入るエクセルシートがあるのですが 先頭行はA組から始まり5行区切りで数え、(A組も5行のうちに入る) その5行内に次のB組が入らないように空白行を挿入したいです もし、5行以内にB組がない場合、次の5行でまたB組があるか判定しなければ氏名5つ あれば空白をいれてというのを20クラスぶん作るマクロは可能でしょうか? VBAの知識がさっぱりないので途方にくれています。 元のデータの例   マクロ実行後 列A   列B      列A   列B A組           A組   氏名1 111      氏名1 111  氏名2 222      氏名2 222 B組           空白行挿入 氏名3 333      空白行挿入 氏名4 444      B組 氏名5 555      氏名3 333 氏名6 666      氏名4 444 氏名7 777      氏名5 555 C組 氏名6 666              氏名7 777              空白行挿入              空白行挿入              空白行挿入              空白行挿入              C組  

  • マクロで、0のデーターの行を削除

    下記のような表があるのです(毎月のため苦労して消してます)が、データーの合計欄(セル)が0の行を削除するマクロはどうしたらよいのですか?   A   B    C  コード  合計  内容 1 001   0    0     この行を削除 2 003   5    2・・・  この行は残す 3 004   9    4・・・  この業は残す 4 010   0    0     この行は削除

  • 行挿入マクロをご教示ください

    A列の5行目から1000行ほどK列までデータが入っています。 A列からK列をB列優先でソートを行うと、B列にところどころ同じ番号が2行あったり、3行あったり、また4行とバラバラで、出てきます。 この場合、同じ番号が2行以上あるセルの上に空白の行1行を挿入し、同じ番号行分を合計して整理したいと考えています。 2行以上ある行の上に空白行を1行挿入するようなマクロをご教示ください。 どなたか、よろしくお願いします。

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

    空白行を削除するマクロについて質問です。 「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

  • 行挿入+貼付けと空白行削除を同時に行うには?

    行挿入+貼付けと空白行削除を同時に行うには? VBA初心者です。 仕事でエクセルを使っていますが、 no  工程1 工程2 工程3 1   A   B   C 2   B   _   A 3   C   A   _ 4   _   C   A という表を no  工程 1   A     B     C 2   B     A 3   C     A 4   C というように並び替えたいのですが、 現在は各番号ごとに3行挿入して工程をコピー、行と列を入れ替えて貼付けをしています。 これだと no  工程 1   A     B     C 2   B      A 3   C     A 4     C     A のように空白行ができてしまいます。これをもう一度、マクロで消しているのですが、 データ量が多いため、行挿入と空白行を消す作業を同時に行わないとシート最大行数である 65536行を超えてしまう可能性があります。 同時にやるにはどのようにすればよいのでしょうか? よろしくおねがいします。

  • 特定文字のある行の前に空白行を挿入したい

    5000行ほどあるエクセルファイルで、 「■」の文字がある行の直前に空白行を挿入したいと思っています。 「■」のある行が1500行ほどあるので、 手作業は大変かと思い、マクロでやるのはどうかな?と おもったのですが、既存のマクロを少し修正することはあっても 初めからマクロを組んだことがないので、 どう書けばよいかわかりません。 データはA列にしか無い状態で、 「■」がある行の直前に空白行を挿入するマクロは どのように書けばよいのでしょうか? ご教授のほどお願いします。

  • エクセルマクロ、集計行の上に空白行挿入

    エクセルデータがA、B、C、D、E列1000行まであります。 C列基準でE列を合計するマクロを作成しましたが(集計行はデータの下に挿入)、実行の結果、新たに挿入される集計行の上に空白行を1行挿入していくということを、作成したマクロに付加できるでしょうか? ご教授頂きたく、お願いします。

  • エクセルマクロ 空白行の削除ですが、コピー時の問題

    いつもお世話になっております。 エクセルのマクロですが、指定したシートの指定した行にデータが 入っていない場合に削除するマクロなんですが、行くつか試してみ ましたが、削除したものをコピーして張り付けると、削除された行も コピーされてしまいます。完全に削除するにはどのようにしたらよい のでしょうか。 空白行のあるデータを、空白を無くしてデータベースにコピーする 作業を行いたいのですが、他によい方法はありますでしょうか。 よろしくお願いします。

  • ”アクティブセル行」の一行下を選択”するマクロ

    ■ ”アクティブセルの、1個下の行を選択し、新しい空白行を一行挿入” ■次にその”アクティブセルのA列とB列の値を、  新しく作った空白行に、コピー  ・・・といったマクロを組もうとしております。 たとえば 12行目を選択するプログラム(コマンド?マクロ?)は、  Rows(12:12) となっていたので、それにならって Rows(activecell:B) などとやってみたのですが、うまくいきませんでした。 このような場合、どうしたらよいのかアドバイスをいただけると助かります。 どうぞ、よろしくお願いいたします。  

専門家に質問してみよう