|
▼ありす さん:
こんな書き方もできます
マクロで、Noを作成し、最後に削除しています。
>・最後に並べ替えをする際に、コードが被る事があるので、C列に並べ替え用Noを入れる項目を追加。
Option Explicit
Sub test()
Dim wsF As Worksheet, wsT As Worksheet
Dim 期間 As Long, 開始日 As Date
Dim 元データ As Range, データ数 As Long
Dim 貼付先 As Range
Dim k As Long, 月末 As Date
Dim 商品名 As Range, 数式 As String
Dim ソート範囲 As Range
Set wsF = Worksheets("Sheet1")
Set wsT = Worksheets("Sheet2") '転記先
期間 = wsF.Range("B5").Value
開始日 = wsF.Range("B6").Value
Set 元データ = wsF.Range("C6", wsF.Range("K" & Rows.Count).End(xlUp))
元データ.Columns(1).Formula = "=row()" '並べ替え用No
データ数 = 元データ.Rows.Count
Set 貼付先 = wsT.Range("C6")
For k = 1 To 期間
' 'sheet1のデータをsheet2に貼り付け
元データ.Copy
貼付先.PasteSpecial xlPasteValues
'日付の入力
月末 = DateSerial(Year(開始日), Month(開始日) + k, 0)
貼付先.Resize(データ数).Columns(2).Value = 月末
'商品名に日付を付加
Set 商品名 = 貼付先.Resize(データ数).Columns(7)
数式 = 商品名.Address & "&""" & Format(月末, "('yy/m月分)") & """"
商品名.Value = 商品名.Worksheet.Evaluate(数式)
Set 貼付先 = 貼付先.Offset(データ数)
Next
'並べ替え
Set ソート範囲 = wsT.Range("C6", wsT.Range("K" & Rows.Count).End(xlUp))
ソート範囲.Sort ソート範囲.Columns(1)
'並べ替え用Noの削除
ソート範囲.Columns(1).ClearContents
元データ.Columns(1).ClearContents
End Sub
|
|