[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『配送リスト』(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
(picnn) 2019/06/26(水) 11:22
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
メジロさま
マクロでしか対応できないと思い込んでいたのですが、
数式でも対応できるのですね!
私のスキルでは、別のものに応用する際は、数式版のほうがハードルが低そうなので
今後の参考にさせていただきます。
お二方とも本当にありがとうございました。
(picnn) 2019/06/26(水) 12:18
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.