[[20210214154118]] 『行数を増やす(データによって増やす行数が違う)』(JUN) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『行数を増やす(データによって増やす行数が違う)』(JUN)

こんにちは。下に記載されたものをベースにマクロを再度組もうと思っています。
最終的にやりたいことは「ワードの差し込み文書のデータ作り」です。

営業店に【店名・電話番号】がすでに入っている印刷物を配布する予定があり、営業店ごとに印刷したい枚数が違うので、データ横に置く枚数分行数を増やし、そのデータをワードに差し込むことで全店分一気に印刷したいと考えています。
(下に書いたマクロは前回作ったものですが、今回は量が増えたため改変できればと思っています)

しかし、これだとInputBoxから数を取得することと、営業店ごとに増やす数を逐一入力しなければならないので一気にできた方が便利かと考えました。
すべて行が増えた状態で2500行くらいになる予定です。

質問は
・やりたいことはこれの改編で可能か
・改編する場所は枚数取得の場所とコピーの貼り付けのみか

【イメージ】
A  B  C    D
店番 店名 電話番号 枚数
195 東京 XXXX   10←これを10行に
196 千葉 YYYY   5←これを5行に

____________________________

Sub 同一行コピーを増やして連続させる()

    'A列最終行の取得(LstRow = Cells()の中の1を調整。Bなら2)
    Dim LstRow As Long
    LstRow = Cells(Rows.Count, 1).End(xlUp).Row

   '印刷枚数をInputBoxから取得
    Dim a As Long
    a = Application.InputBox("枚数入力", Type:=1)

   'InputBoxの引数が2より小さ場合、終了する。
    If a < 2 Then
           MsgBox "有効でない数値が入力されました。"

        End

    End If
   'aを増やす行数に変換する。
    a = a - 1

   '選択したセルのコピーを次の行にa分貼り付け
    For i = 1 to a
        Rows(ActiveCell.Row).Copy Destination:=Rows(ActiveCell.Row + i)        
    Next i

Application.CutCopyMode = False

End Sub

_________________________

ネットにあったこれを「選択したセルのコピーを次の行にa分貼り付け」と差し替えることでやりたいことには少し近づくのかとも考えています。

'繰り返し処理(見出し行ありを「LastRow to 2」で調整、見出しがなければ「to 1」)

    For i = LstRow To 2 Step -1
        Rows(i).Select
        Selection.Copy
        Rows(i + 1 & ":" & i + a).Select
        Selection.Insert Shift:=xlDown

ご教授頂ければ幸いです。
長文となり申し訳ございません。よろしくお願い致します。

< 使用 Excel:Excel2013、使用 OS:Windows10 >


マクロじゃないとだめですか。

(マナ) 2021/02/14(日) 17:23


使用するのが今回だけではないことと、私が異動したあとも使えるものを置いておきたいと考えています。

また、店の数が140店舗以上あり、多いところでは一つの店の行を100行程に増やす必要があるので、ボタン一つで差込データが完成する方が後々効率的であると考えました。

しかし、マクロ以外で良い案があれば教えていただけると助かります。

前回は店番を入れれば店名と電話番号が出るように設定しておき、1行分情報を出してからそれを増やすというやり方を取りましたが、それを140回繰り返すのは少々手間だったのでもう少し効率化したいです。
(JUN) 2021/02/14(日) 17:35


マクロは他の回答者をお待ち下さい。

Power Quereyで、表の加工を自動化する案です。
https://hamachan.info/win8-excel2013-powerquery/
 

 1)現在のデータをテーブルに設定
 2)「POWER QUERY」-「テーブル/範囲から」
     これでPower Queryエディターにデータが取り込む
 3)カスタム列を追加
  新しい列名: index
  式:= List.Numbers(1,[枚数])

 4)[index]列を、新しい行に展開
 5)[枚数]列を削除
 6)閉じて読み込む
 7)出力結果

 店番  店名   電話番号   index
 195    東京    XXXX       1
 195    東京    XXXX       2
 195    東京    XXXX       3
 195    東京    XXXX       4
 195    東京    XXXX       5
 195    東京    XXXX       6
 195    東京    XXXX       7
 195    東京    XXXX       8
 195    東京    XXXX       9
 195    東京    XXXX       10
 196    千葉     YYYY      1
 196    千葉     YYYY      2
 196    千葉     YYYY      3
 196    千葉     YYYY      4
 196    千葉     YYYY      5
 196    千葉     YYYY      2

 8)元データを変更したら、出力したテーブル内で右クリックし「更新」

 9)はじめてで、Power Queryの操作がよくわからなかったら、
     詳細エディターに、下記をコピペ

 let
    ソース = Excel.CurrentWorkbook(){[Name="テーブル1"]}[Content],
    変更された型 = Table.TransformColumnTypes(ソース,{{"店番", Int64.Type}, {"店名", type text}, {"電話番号", type text}, {"枚数", Int64.Type}}),
    追加されたカスタム = Table.AddColumn(変更された型, "index", each List.Numbers(1,[枚数])),
    #"展開された index" = Table.ExpandListColumn(追加されたカスタム, "index"),
    削除された列 = Table.RemoveColumns(#"展開された index",{"枚数"})
in
    削除された列

(マナ) 2021/02/14(日) 17:52


回答ありがとうございます。Power Quereyは初めて知りました。
会社のPCにこれがすでに入っていない場合は活用できないのですが勉強になります。
(勝手にインストールするとシステムやコンプラの部署が飛んでくるので...)

マクロの方も待ってみようと思います。
すぐにご回答いただき、本当にありがとうございます。
(JUN) 2021/02/14(日) 18:03


回答つかないようなので

 Sub test()
    Dim wsF As Worksheet
    Dim wsT As Worksheet
    Dim tbl As Range
    Dim r As Range
    Dim n As Long

    Set wsF = Worksheets("Sheet1")
    Set wsT = Worksheets("Sheet2")

    wsT.UsedRange.Offset(1).ClearContents

    Set tbl = wsF.Cells(1).CurrentRegion
    Set tbl = Intersect(tbl, tbl.Offset(1))

    For Each r In tbl.Rows
        n = r.Cells(4).Value
        r.Resize(, 3).Copy wsT.Cells(Rows.Count, 1).End(xlUp).Offset(1).Resize(n)
    Next

 End Sub

(マナ) 2021/02/14(日) 19:53


出来ました。感動いたしました。
シート名のみ改編して活用させていただきます。
これで1日かかる業務が10分で終わりそうです。
追加で確認させていただきたいことがあった際にはまた是非質問させてください。

本当にありがとうございました。

(JUN) 2021/02/14(日) 22:45


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.