エクセルの表をマトリクス表に展開する方法は?

このQ&Aのポイント
  • エクセルの表をマトリクス表に展開する方法について質問です。
  • 初めて質問させていただきます。エクセル2003を使用していますが、表をマトリクス表に展開する方法を知りたいです。
  • マクロ(VBA)を使わずにエクセルの表をマトリクス表に展開する方法について教えてください。VLOOKUPなどを試しましたがうまくいきません。
回答を見る
  • ベストアンサー

エクセルの表をさらにマトリクス表に展開したい。

初めて質問させて頂きます。 仕事上でエクセル2003を使用しています。 以下の作業を簡単にできるように、数式またはマクロを組むことを考えています。 表1を表2のように展開する。(例) 表1    A  B  C 1  A1 B1 あいうえお 2  A2 B2 かきくけこ 3  A3 B1 さしすせそ 4  A4 B2 たちつてと 5  A1 B1 なにぬねの 表2    A    B       C   1       B1      B2 2  A1 あいうえお      なにぬねの 3  A2         かきくけこ  4  A3 さしすせそ  5  A4         たちつてと ※行の数は実際はもっと多いです。  また表2のB2に記入してある内容は  複数行になっても構いません。 まずはマクロ(VBA)を使わずにできるかやってみましたが、 VLOOKUPなどでは、なかなかうまくいきません。 よい方法はないでしょうか? VBA使用でもかまいません。 ヒントだけでもぜひよろしくお願いします。

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

  • ベストアンサー
  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.2

関数で対応する方法です。式が複雑になりますので作業列を作って対応します。作業列は目障りでしたら最後にそのれの列を非表示にすればよいでしょう。 表1はシート1に有ってA、B、C列の2行目から下方にデータが入力されているとします。 結果の表はシート2に表示させることにしてA列のA1、A2、・・や2行目のB1、B2、・・・などは自動でシート2に表示できるようにします。また、A1-B1の組み合わせでは一つのセルに2行の文字列を書くことはやめて行を増やして並べて表示させるようにします。 シート1での作業列ですがD2セルには次の式を入力いて下方にオートフィルドラッグします。 =IF(A2="","",IF(COUNTIF(A$2:A2,A2)=1,COUNTIF(A:A,A2)+MAX(D$1:D1),"")) E2セルには次の式を入力して下方にオートフィルドラッグします。 =IF(B2="","",IF(COUNTIF(B$2:B2,B2)=1,MAX(E$1:E1)+1,"")) F2セルには次の式を入力して下方にオートフィルドラッグします。 =IF(A2="","",A2&B2&"/"&(COUNTIF(F$1:F1,A2&B2&"*")+1)) シート2では次のようにします。 A3セルには次の式を入力して下方にオートフィルドラッグします。 =IF(ROW(A1)>MAX(Sheet1!D:D),"",IF(ROW(A1)=1,Sheet1!A$2,IF(COUNTIF(Sheet1!D:D,ROW(A1)),INDEX(Sheet1!A:A,MATCH(ROW(A1),Sheet1!D:D,0)),A2))) B2セルには次の式を入力して横方向にオートフィルドラッグします。 =IF(COLUMN(A1)>MAX(Sheet1!$E:$E),"",INDEX(Sheet1!$B:$B,MATCH(COLUMN(A1),Sheet1!$E:$E,0))) B3セルには次の式を入力して右横方向にオートフィルドラッグしたのちに下方にもオートフィルドラッグします。 =IF(OR(B$2="",$A3=""),"",IF(ISERROR(INDEX(Sheet1!$C:$C,MATCH($A3&B$2&"/"&COUNTIF($A$3:$A3,$A3),Sheet1!$F:$F,0))),"",INDEX(Sheet1!$C:$C,MATCH($A3&B$2&"/"&COUNTIF($A$3:$A3,$A3),Sheet1!$F:$F,0))))

その他の回答 (1)

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

関数ではうまく出来ないので、マクロにやらせるのが適当です。 ご質問の状況設定がイマイチ曖昧ですが、表2の縦項目(A1,A2…)や横項目(B1,B2…)について ○そもそもどういった項目が表1に存在するのか、調査することからはじめたい ○表2の縦横項目は所定の順序で「作成済み」であり、その表の中を埋めるだけのマクロが欲しい ご質問の提示をみると後者であると読めますが、もし前者からマクロでやらせたいのでしたら、縦項目横項目を作表するマクロについて別途ご質問を投稿して頂いたほうがよいと思います。 前置きが長くなりましたが、こんな具合でしょうか。 表1はシート1のABC列に並んでいるとして 表1はタイトル行など用意せずいきなり1行目から実データを並べているとして 表2はシート2のA1を左上コーナとして配置済みだとして sub macro1()  dim r as long  dim c as long  dim i as long  on error resume next  worksheets("Sheet1").select  with worksheets("Sheet2")  .cells.clearcontents  for i = 1 to range("A65536").end(xlup).row  if application.countif(.range("A:A"), cells(i, "A")) > 0 then   r = application.match(cells(i, "A"), .range("A:A"), 0)  else   r = .range("A65536").end(xlup).row + 1   .cells(r, "A").value = cells(i, "A").value  end if  if application.countif(.range("1:1"), cells(i, "B")) > 0 then   c = application.match(cells(i, "B"), .range("1:1"), 0)  else   c = .range("IV1").end(xltoleft).column + 1   .cells(1, c).value = cells(i, "B").value  end if   .cells(r, c) = iif(.cells(r, c) = "" , "", .cells(r, c) & vblf) & cells(i, "C")  next i  end with end sub

sashimi5959
質問者

お礼

内容の説明不足でありながら、 自分のやりたい結果がうまく表示されました。 実際にはもっともっと複雑な表なので、 参考にさせていただき、改良して使用したいと思います。 ありがとうございました。

関連するQ&A

  • EXCELの表の展開の仕方を教えてください(VBAを利用?)

    EXCELの表の展開の仕方を教えてください(VBAを利用?) 1ユーザ1行で200行以上の表があります。 (ユーザ毎に)A列、B列は固定でC列以降に複数の商品(数は20以下の任意数)が 登録されているのですが、これを1行1商品に展開(分解)したいと思っています。 (添付のイメージです) 元の表はそのまま残し、別のシートに展開した結果を表示させるのが希望です。 毎月の作業のためマクロを利用したいと考えていますが可能でしょうか? ※)ちなみにこのような表の展開?を表す言葉や用語はありますでしょうか?   検索してもうまく見つけることができず、こちらで質問させていただくことにしました。 よろしくお願いします。

  • エクセルのリスト表からマトリクス表に丸いを付けたい

    初めて質問させていただきます。 Excel2016を使用しています。 リスト表(A列は重複なし、B列は重複あり) | A | B | 1 | AAA | 111 | 2 | BBB | 222 | 3 | BBB | 444 | 4 | CCC | 222 | 5 | CCC | 333 | 6 | DDD | 333 | 7 | EEE | 333 | 8 | EEE | 444 | マトリクス表(1行目とA列の値は、既に埋め込まれているものです) | A | B | C | D | E | 1 | | 111 | 222 | 333 | 444 | 2 | AAA | ○ | | | | 3 | BBB | | ○ | | ○ | 4 | CCC | | ○ | ○ | | 5 | DDD | | | ○ | | 6 | EEE | | | ○ | ○ | VLOOKUP、INDEX、MATCHなどの関数で考えてみましたが、 正解が見えてきませんでした。 何かよい方法はありますでしょうか。 ぜひよろしくお願いします。

  • Excelで表を展開するには?

    客先より下のような発注書が、エクセルで届きます。 商品名 単位 A社 B社 C社 ・・・ 合計 --------------------------------------------- いちご 20個  10   0   0 ・・・ (数式) いちご 50個   5  20   0 ・・・ (数式) みかん 10個  10   0   5 ・・・ (数式) みかん 30個   5  10   0 ・・・ (数式) りんご  5個   0   5  10 ・・・ (数式) りんご 10個   0   5  10 ・・・ (数式) これを以下のようなリストを作成するために展開したいのです。 商品名 単位 出荷先 個数 -------------------------- いちご 20個  A社  10 いちご 50個  A社   5 いちご 50個  B社  20 みかん 10個  A社  10 みかん 10個  C社   5 みかん 30個  A社   5 みかん 30個  B社  10 りんご  5個  B社   5 りんご  5個  C社  10 りんご 10個  B社   5 りんご 10個  C社  10 別シートにセル参照で書き出してみたのですが、出荷先名や出荷先数が変動するため、日が変わると合計が入ったり出荷先が漏れたりしてしまい、うまくいきません。 上記のような表を、別シートか、もしくはCSVでエクスポートする方法があれば教えてください。 よろしくおねがいします。

  • IFとVLOOKUP関数

    VLOOKUP関数を使って検索結果を出そうと思いましたが、 データ量が93000行X8列になりますので、 共通分けして複数のシート(A、B、C、D)に分けました。 あるセルに『A』と入れると『シートA』の表から検索を行う、 あるセルに『B』と入れると『シートB』の表から検索するといった感じにするには、 IFとVLOOKUPを使用するなら、どのような式を入れたらいいのでしょうか? また、他の関数を使う式があるのでしょうか? マクロやVBAも考えましたが、 あまり知識がありません。 データ量から考えると マクロやVBAで行った方がいいのでしょうか?

  • エクセルでマトリックス表を作るとき・・・

    よろしくお願いします。 マトリックス表をエクセルで作るときなどに 下記のようなことをしたいのですがうまく出来る方法はないでしょうか     A  B  C  D A B     ○  C        ○    D 上記のように行と列に同じ文字があり、クロスするところに○を入れたい、と思うのですが。。。。 (すいません、わかりますでしょうか・・・) 目検では出来ないぐらい数が多く、、、うまく出来る方法があれば教えてください。 よろしくお願いします。

  • Excel 複数の表を並び替えしたい VBA

    いつも大変お世話になっております。 複数の表を一気に並び替えしたいと思っています。 条件はいたって簡単で、 C列に1~の数値が記入されています。 A B C あ 12 1  い 15 3 う 13 2 え 15 2 お 12 1 かき 16 2 く  17 1   ↓ A B C あ 12 1  う 13 2 い 15 3 お 12 1 え 15 2 く  17 1 かき 16 2 データが入力されている最終行まで、 繰り返し並び替えを行いたいです。 回答よろしくお願いいたします。

  • エクセル関数VLOOKUPで教えてください。 

    エクセル関数VLOOKUPで教えてください。  シ-ト1にA列から学籍番号・B列に氏名・C列に点数(数値)を記入してあります。 シ-ト2に順位表を作成しA列にLARGE関数を使用してシ-ト1から点数降順(昇順)に表示しました。シ-ト2のB列に学籍番号 C列に氏名 をVLOOKUP関数でシ-ト1から抽出したいのですが、点数が同点の場合に当該複数名を表示せず単一名になってしまいます。VBA・マクロを使用せずに関数のみで同一点数獲得者の氏名を個別個々に表示させる方法を教えてください。

  • エクセルVBAのについて。

    エクセルのVBAマクロで検索と結果表示(抽出)を行いたいです。 1つの行からだけでなく、複数行(例A行、B行、C行)から検索を行いたい場合、どのようにすれば良いでしょうか? よろしくお願いします。

  • Excel(VBA)マトリクスの解体方法について

    VBAで、以下のようなマクロを作成したいのですが、どのように作成したら良いのか検討がつきません。 どのようにすれば良いか、ご教授いただけたらと思います。 (過去の質問No.1488981を参考に記入させていただきます) (1)下記のように、縦横のマトリクス表にデータが入力されている。     A B C ・・ 1   X Y Z 2 a ○ × ○ 3 b × ○ ○ 4 c ○ ○ ○ (2)これを別シートに【"○"のついたデータのみ】縦に3列にデータを並べるように処理する。  左列には"項番"(1~)、中列には"行データ"、右列には"列データ" 1 a X 2 a Z 3 b Y 4 b Z  ・  ・  ・ (3)列データと行データの数は不定で、一番右下となるセルまで、処理を繰り返すかたちにする。(空白セルが10個以上になる等の条件で) 以上のような条件です。ご回答よろしくお願い致します。

  • 表形式データの展開

    表形式に入力されている数値データを、1行に数値データが1つだけ持つフラットな形に変換(展開?)したいのですが、どうやるのが効率的でしょうか。(実際のイメージは下記のとおりです。) ■変換前  a b c d A 1 0 0 2 B 2 0 3 1 C 5 0 2 5 ■変換後 a,A,1 a,B,2 a,C,5 b,A,0 b,B,0 b,C,0 c,A,0 c,B,3 c,C,2 d,A,2 d,B,1 d,C,5 元のファイルはExcelです。複数あるファイルのデータを、全て変換して合体させるので、簡単な方法が良いです。使うソフトはExcelでもAccessでも構いません。(データ量が多くなる予定なので、合体させたデータは最終的にAccessに取り込む予定です。) どなたか知恵を貸してください。

専門家に質問してみよう