- ベストアンサー
エクセルのVBAについて
初めて質問させていただきます。 エクセルの表なのですが、 A 1 a 2 b 3 c 4 D とある表を別のシートに A 1 a 2 3 b 4 5 c 6 7 d と、一行空けてもしくは数行空けて表示させるVBAはありますか? 自分で色々探してても分からず困っています。 どうかお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
どこまで自動記録で出来るかやってみました。ループする様にアレンジしています。 A1からA列のみにデータがあるとします。 二行開けたければ、挿入動作を二回繰り返せば良いでしょう。 移動や範囲選択ををEndキーを用いて行い、汎用化しやすくしています。ご参考まで。 Sub Macro1() Sheets("Sheet1").Select Range("A1").Select Range(Selection, Selection.End(xlDown)).Select Selection.Copy Sheets("Sheet3").Select Range("A1").Select ActiveSheet.Paste Selection.End(xlDown).Select Application.CutCopyMode = False Do Selection.Insert Shift:=xlDown Selection.End(xlUp).Select Loop Until ActiveCell.Address = "$A$1" End Sub
その他の回答 (2)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 #1さんのアイデアは、VBAでも、データ量が大量になると本領を発揮しますが、今回は、少数のようですから、一般的な方法でも良いようです。 失敗したら、「おまけのマクロ」で元に戻してください。ただし、間に何かを入れたものは、元には戻りません。 ------------------------------------------- Sub TestMacro1() '飛び飛びに並べ替える Dim rng As Range Dim myData As Variant Dim i As Long, j As Long '============================ '何行置きか入れる Const cnt As Integer = 2 '(一行置きは、2) '============================ With ActiveSheet Set rng = .Range(.Cells(1, 1), .Cells(Rows.Count, 1).End(xlUp)) myData = Application.Transpose(rng.Value) rng.ClearContents j = 1 Application.ScreenUpdating = False For i = LBound(myData) To UBound(myData) rng.Cells(j, 1).Value = myData(i) j = j + cnt If j >= Rows.Count Then Exit Sub Next i Application.ScreenUpdating = True End With End Sub '------------------------------------------- 'おまけ Sub ReDoMyData() '飛び飛びを元に戻す Dim rng As Range Dim myData As Variant Dim cnt As Long Dim c As Variant Dim i As Long With ActiveSheet Set rng = .Range(.Cells(1, 1), .Cells(Rows.Count, 1).End(xlUp)) cnt = Application.CountA(rng) If cnt < 2 Then Exit Sub '1個以下や最後行まで入っているもの実行しない ReDim myData(cnt, 0) For Each c In rng If Trim(c.Value) <> "" And i < cnt Then myData(i, 0) = c.Value i = i + 1 End If Next c rng.ClearContents .Range("A1").Resize(cnt).Value = myData End With End Sub
お礼
なるほど、こういう風にもできるんですね・・・ ぜひ参考にさせてもらいます。 ありがとうございます!
- bin-chan
- ベストアンサー率33% (1403/4213)
VBAではないが、私なら「こうする」 A B 1 a 1 2 b 3 3 c 5 4 D 7 5 2 6 4 7 6 (2, 4, 6は列Bね) で、列Bでソート
お礼
なるほど・・・ありがとうございます。 しかし、その件数(例だと小文字アルファベット)が 200件以上あるもので、出来れば手入力を最大限に減らしたいんです。
お礼
ありがとうございます! 無事、一つ飛びで表示させることが出来ました。