MENU

縦のリスト形式のデータを、(定型シートに)内容別にコピー

無料アプリで、すぐにエクセルVBAマクロを作成できます。

例として、「納品データを、請求書フォーマットに、取引先別に貼り付ける」VBAマクロを作成します。

(ページの末尾に、VBAコード掲載)

事例

左の「納品データ」を、納品先別に、右の「請求書」に貼り付けます。

できました(^^♪

アプリの設定

アプリの設定です。

アプリのトップページ 

⇒▼コピー・貼り付け 

⇒【ツール】縦のリスト形式のデータを、(定型シートに)内容別にコピー

 

【ポイント】

■ 行数が変わるデータの、最終行まで処理できます。

■ 転記する列で、「指定した列を転記する」を選び、「B:F」と指定すると、

A列(納品先名)を除いた、B列からF列をコピーします。

 

 

Set 重なり = Intersect(Range(セル範囲).Offset(1, 0).Resize(Selection.Rows.Count - 1), Range("b:f"))

 

 

 

 

作成されるコード

Sub デモ_76() '項目ごとに定型シート作成
Application.ScreenUpdating = False ' 画面描画を停止
Application.DisplayAlerts = False  ' 警告表示を停止
Dim セル範囲 As String, セル As Range, 右下セル As String
Sheets("納品データ").Select
'◆最終行を取得し、セル範囲を決める
Range("a1:f1").CurrentRegion.Select
右下セル = Cells(Selection.Row + Selection.Rows.Count - 1, Range("f1").Column).Address(False, False)
セル範囲 = "a1" & ":" & 右下セル

Range(セル範囲).Select
Call デモ_76_メイン処理(セル範囲)
Application.DisplayAlerts = True   ' 警告表示を再開
Application.ScreenUpdating = True  ' 画面描画を再開
End Sub

 

Sub デモ_76_メイン処理(セル範囲 As String)
Application.Calculation = xlCalculationManual '自動計算を停止
'◆キーをつくる
Dim 辞書 As Object, キー As Variant, 最終行 As Long, 行 As Long
Set 辞書 = CreateObject("Scripting.Dictionary")
最終行 = Sheets("納品データ").Cells(Rows.Count, Range("a1").Column).End(xlUp).Row
For 行 = Range("a1").Row + 1 To 最終行
    キー = Sheets("納品データ").Cells(行, Range("a1").Column + 1 - 1).Value
    If Not 辞書.Exists(キー) Then
      辞書.Add キー, ""
    End If
Next
'◆キーごとにデータを貼り付ける
For Each キー In 辞書
    '◆フィルタ
    Sheets("納品データ").Select
    Range(セル範囲).AutoFilter Field:=1, Criteria1:=キー
     '◆コピーする列の確定
Dim 重なり As Range
Set 重なり = Range(セル範囲).Offset(1, 0).Resize(Selection.Rows.Count - 1)
    '◆シート名があるかチェック
    Dim シート As Worksheet
    For Each シート In Worksheets
        If シート.Name = キー Then
            '◆コピー
            重なり.Copy
            Sheets("納品データ").AutoFilterMode = False
            Sheets(キー).Select
            Range("b8").Select
            '◆貼り付け行
            Dim 左端列 As Long, 下端行 As Long, 相手セル As String
            左端列 = ActiveCell.Column
            下端行 = Selection.CurrentRegion.Row + Selection.CurrentRegion.Rows.Count - 1
            相手セル = Cells(下端行, 左端列).Address(False, False)
            If Range(相手セル).Value <> "" Then
               相手セル = Cells(下端行 + 1, 左端列).Address(False, False)
            End If
            '◆貼り付け
            Range(相手セル).PasteSpecial Paste:=xlPasteValues
            GoTo 次の項目
        End If
    Next シート
    Worksheets("原本").Copy after:=Worksheets(Worksheets.Count)
    ActiveSheet.Name = キー
    '◆コピー
    重なり.Copy
    Sheets("納品データ").AutoFilterMode = False
    '◆貼り付け
    Sheets(キー).Range("b8").PasteSpecial Paste:=xlPasteValues
次の項目:
Next キー
Application.CutCopyMode = False
Application.Calculation = xlCalculationAutomatic ' 自動計算を再開
End Sub   

 

アプリはこちらから↓↓↓↓