• ベストアンサー

ExcelのVBAについて教えてください

ワークシートの1行目から、任意の行数(行数は毎回違う)を削除する方法を教えてください。 E1から下に見にいって空白でないセルが現れたら、 そのひとつ上の行までを削除する。 Range("E1").Select Do Until ActiveCell = "" If ActiveCell = "" Then Selection.Offset(-1).Select Loop ここまでできましたが、続きがわかりません。 よろしくお願いします。 あとVBAのコードについて詳しく載っているURLを ご存知でしたら教えてください。 よろしくお願いします。

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

  • ベストアンサー
  • urk
  • ベストアンサー率33% (18/53)
回答No.3

>E1から下に見にいって空白でないセルが現れたら、 >そのひとつ上の行までを削除する。 だったら、CTRL+↓と同じなので、次のようにすれば LOOPは使わずに一発で消せます。 Range("E1").Select   'CTRL+↓ Selection.End(xlDown).Select   '一行上に上げる ActiveCell.Offset(-1, 0).Activate 'E1から、現在の行までを一気に消す Range("e1", ActiveCell.Address).EntireRow.Delete   'E1へ移動 Range("E1").Select

noname#2528
質問者

お礼

urkさん、こんにちは お礼が遅くなりすみません。 一行ずつ削除する方法をとっていたのですが、 行数が膨大なので時間がかかっていましたが、 urkさんの方法は、とても速いですね。 採用させていただきました。ありがとうございました。

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

その他の回答 (2)

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

先日も似たような質問があり載せたのですが 一番幼稚に易しくやるとすれば下記です。難しく考える 事なし。第1行目をDeleteしてれば良いのです。 繰り上がってくるから。 99と””で聞いている点は完璧ではないがFor Nextに対し Do Until Loopなどはお好みの方を。テスト済み。 Sub test01() For i = 1 To 99 If Cells(1, 5) <> "" Then Exit For Rows(1).Delete ' MsgBox i Next i End Sub

noname#2528
質問者

お礼

imogasiさん、こんにちは お礼が遅くなり申し訳ありません。 99以下とわかっているときは使えそうですね。 'Msgbox i が何を表したコメントかわかりませんでした。 VBA初心者なので、勉強していこうと思います。 ありがとうございました。

すると、全ての回答が全文表示されます。
  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.1

書き方を少し変えましたが処理例です。 While~Wend で入力があるE列の行を探しています。 E1に入力があったら何もしないようにしています。 Sub RowsDelete()   Dim rw As Long '行カウンタ   While Cells(rw + 1, 5) = "" 'E列は5番目だからCells( ,5)     rw = rw + 1   Wend   If rw <> 0 Then Rows("1:" & rw).Delete 'E1に何か入力があれば何もしない End Sub

noname#2528
質問者

お礼

nishi6さん、こんにちは お礼が遅くなり申し訳ありません。 VBA初心者なので、理解するのに時間がかかりましたが、試してみるととても速いですね。 ありがとうございました。

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

専門家に質問してみよう