• ベストアンサー

変数を用いて行全体を削除するには。

エクセル上で変数を用いた行全体の削除を行うマクロを組みたいと思っております。 具体的に言えば、 Range("2:16").EntireRow.Delete とすれば、2行目から16行目までを 削除するという意味になりますが、ここの「2」及び「16」の箇所を InputBox関数で変数化したいのです。 なにぶんにも初心者ですので、舌足らずの部分があると思いますが、 なにとぞご教授くださいますようお願いいたします。

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

  • ベストアンサー
  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.1

行全体の選択ですよね InputBoxの変数が GYOUST、GYOUENDとして Rows(GYOUST & ":" & GYOUEND).EntireRow.Delete と入れてみてください。

kosaishi
質問者

お礼

hallo-2007さんのアドバイスをもとに Dim 行st As String Dim 行ed As String 行st = InputBox("削除開始行を入力", "確認", "") 行ed = InputBox("削除終了行を入力", "確認", "") Rows(行st & ":" & 行ed).EntireRow.Delete と組んで見たところ見事にできました。 ありがとうごさいました。

その他の回答 (2)

  • Masa2072
  • ベストアンサー率51% (94/182)
回答No.3

NO.2のものです。 既に解決されたようですが、サンプルに間違いがあり、そのままというのも気持ち悪いので 変数宣言部の   Dim St_Row As Long   Dim Ed_Row As Long は   Dim St_Row As Variant   Dim Ed_Row As Variant の間違いでした。

kosaishi
質問者

お礼

最後まで面倒を見ていただき、恐縮至極です。

  • Masa2072
  • ベストアンサー率51% (94/182)
回答No.2

Sub Sample()   Dim St_Row As Long '削除先頭行格納用   Dim Ed_Row As Long '削除終端行格納用   St_Row = InputBox("削除する最初の行番号を入力")   Do Until IsNumeric(St_Row) '数字が入力されるまで繰り返す     St_Row = InputBox("ST")     If St_Row = "" Then Exit Sub '何も入力されなければ終了     If CLng(St_Row) < 1 Or CLng(St_Row) > 65536 Then       St_Row = vbNullString '1以下または65536より大きい数字ならもう一度入力     End If   Loop      Ed_Row = vbNullString   Do Until IsNumeric(Ed_Row)     Ed_Row = InputBox("削除する最初の行番号を入力")     If Ed_Row = "" Then Exit Sub     If CLng(Ed_Row) < 1 Or CLng(Ed_Row) > 65536 Then       Ed_Row = vbNullString     End If   Loop      Sheets("Sheet1").Range(St_Row & ":" & Ed_Row).EntireRow.Delete End Sub  

kosaishi
質問者

お礼

さまざまな入力パターンに対応するため、Do-Loopステートメント等との 組み合わせまでご提示いただき恐縮です。 いまの私の知識では、これらを完全に理解習得するまでは至りませんが、 研鑽に励みたいと思います。 ところでここでの「65536」とは、エクセルでのいわゆる限界行数を 意味しているという解釈でよろしいのでよね。