| 
    
     |  | ▼ありす さん: 
 こんな書き方もできます
 マクロで、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
 
 
 
 
 |  |