重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

初めて質問をしますので、質問の仕方が悪ければ指摘してください。
共通の項目を持つ複数行のデータを1列のデータに横展開をする方法を教えてください。
wordの差し込み印刷に使うデータを生成したいのです。

H1 D1
H1 D2
H1 D3
H2 D1
H3 D1
H3 D2

H1 D1 D2 D3
H2 D1
H3 D1 D2
に変換
Hn、Dn共複数セルで構成されています

excelの操作又はVBAでも結構です
但しVBAは初心者です

質問者からの補足コメント

  • うーん・・・

    理解度が悪く申し訳ありませんが
    H(ヘッダー部)D(ディテール部)共、複数項目で構成されているので教えていただいた操作が理解できません。
    解説を加えていただくか、VBAでの方法を教えていただけないでしょうか?
    昔プログラムの仕事もしていたのでロジックはわかると思います。

    No.3の回答に寄せられた補足コメントです。 補足日時:2015/09/30 13:41
  • うーん・・・

    H(ヘッダー部)D(ディテール部)共ダブリはありません。
    1件のデータが多品1葉の形式になります
    (1件のデータは1つのヘッダー部と複数(件数はまちまち(最大で10件))になる)
    ヘッダー部、ディテール部共、複数の項目(固定数)があります
    EXCELの操作は初心者級なので解説もよろしくお願いします。

    No.1の回答に寄せられた補足コメントです。 補足日時:2015/09/30 14:02
  • うーん・・・

    質問がよくなかったので指導してもらった操作が出来ませんでした。
    詳細を書きますので再度の回答をお願いできないでしょうか?

    ヘッダー部が3項目、ディテール部が8項目のそれぞれ固定項目です。
    具体的には
    A,B,C列がヘッダー部、D~K列がディテール部のデータです
    (複数件が同じヘッダー)
    1ヘッダー部(キーはA列)に同じヘッダーを持つ複数(最大10件)のディテールを横並びにしたいのです。
    (横の長さはディテールの数によって違います)
    元データー件数は約500件、生成後の件数は約120件です

    No.2の回答に寄せられた補足コメントです。 補足日時:2015/09/30 15:21

A 回答 (6件)

№5は誤り。

訂正します。

. A   B   C   D   E   F   G   H   I   J   K
1| キー          
2| H1-A H1-1 H1-2        D1-3 D1-4 D1-5 D1-6 D1-7 D1-8
3| H1-A H1-3 H1-4 D1-1 D1-2 D1-3     D1-5     D1-7 D1-8
4| H1-A H1-5 H1-6 D1-1 D1-2 D1-3 D1-4 D1-5 D1-6 D1-7 D1-8
5| H2-A H2-1 H2-2     D1-2 D1-3 D1-4 D1-5        D1-8
6| H3-A H3-1 H3-2        
7| H3-A H3-3 H3-4     D1-2 D1-3 D1-4 D1-5 D1-6 D1-7 D1-8

1. 以下を入力します。
・L2セルには、=IF(A2<>A3,1,0)
・M2セルには、=IF(D2<>""," "&D2,"")&IF(E2<>""," "&E2,"")&IF(F2<>""," "&F2,"")&IF(G2<>""," "&G2,"")&IF(H2<>""," "&H2,"")&IF(I2<>""," "&I2,"")&IF(J2<>""," "&J2,"")&IF(K2<>""," "&K2,"")
・N2セルには、=IF(A2=A1,N1&M2,A2&M2)

2. L~N列をそのまま7行(または、500行)下へコピーします。

3. 1行目全体を選択し、[データ][フィルタ][オートフィルタ]を実行しプルダウンメニューを生成します。

4. L列のプルダウンメニューから「1」を選択すると、N列に希望の表示が実現しコピーして貼り付けると以下のようになります。

H1-A D1-3 D1-4 D1-5 D1-6 D1-7 D1-8 D1-1 D1-2 D1-3 D1-5 D1-7 D1-8 D1-1 D1-2 D1-3 D1-4 D1-5 D1-6 D1-7 D1-8
H2-A D1-2 D1-3 D1-4 D1-5 D1-8
H3-A D1-2 D1-3 D1-4 D1-5 D1-6 D1-7 D1-8
    • good
    • 0
この回答へのお礼

色々不備な質問をしたのに丁寧な対応をしていただきありがとうございました。
おかげで何とか理解できました。

お礼日時:2015/10/01 09:02

. A   B   C   D   E   F   G   H   I   J   K


1| キー
2| H1-A H1-1 H1-2        D1-3 D1-4 D1-5 D1-6 D1-7 D1-8
3| H1-A H1-3 H1-4 D1-1 D1-2 D1-3     D1-5     D1-7 D1-8
4| H1-A H1-5 H1-6 D1-1 D1-2 D1-3 D1-4 D1-5 D1-6 D1-7 D1-8
5| H2-A H2-1 H2-2     D1-2 D1-3 D1-4 D1-5 D1-6 D1-7 D1-8
6| H3-A H3-1 H3-2 D1-1 D1-2 D1-3 D1-4 D1-5 D1-6 D1-7 D1-8
7| H3-A H3-3 H3-4 D1-1 D1-2 D1-3 D1-4 D1-5 D1-6 D1-7 D1-8

L2セルには、=IF(A2<>A3,1,0)
M2セルには、=IF(D2="",0,1)&IF(E2="",0,1)&IF(F2="",0,1)&IF(G2="",0,1)&IF(H2="",0,1)&IF(I2="",0,1)&IF(J2="",0,1)&IF(K2="",0,1)
N2セルには、=FIND("1",M2,1)-1
O2セルには、=" "&D2&" "&E2&" "&F2&" "&G2&" "&H2&" "&I2&" "&J2&" "&K2
P2セルには、=IF(A2=A1,P1&RIGHT(O2,LEN(O2)-N2),A2&RIGHT(O2,LEN(O2)-N2))
と入力します。
L2~P2セルを7行目までコピーしてください。

1行目全体を選択し、[データ][フィルタ][オートフィルタ]を実行しプルダウンメニューを生成します。
L列のプルダウンメニューから「1」を選択すると、P列に希望の表示が実現しコピーして貼り付けると以下のようになります。

H1-A D1-3 D1-4 D1-5 D1-6 D1-7 D1-8 D1-1 D1-2 D1-3 D1-5 D1-7 D1-8 D1-1 D1-2 D1-3 D1-4 D1-5 D1-6 D1-7 D1-8
H2-A D1-2 D1-3 D1-4 D1-5 D1-6 D1-7 D1-8
H3-A D1-1 D1-2 D1-3 D1-4 D1-5 D1-6 D1-7 D1-8 D1-1 D1-2 D1-3 D1-4 D1-5 D1-6 D1-7 D1-8
    • good
    • 0

>H(ヘッダー部)D(ディテール部)共、複数項目で構成されている



検索条件や出力結果が複数項目で構成されるのであれば、
それ自体がどのような構成か提示しないとVBAとして書きようがないかと・・・・
とくにDが複数列にわかれちゃうと、命題のような出力は無理だと思いますが?

ロジック的には単純に検索列の上から順にデータをループ処理し
それぞれ結果となる配列に流し込んで
最後に配列をセルに反映する単純作業でしょう
    • good
    • 0
この回答へのお礼

書き方が悪かったと思いますが
ヘッダー部が3項目、ディテール部が8項目のそれぞれ固定項目です。
具体的には
A,B,C列がヘッダー部、D~K列がディテール部のデータです
(複数件が同じヘッダー)
1ヘッダー部(キーはA列)に同じヘッダーを持つ複数(最大10件)のディテールを横並びにしたいのです。
(横の長さはディテールの数によって違います)
元データー件数は約500件、生成後の件数は約120件です
再度の指導をお願いします。

お礼日時:2015/09/30 14:56

#1です


VBAで処理してもいいですが、これくらないなら関数で無理やりやった方が早いかも

元データ
* A  B
1 H1 D1
2 H1 D2
3 H1 D3
4 H2 D1
5 H3 D1
6 H3 D2

C1に「=A1&"_"&COUNTIF(A1:A$1,A1)」と書き、下方向にコピペしてください
ようはA列に同じデータがでてくる順番です。
なおセパレータに「_」を利用しました、仕様上問題があるなら別の記号をつかってください

結果
* A  B  C
1 H1 D1 H1_1
2 H1 D2 H1_2
3 H1 D3 H1_3
4 H2 D1 H2_1
5 H3 D1 H3_1
6 H3 D2 H3_2

出力したい場所を仮に1列あけてE列以降だとします
まずA1~A6をコピーしてE2にペーストして、エクセルのメニューから「重複の削除」をします
さらにF1から右方向に1,2,3・・・と適当なかず増やして書いておきます

するとこう
* A  B  C   D E F G H I J K L
1 H1 D1 H1_1 * * 1 2 3 4 5 6 7
2 H1 D2 H1_2 * H1
3 H1 D3 H1_3 * H2
4 H2 D1 H2_1 * H3
5 H3 D1 H3_1 * 
6 H3 D2 H3_2 * 

あとはF2に「=IF(ISNA(MATCH($E2&"_"&F$1,$C:$C,0)),"",INDEX($B:$B,MATCH($E2&"_"&F$1,$C:$C,0),1))」
とかいてコピーし、(上の例だと)L4まで範囲を選択してはりつけます。

最終結果
* A  B  C   D E F G H I J K L
1 H1 D1 H1_1 * * 1 2 3 4 5 6 7
2 H1 D2 H1_2 * H1 D1 D2 D3
3 H1 D3 H1_3 * H2 D1
4 H2 D1 H2_1 * H3 D1 D2
5 H3 D1 H3_1 * 
6 H3 D2 H3_2 *
この回答への補足あり
    • good
    • 0

A  B  C         D


1|
2| H1 D1 =IF(A2<>A3,1,0) =IF(A2=A1,D1&" "&B2,A2&" "&B2)
3| H1 D2 =IF(A3<>A4,1,0) =IF(A3=A2,D2&" "&B3,A3&" "&B3)
4| H1 D3 〃         〃
5| H2 D1 〃         〃
6| H3 D1 〃         〃
7| H3 D2 〃         〃

(1) 1行目は[挿入][行]などで空けてデータが1行目に来ないようにします。見出し行が元々1行目の場合はそのままでOKです。
(2) C列、D列に上記のように入力します。先頭セルだけ入力したら下にコピーしていけばOKです。
(3) 1行目全体を選択し、[データ][フィルタ][オートフィルタ]を実行しプルダウンメニューを生成します。
(4) C列のプルダウンメニューから「1」を選択すると、希望の表示が実現しコピーして貼り付けると以下のようになります。

H1 D1 D2 D3
H2 D1
H3 D1 D2
この回答への補足あり
    • good
    • 0

条件の追加があった方がよいかと



(1)データだぶり
H1 D1 ←これ
H1 D1 ←これ
H1 D2
H1 D3
H2 D1
H3 D1
H3 D2
のようなダブリがあった場合、どう表示したいのか?
もしくは絶対にダブリはないのか

(2)抜け番
H1 D1
H1 D2
H1 D3
H2 D1
H3 D1
H3 D3 ←これ
のように、D2が発生せずにD3が発生した場合

結果は
H1 D1 D2 D3
H2 D1
H3 D1 (ぬけ) D3
になるのか、左詰めをして

H1 D1 D2 D3
H2 D1
H3 D1 D3
になるのか、もしくは抜け番は絶対に発生しないのか
また列の表示順はとくに気にしなくてよいのか・・・など
この回答への補足あり
    • good
    • 0
この回答へのお礼

結果は後者を望みます。
よろしくお願いします。

お礼日時:2015/09/30 08:53

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す