- ベストアンサー
変数を用いて行全体を削除するには。
エクセル上で変数を用いた行全体の削除を行うマクロを組みたいと思っております。 具体的に言えば、 Range("2:16").EntireRow.Delete とすれば、2行目から16行目までを 削除するという意味になりますが、ここの「2」及び「16」の箇所を InputBox関数で変数化したいのです。 なにぶんにも初心者ですので、舌足らずの部分があると思いますが、 なにとぞご教授くださいますようお願いいたします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
行全体の選択ですよね InputBoxの変数が GYOUST、GYOUENDとして Rows(GYOUST & ":" & GYOUEND).EntireRow.Delete と入れてみてください。
その他の回答 (2)
- Masa2072
- ベストアンサー率51% (94/182)
NO.2のものです。 既に解決されたようですが、サンプルに間違いがあり、そのままというのも気持ち悪いので 変数宣言部の Dim St_Row As Long Dim Ed_Row As Long は Dim St_Row As Variant Dim Ed_Row As Variant の間違いでした。
お礼
最後まで面倒を見ていただき、恐縮至極です。
- Masa2072
- ベストアンサー率51% (94/182)
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
お礼
さまざまな入力パターンに対応するため、Do-Loopステートメント等との 組み合わせまでご提示いただき恐縮です。 いまの私の知識では、これらを完全に理解習得するまでは至りませんが、 研鑽に励みたいと思います。 ところでここでの「65536」とは、エクセルでのいわゆる限界行数を 意味しているという解釈でよろしいのでよね。
お礼
hallo-2007さんのアドバイスをもとに Dim 行st As String Dim 行ed As String 行st = InputBox("削除開始行を入力", "確認", "") 行ed = InputBox("削除終了行を入力", "確認", "") Rows(行st & ":" & 行ed).EntireRow.Delete と組んで見たところ見事にできました。 ありがとうごさいました。