• ベストアンサー

エクセルのマクロでリストを加工する

いつもお世話になります。 エクセルで同一の商品コードが複数存在するリストがあり、商品コード順に並べ替えています。違うデータは"導入店舗"のみです。 商品コード 商品名 導入店舗 100 A商品 a店 100 A商品 b店 100 A商品 c店 101 B商品 a店 101 B商品 d店 102 C商品 a店 102 C商品 e店 ・・・・ このリストを、 商品コード 商品名 導入店舗1 導入店舗2 導入店舗3 100 A商品 a店 b店 c店 101 B商品 a店 d店 102 C商品 a店 e店 ・・・・・・ という形に自動的に修正したいのですが、 可能でしょうか。 商品コードが同じデータの店舗名を、最初の行に切り取って横方向に貼り付けていくことが出来れば、後は店舗名が無くなったデータを並べ替えて削除すればよいだけだと思うので、そこのマクロだけお願いできますでしょうか。 以上宜しくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

関数で回答が欲しいが圧倒的に多い中で「VBAで」は珍しいですね。ソートまでしてあれば、ロジックは比較的簡単なんですが、下記は関数でやって見ました。 (データ)A1:c10 商品コード 商品名 導入店舗    ( E列) 100 A商品 a店 100001 100 A商品 b店 100002 100 A商品 c店 100003 101 B商品 a店 101001 101 B商品 d店 101002 102 C商品 a店 102001 102 C商品 e店 102002 100 A商品 d店 100004 102 A商品 f店 102003 (関数式1) 1列ワーキング列(E列、どの列でも良い)を使います。 E2に=(A2&TEXT(COUNTIF($A$2:A2,A2),"000"))*1といれ E10まで複写します。 上記E列のようになります。 (関数式2) G2より右列に導入店を出します。 G2に=INDEX($C$2:$C$100,MATCH((100+ROW(E2)-2)*1000+COLUMN(G2)-5,$E$2:$E$100,0),0) と入れて、H2より右へ複写します。仮にJ2まで。 G2:J2を範囲指定して、J2で+ハンドルを出し下へ引っ張ります。 (結果) b店 c店 d店 #N/A d店 #N/A #N/A #N/A e店 f店 #N/A #N/A #N/A #N/A #N/A #N/A 長くなるので、#N/Aの消し方は略(ISERROR等を使う)。 F2に100、F3に101を入れ下へ引っ張る。 名前を出すなら =VLOOKUP(100+ROW(A2)-2,$A$1:$B$100,2,FALSE) をいれて下へ引っ張る。 一応商品コード100以後空きコードが無いものとしている。 1,2の空きは「なし」と言うことで我慢できるでしょう。 また商品の導入店は999店以内(しかしエクセル256列の制限で250店ぐらいまで)の制約あり。 この回答はソートしてあることは必要ないと思う。

7-samurai
質問者

お礼

ありがとうございました。 INDEX関数など、初めて使う関数も多く、理解までに時間がかかりましたが、ようやく作成に成功しました。 今後とも宜しくお願い致します。

その他の回答 (2)

  • popesyu
  • ベストアンサー率36% (1782/4883)
回答No.3

ピポットテーブルウィザードを起動して、データ入力範囲を指定 レイアウトは 商品コード・商品名を行 導入店を列及びデータ あとは見栄えがよくなるように適当にカスタマイズするだけです。 例えば行の小計を表示しないとか(表示したくない行の上で右クリック>表示しない)。 まぁ完全なクロス表になりますから、 100 A商品 a店 b店 c店 101 B商品 a店 d店 とはなりません。↓のような感じ。 100 A商品 1 1 1 0 0 101 B商品 1 0 0 1 0 ※0は表示しないようにカスタマイズできますけども。 ※書式が定まったデータに使うとかでなければ、動的に幾らでもカスタマイズできるピポットの方がお勧めでしょう。 元データに変更があった場合は更新すれば常に最新の状態になります。

7-samurai
質問者

お礼

ありがとうございました。 基礎の基礎の質問をしてしまい、申し訳ございませんでした。 おかげさまで、うまくいきました。

  • popesyu
  • ベストアンサー率36% (1782/4883)
回答No.1

ピポットテーブルでやれば一発ですから無理にマクロを組む必要もないかと思いますが。

7-samurai
質問者

補足

いつもお世話になります。 お恥ずかしい話なのですが、私はピボットテーブルを使ったことがありません・・・。 今試してみたのですが、うまくいかず、周りにも詳しい人間がいないので、申し訳ございませんが、手順を教えていただけますでしょうか。

関連するQ&A

専門家に質問してみよう