- ベストアンサー
Excelで複数行を1グループ単位に横詰で配列
店舗 顧客 商品 A店 あ ア A店 あ イ B店 い ア B店 い エ B店 い オ これを、 店舗 顧客 商品 A店 あ ア イ B店 い ア エ オ 顧客単位に商品を横に詰めて配列したいのです。 どうぞ、よろしくご指導お願いします。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
[No.3補足]へのコメント、 》 関数を入力したのですが、excel2013だからなのか? 「excel2013だから」ではありません、入力に必須な操作が抜けていたから。 添付図に示した[数式バー]に表示された式の姿を凝視してください。 式の両端に括弧{}があるでしょ? ご存じだと思って説明を省略してました。私も、… 》 【お断わり】上式は必ず配列(CSE)数式として入力のこと を付記しておくべきでした。m(_._)m 「関数を入力した」ら、それを確定するために普通は Enterするべきところを Ctrl+Shift+Enterを「エイヤッ!」と憎々し気に叩き付けてください。そうしたら自動的に当該式が当該括弧で囲われます。決してキーボードから当該括弧を入力してはなりませぬぞ!
その他の回答 (6)
- msMike
- ベストアンサー率20% (364/1805)
[No.3補足]へのコメント、 》 店と客を1行にする部分も教えていただけないでしょうか? それ、最初の質問文になかったでしょ? 至極簡単だけど、後出しジャンケンは嫌いです!(`´) 最初に言うべきでした。
- imogasi
- ベストアンサー率27% (4737/17069)
データ例 Sheet1 A1:C9 大前提として、 A列(第1キー)+B列(第2キー)でソートしておくこと。 店舗 顧客 商品 A店 あ ア A店 あ イ A店 ああ ウ B店 い ア B店 い エ B店 い オ B店 おお ク B店 おお ク ーーー Sheet2をアウトプット用に確保 ーーー 標準モジュールに Sub test01() '---シート定義 インプットとアウトプット Set sh1 = Worksheets("Sheet1") Set sh2 = Worksheets("Sheet2") '--- i = 2 'Sh1のデータスタート行 '--- maeKey = String(10, " ") & String(10, " ") Lr = sh1.Range("A100000").End(xlUp).Row 'Sh1のデータ最終行 MsgBox Lr k = 1 'Sh2用の書き出し最初の行ポインター m = 3 'Sh2で、商品は、C列から '==========行ごと繰り返し=========== For i = 2 To Lr '---第1キー keyA = String(10, " ") Mid(keyA, 1, Len(sh1.Cells(i, "A"))) = sh1.Cells(i, "A") 'Midステートメント '---第2キー keyB = String(10, " ") Mid(keyB, 1, Len(sh1.Cells(i, "B"))) = sh1.Cells(i, "B") '=========両キーを結合 Key = keyA & keyB '---結合したキーの行変化による変化をチェック If Key = maeKey Then '--同じ sh2.Cells(k, m) = sh1.Cells(i, "C") m = m + 1 Else '--変わった k = k + 1 sh2.Cells(k, "A") = sh1.Cells(i, "A") sh2.Cells(k, "B") = sh1.Cells(i, "B") sh2.Cells(k, "c") = sh1.Cells(i, "C") m = 4 '次はD列へデータセット End If maeKey = Key Next i End Sub ーーーー 実行結果 Sheet2 A2:E5 A店 あ ア イ A店 ああ ウ B店 い ア エ オ B店 おお ク ク Sheet2の第1行見出し文言は略。 Mid関数でなく、Midステートメントの利用は珍しいかも。 keyAとKeyBは「&」で結合しても良いかも。定桁性を持たせて結合したのは意識的なのだが、必要かどうか、迷いもある。 データ例が少数でしかやってないので、十分チェックしてください。 ーー このソート+前行と比較する、のロジックは、旧くからあるものです。昔は「コントロールブレーク」でよく使った。 出来れば、ピボットテーブルでやりたいが、合計計数数字でなく、明細のままにできるのかな、自信なくVBAでやった。
お礼
ご回答ありがとうございました。 今回、VBAを利用する際に参考にさせていただきます。
- SI299792
- ベストアンサー率47% (780/1631)
セル位置が書いてありません。勝手に画像の様な表とします。 店舗順に並んでいるとします。 D2: =INT(D1)+(A1<>A2)&"."&COUNTIF(A$2:A2,A2) 下へコピペ。(ワークエリアです。目障りなら非表示、又はフォントを白にして下さい。) E2: =IFERROR(INDEX(A:A,MATCH(ROW()-1&".1",$D:$D,0)),"") F2へコピペ。 G2: =IFERROR(INDEX($C:$C,MATCH(ROW()-1&"."&COLUMN(A:A),$D:$D,0)),"") 右へコピペ。 E2:G2 を下へコピペ。
お礼
ご回答ありがとうございました。 関数の組み合わせで、ここまでできることを学びました。
- msMike
- ベストアンサー率20% (364/1805)
- iyonohanamuko
- ベストアンサー率54% (6741/12374)
それをやってしまうとスペースなどもないため、文字が横並び一直線になって見にくくなると思うのですが…。 統合やピポットテーブルをご使用になられることをオススメします。
お礼
ご回答ありがとうございます。 ピボットは事前に試していたのですが、詰まれないので空きが出てしまいます。
- aokii
- ベストアンサー率23% (5210/22062)
ピボットテーブルを使ってみて下さい。
お礼
ご回答ありがとうございます。 ピボットは事前に試していたのですが、詰まれないので空きが出てしまいます。
お礼
Ctrl+Shift+Enterの件、ありがとうございました。 {}を手入力してりました。 こちらとしては後出しをしたつもりではないですが、お気にさわったようで申し訳ございません、どうにか自力で対応します。