[[20190626095333]] 『配送リスト』(picnn) ページの最後に飛ぶ

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

 

『配送リスト』(picnn)

   A  B       C    D
   No 品名    数量 配送先
1  1  リンゴ  3    A商店,Bスーパー,Cストア
2  2  バナナ  5    Dストア,E商店,F商店,Gショップ,スーパーH
3  3  メロン  1    I商店
4  4  いちご  2    スーパーJ,Kスーパー

上記のような表があります。
これを下記のようにしたいです。

    A  B       C    D
    No 品名    数量 配送先
1   1  リンゴ  3    A商店
2   1  リンゴ  3    Bスーパー
3   1  リンゴ  3    Cストア
4   2  バナナ  5    Dストア
5   2  バナナ  5    E商店
6   2  バナナ  5    F商店
7   2  バナナ  5    Gショップ
8   2  バナナ  5    スーパーH
9   3  メロン  1    I商店
10  4  いちご  2    スーパーJ
11  4  いちご  2    Kスーパー

数量に応じた行のコピー、カンマで区切られた配送先を1か所ずつの表記にするということができず困っております。
マクロで対応することは可能でしょうか?
ご教示いただけますと幸いです。
よろしくお願い致します。

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


 こんな感じで

 Sub test()
     Dim a, b, e, i As Long, ii As Long, n As Long
     a = Cells(1).CurrentRegion.Value
     ReDim b(1 To 50000, 1 To UBound(a, 2))
     For i = 1 To UBound(a, 1)
         If a(i, 4) <> "" Then
             For Each e In Split(a(i, 4), ",")
                 n = n + 1
                 For ii = 1 To UBound(a, 2)
                     b(n, ii) = IIf(ii = 4, e, a(i, ii))
             Next ii, e
         End If
     Next
     [f1].Resize(n, UBound(b, 2)).Value = b
 End Sub

(seiya) 2019/06/26(水) 10:50


seiya様
ご回答ありがとうございます。
大変に申し訳ございませんが、配送先に関する情報がE列〜I列までありまして、
そこも含めてコピーしたいです。
ご回答いただいたマクロですと、D列までが問題なくコピーできましたが、
E列〜I列も情報がある場合、どの部分を修正したらよいでしょうか?
二度手間となり申し訳ございません。

(picnn) 2019/06/26(水) 11:22


関数でもよろしければ、1案としてつぎのような方法があります。
Sheet1から他のシートに抽出すると思案す。

Sheet2に作業列(仮にE,F,G列)を準備します。

E1: 1
E2: =E1+Sheet1!C1
  この式をE4までコピー。

Sheet1の「A1:B4」をSheet2の「F1」にコピーします。

Sheet2!A1: =IF(ROW(A1)>SUM(Sheet1!$C$1:$C$4),"",VLOOKUP(ROW(A1),$E$1:$G$4,COLUMN(B1)))

Sheet2!B1: =IF(ROW(B1)>SUM(Sheet1!$C$1:$C$4),"",VLOOKUP(ROW(B1),$E$1:$G$4,COLUMN(C1)))

Sheet2!C1: =IF(A1="","",TRIM(MID(SUBSTITUTE(VLOOKUP(A1,Sheet1!$A$1:$D$4,4),",",REPT(" ",100)),1+(COUNTIF($A$1:A1,A1)-1)*100,100)))

3つの式を下にコピーします。
(メジロ) 2019/06/26(水) 11:32


 >E列〜I列も情報がある場合
 コードはそのままで対応しますので、出力先セルを変更してください

 例
 [K1].Resize(n, UBound(b, 2)).Value = b

 又は新規シートへ
 Sheets.Add.Cells(1).Resize(n, UBound(b, 2)).Value = b
(seiya) 2019/06/26(水) 11:44

seiyaさま
ありがとうございます!
新規シートに作成するほうが都合がよかったのでそのようにしました。
ご回答ありがとうございます!

メジロさま
マクロでしか対応できないと思い込んでいたのですが、
数式でも対応できるのですね!
私のスキルでは、別のものに応用する際は、数式版のほうがハードルが低そうなので
今後の参考にさせていただきます。

お二方とも本当にありがとうございました。
(picnn) 2019/06/26(水) 12:18


コメント返信:

[ 一覧(最新更新順) ]


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