• ベストアンサー

エクセルのVBAについて

初めて質問させていただきます。 エクセルの表なのですが、  A 1 a 2 b 3 c 4 D とある表を別のシートに  A 1 a 2 3 b 4 5 c 6 7 d と、一行空けてもしくは数行空けて表示させるVBAはありますか? 自分で色々探してても分からず困っています。 どうかお願いします。

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

  • ベストアンサー
  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.2

どこまで自動記録で出来るかやってみました。ループする様にアレンジしています。 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

mhf0912
質問者

お礼

ありがとうございます! 無事、一つ飛びで表示させることが出来ました。

その他の回答 (2)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんばんは。 #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

mhf0912
質問者

お礼

なるほど、こういう風にもできるんですね・・・ ぜひ参考にさせてもらいます。 ありがとうございます!

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

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でソート

mhf0912
質問者

お礼

なるほど・・・ありがとうございます。 しかし、その件数(例だと小文字アルファベット)が 200件以上あるもので、出来れば手入力を最大限に減らしたいんです。

関連するQ&A