Excel VBAを使用して2行ずつ行の削除をし、1行残して(3行目を残す)また2行ずつ行の削除、1行残しす(6行目を残す)をループして行う方法が知りたいです。


イメージとしては以下のような感じです。

━━【A】━━━━
【1】あいうえお
【2】かきくけこ
【3】さしすせそ
【4】たちつてと
【5】なにぬねの
【6】はひふへほ
【7】まみむめも
【8】やゆよ
【9】らりるれろ
━━━━━━━━━


↓マクロ実行後↓
━━【A】━━━━
【1】さしすせそ
【2】はひふへほ
【3】らりるれろ
━━━━━━━━━


当方VBA初心者ですので、できるだけわかりやすくご教授頂けると助かります。
よろしくお願いいたします。

回答の条件
  • URL必須
  • 1人5回まで
  • 登録:
  • 終了:2011/01/26 23:54:01
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答2件)

id:taknt No.1

回答回数13539ベストアンサー獲得回数1198

ポイント35pt
Sub test()
b = 1
For a = 1 To 65536
    If Cells(b, 1) = "" Then Exit For
    
    '行を消す
    Rows(b).Delete Shift:=xlUp
    Rows(b).Delete Shift:=xlUp
    b = b + 1
Next a

End Sub

行を消すのは

Rows(b).Delete Shift:=xlUp

でやっています。

問題なのは 消したときに 行の位置が 変わっていることです。

なので 同じことを やると 次の行も削除できます。

3行目は残すので 行カウンタを+1してやります。

で A列のセルに何も入っていなかったら 終了となります。


http://q.hatena.ne.jp/answer

id:windofjuly No.2

回答回数2625ベストアンサー獲得回数1149

ポイント35pt

>当方VBA初心者ですので、できるだけわかりやすく

 

マクロをいきなり作ろうとするのではなく手作業を記録させることからはじめないといけないです

【1】マクロ記録

手作業で2行ずつ消していった場合に自動的に生成されるVBAのコード

    Rows("1:2").Select
    Selection.Delete Shift:=xlUp
    Rows("2:3").Select
    Selection.Delete Shift:=xlUp
    Rows("3:4").Select
    Selection.Delete Shift:=xlUp

 

【2】マクロ記録の解釈

最初の2行は1:2が対象となっていますが、最初の2行を消した段階で3行目より下のものがズリあがってきてますので、次の対象は2:3ということになっています

プログラムの際には1:2の次が1繰り上がって2:3、その次も1繰り上がって3:4・・・以下繰り返し

 

【3】ループを使って繰り返し行うように変更

カウンタを変数r としてA列が空っぽならループしないというように考え、以下のように作成(テスト済み)

Sub Macro1()
    Dim r As Long
    r = 1: 'スタートラインをここに書く
    
    Do While (Cells(r, 1).Value <> "")
        Rows(r & ":" & r + 1).Delete Shift:=xlUp
        r = r + 1
    Loop
End Sub

 

技術的質問の場合には質問し返す場合もありますので「コメント・トラックバックを表示する」にチェックを入れておくことを勧めます

技術的質問の場合は多くの場合が個別案件になりますのでURL必須は邪魔な場合が多いです(リンクのほうが簡単であったり、リンクが必要であったりすれば回答者側判断でリンクしますよ)

http://q.hatena.ne.jp/answer

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません