人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

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

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


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


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

●質問者: colorbox0831
●カテゴリ:コンピュータ
✍キーワード:Excel VBA あいうえお さしすせそ イメージ
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● きゃづみぃ
●35ポイント
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


2 ● うぃんど
●35ポイント

>当方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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ