VBA初心者です。緊急の仕事で困ってまして、教えていただきたいということで質問します。
エクセルの表に92列の項目があって、3000行のデータを並べ替えようとしてます。
一行につき、A列にはID、B列には4月、Q列5月、AF列6月、AU列7月、BJ列8月、BY列9月というように半期分のデータが一行に並んでいます。それぞれの月ごとに14列の項目の内容があります。
その一行のデータ下に5行追加し、A列には、IDをそれぞれ5ヶ月分コピーします。
次に挿入した行の1行目B列に5月分のデータを移動させ、挿入行の2行目B列に6月分のデータを移動させるようにして、9月分まで繰り返します。
そうした作業を3000行行いたいのですが、手作業だと厳しいので、いい考えがあればと思い質問いたしました。
行の挿入は、調べて分かったのですが、月ごとに列を揃える方法がわかりません。
Sub 行の挿入()
Dim i As Long
For i = Cells(Rows.Count, "A").End(xlUp).row To 2 Step -1
Rows(i).Resize(5).Insert ’5行追加する
Next
End Sub
(例)
A列 B列 C列 ~ P列
ID 4月 ~
ID 5月 ~
ID 6月 ~
ID 7月 ~
ID 8月 ~
ID 9月 ~
ID 4月 ~
ID 5月 ~
上記の内容を3000件繰り返す
移動のさせ方をご教授願います。よろしくお願いします。
No.2
- 回答日時:
これでどうかな
Sheet1から Sheet2にコピー貼り付けしています。
Sub 行の挿入()
Dim iRow As Long, j As Long, k As Long
Dim ws2 As Worksheet
Set ws2 = Sheets("Sheet2")
With Sheets("Sheet1")
.Cells(1, "A").Copy ws2.Cells(1, "A")
iRow = .Cells(Rows.Count, "A").End(xlUp).Row - 1
For k = 0 To 5
.Range(.Rows(2), .Rows(iRow + 1)).Copy ws2.Cells(k * iRow + 2, "A")
Next k
End With
For k = 1 To 5
ws2.Cells(k * iRow + 2, "B").Resize(iRow, k * 15).Delete Shift:=xlShiftToLeft
Next k
ws2.Columns("Q").Resize(, 100).Delete
ws2.Cells(1, "A").Resize(iRow * 6 + 1, 16).Sort _
Key1:=ws2.Range("A1"), _
Order1:=xlAscending, _
Header:=xlYes
End Sub
行に少ないデータでは上手く行ったのですが、
本番のデータでは、途中でデバッグしてしまいました。コードの意味がわからないので、勉強していきたいと思います。ありがとうございました。
No.3ベストアンサー
- 回答日時:
こんばんは!
元データはSheet1にあり、Sheet2に表示させるとします。
データは1行目からあるという前提で・・・
標準モジュールにしてください。
Sub Sample1()
Dim i As Long, j As Long, cnt As Long
Dim lastRow As Long, wS As Worksheet
Set wS = Worksheets("Sheet1")
Application.ScreenUpdating = False
With Worksheets("Sheet2")
.Cells.Clear
wS.Range("A1").CurrentRegion.Copy .Range("A1")
lastRow = .Cells(Rows.Count, "A").End(xlUp).Row
.Range("A:A").Insert
With Range(.Cells(1, "A"), .Cells(lastRow, "A"))
.Formula = "=row()"
.Value = .Value
For cnt = 1 To 5
.Copy .Cells(Rows.Count, "A").End(xlUp).Offset(1)
Next cnt
End With
.Range("A1").CurrentRegion.Sort key1:=.Range("A1"), order1:=xlAscending, Header:=xlNo
.Range("A:A").Delete
For i = 1 To .Cells(Rows.Count, "A").End(xlUp).Row Step 6
cnt = i
For j = 17 To .Cells(i, Columns.Count).End(xlToLeft).Column Step 15
cnt = cnt + 1
.Cells(cnt, "A") = .Cells(i, "A")
.Cells(i, j).Resize(, 15).Cut .Cells(cnt, "B")
Next j
Next i
.Activate
End With
Application.ScreenUpdating = True
MsgBox "完了"
End Sub
こんな感じではどうでしょうか?m(_ _)m
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 列 A に同じ日が2つが必要です。 1 2023/03/28 07:25
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 3 2022/06/12 11:17
- Visual Basic(VBA) 指定月分の顧客データファイルを統合して並べ替え、所定の場所に貼り付ける 3 2022/09/10 07:55
- Visual Basic(VBA) 【VBA】指定した検索条件に一致したら別シートに転記したい 2 2022/03/23 16:14
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 2 2022/06/25 22:42
- Visual Basic(VBA) VBA シート間の転記で、条件の追加コードの書き方について教えて下さい。 13 2023/02/26 09:31
- Visual Basic(VBA) 指定月分の顧客データファイルを統合して並べ替え、所定の場所に貼り付ける (再質問) 4 2022/09/14 22:51
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Excel(エクセル) 列を自動で追加したい 3 2022/07/11 12:58
- Visual Basic(VBA) VBAで、シート間の転記するコードをFOR~NEXTで教えてください。 9 2023/04/30 20:04
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで二つの数字の小さい...
-
PowerPointで表の1つの列だけ...
-
VBAで文字列を数値に変換したい
-
エクセル 同じ値を探して隣の...
-
エクセルで最初のスペースまで...
-
エクセル初心者です 関数の入れ...
-
2つのエクセルのデータを同じよ...
-
Excelで半角の文字を含むセルを...
-
LOOKUP関数を使えばいいのでし...
-
エクセル 文字数 多い順 並...
-
Excel、市から登録している住所...
-
A列がない・・・A列が非表示に...
-
エクセルの表から正の数、負の...
-
エクセルで文字が混じった数字...
-
エクセル(勝手に太字になる)
-
エクセルの項目軸を左寄せにしたい
-
重複行を削除して数値を合算し...
-
エクセルの並び変えで、空白セ...
-
EXCELで 一桁の数値を二桁に
-
基準日よりも古い日付の列を削...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで二つの数字の小さい...
-
PowerPointで表の1つの列だけ...
-
エクセルで最初のスペースまで...
-
2つのエクセルのデータを同じよ...
-
エクセル(勝手に太字になる)
-
「B列が日曜の場合」C列に/...
-
エクセル 文字数 多い順 並...
-
EXCELで 一桁の数値を二桁に
-
エクセル 同じ値を探して隣の...
-
VBAで文字列を数値に変換したい
-
エクセルの並び変えで、空白セ...
-
Excelで半角の文字を含むセルを...
-
エクセルで文字が混じった数字...
-
Excel、市から登録している住所...
-
A列がない・・・A列が非表示に...
-
エクセルの表から正の数、負の...
-
[関数得意な方]教えて下さい・...
-
エクセルの項目軸を左寄せにしたい
-
エクセル 時間帯の重複の有無
-
Excelにてある膨大なデータを管...
おすすめ情報