• 締切済み

エクセルで複数列のデータをまとめる方法

あまりエクセル詳しくないので教えて下さい>< 下記のようなデータを一覧にまとめたいです! 列A   列B    列D  列E   列G   列H 名前  英語  名前   数学  名前  国語 A    98    J     98    ZZ   98 B    96    K     97    K    97 J    92    B     97    B    95 :    :     :     :     :    : なぜか各列にデータが分かれていて、各4、5万人分のデータがバラバラの列になっているので、 列A  列B  列D  ・・・ 名前  国語  数学・・・ A    97   98・・・ B    98   76・・・ 上記のように纏めたいです! ただ、名前順にソートしても教科別に受験人数や受験者が違ったりするので… 何か効率的な方法はないでしょうか? ご教授頂けると嬉しいです。 宜しくお願い致します!

みんなの回答

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.9

NO3です。 前回の回答で(1)元データをSheet1、集計用シートをA2以下にコピーが説明不足となっていますので訂正します。 集計シートのA2に以下にコピーするのは名前リスト(名前重複していない一覧データ)です。 この名前一覧データが無い場合、次の様な操作を行う事で重複のない名前データを作成できます。 (1)各科目別の名前列を集計シートのA列にコピー (2)A列を選択→データタブ→重複の削除

全文を見る
すると、全ての回答が全文表示されます。
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.8

こんばんは! Sheet1は↓の画像のような配置になっている訳ですよね? 一応そういうことだとして、VBAでの一例です。 画面左下にあるSheet1のSheet見出し上で右クリック → コードの表示 → VBE画面が出ますので ↓のコードをコピー&ペーストしてマクロを実行してみてください。 (Alt+F8キー → マクロ → マクロ実行です) Sub test() 'この行から Dim i, j, k, L As Long Dim ws1, ws2 As Worksheet Set ws1 = Worksheets("sheet1") '←「sheet1」の部分は実際のSheet名に! Set ws2 = Worksheets("sheet2") For j = 2 To ws1.Cells(1, Columns.Count).End(xlToLeft).Column Step 3 ws2.Cells(1, 1) = ws1.Cells(1, 1) ws2.Cells(1, Columns.Count).End(xlToLeft).Offset(, 1) = ws1.Cells(1, j) Next j For j = 1 To ws1.Cells(1, Columns.Count).End(xlToLeft).Column Step 3 For i = 2 To ws1.Cells(Rows.Count, 1).End(xlUp).Row If WorksheetFunction.CountIf(ws2.Columns(1), ws1.Cells(i, j)) = 0 Then ws2.Cells(Rows.Count, 1).End(xlUp).Offset(1) = ws1.Cells(i, j) End If Next i Next j For k = 2 To ws2.Cells(Rows.Count, 1).End(xlUp).Row For L = 2 To ws2.Cells(1, Columns.Count).End(xlToLeft).Column For i = 2 To ws1.Cells(Rows.Count, 1).End(xlUp).Row For j = 2 To ws1.Cells(i, Columns.Count).End(xlToLeft).Column Step 3 If ws2.Cells(k, 1) = ws1.Cells(i, j - 1) And ws1.Cells(1, j) = ws2.Cells(1, L) Then ws2.Cells(k, L) = ws1.Cells(i, j) End If Next j Next i Next L Next k End Sub 'この行まで 尚、For~Nextを多用していますので、時間が少しかかるかもしれません。 参考になれば良いのですが・・・m(_ _)m

全文を見る
すると、全ての回答が全文表示されます。
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.7

これはまさに表の組み換えの問題です。 関数では式が理解不能ぐらい複雑になるでしょう。 私ならVBAで下記のようにします。しかし質問者はVBAどころではないと思うので書いても無駄かと思うが。 エクセル2007以後(行数制限が緩和された)なら (1)A,B列、D,E列、G,H列・・データを氏名と科目と点数の組のデータ(他シートのA,B、C3列データとして)が縦に続いた形にします。 (2)それをA列(名前)でソートします (3)同じ名前の人の行が近くにまとまるので、人ごと+科目順ごと+点数の表に組み替えます。 >教科別に受験人数や受験者が違ったりするので・・ その人のその科目の行が現れなければ空白なりにします。少し手を加えれば0点と受験してないの区別をすることは出来る。 ーー 言いたいことはVBA(プログラム)向けの課題だということです。 エクセルでデータを作るときに、後々を考えてない責めが出ています。 ーー 既に機能名が出ている、エクセルの、データー統合やピボットも元のデータを保存したまま(合計などしないで)で処理するのは目的に入っていないように思うのですが。

全文を見る
すると、全ての回答が全文表示されます。
  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.6

>恐縮ですがエラー処理の簡単な方法がありましたらご教授頂きたいです。 ご使用のエクセルが2007なら、すでに回答したようにIFERROR関数を利用するのが簡単です。 =IFERROR(INDEX(Sheet1!$A$2:$N$10000,MATCH($A2,INDEX(Sheet1!$A$2:$N$10000,,MATCH(B$1,Sheet1!$A$1:$N$1,0)-1),0),MATCH(B$1,Sheet1!$A$1:$N$1,0)),"")

全文を見る
すると、全ての回答が全文表示されます。
  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.5

シート1にお示しの元の表があるとします。 名前も自動的に表示させるようにするためにシート1には3列の作業列を設けます。 J2セルには次の式を入力して下方にオートフィルドラッグします。 =IF(COUNTIF(A$2:A2,A2)=1,MAX(J$1:J1)+1,"") K1セルには次の式を入力します。 =MAX(J:J) K2セルには次の式を入力して下方にオートフィルドラッグします。 =IF(COUNTIF(A:A,D2)+COUNTIF(D$2:D2,D2)=1,MAX(K$1:K1)+1,"") L1セルには次の式を入力します。 =MAX(K:K) L2セルには次の式を入力して下方にオートフィルドラッグします。 =IF(COUNTIF(A:A,G2)+COUNTIF(D:D,G2)+COUNTIF(G$2:G2,G2)=1,MAX(L$1:L1)+1,"") そこでお求めの表をシート2に表示させるとしてA1セルには名前と入力してB1セルには国語、C1セルには数学などと入力します。 A2セルには次の式を入力して下方にオートフィルドラッグします。 =IF(COUNTIF(Sheet1!J:J,ROW(A1))>0,INDEX(Sheet1!A:A,MATCH(ROW(A1),Sheet1!J:J,0)),IF(COUNTIF(Sheet1!K:K,ROW(A1))>0,INDEX(Sheet1!D:D,MATCH(ROW(A1),Sheet1!K:K,0)),IF(COUNTIF(Sheet1!L:L,ROW(A1))>0,INDEX(Sheet1!G:G,MATCH(ROW(A1),Sheet1!L:L,0)),""))) 名前が表示されます。 次にB2セルには次の式を入力して右横方向にオートフィルドラッグしたのちに下方向にもオートフィルドラッグします。 =IF(ISERROR(INDEX(Sheet1!$A:$H,MATCH($A2,INDEX(Sheet1!$A:$H,1,MATCH(B$1,Sheet1!$1:$1,0)-1):INDEX(Sheet1!$A:$H,10000,MATCH(B$1,Sheet1!$1:$1,0)-1),0),MATCH(B$1,Sheet1!$1:$1,0))),"",INDEX(Sheet1!$A:$H,MATCH($A2,INDEX(Sheet1!$A:$H,1,MATCH(B$1,Sheet1!$1:$1,0)-1):INDEX(Sheet1!$A:$H,10000,MATCH(B$1,Sheet1!$1:$1,0)-1),0),MATCH(B$1,Sheet1!$1:$1,0))) シート2では教科の並べる1行での順番は任意に行うことができます。

全文を見る
すると、全ての回答が全文表示されます。
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.4

どこか空セル(たとえばシート2の)を選んでおいて,データメニュー(データタブ)の「統合」というのを開始します AB列を選んで追加 DE列を選んで追加 GH列を選んで追加 して,上端行と左端列にチェックしてOKすると,それだけで名寄せからマトメまで一気に自動でやってくれます。 名前リストを事前に準備したり,関数に苦労する必要は全くありません。 #ただし元のデータがご相談のように(添付の画像のように)実はきれいに作成されていないときは,ご自分でご質問にまさに書いたように,表の体裁を整える必要があります。

全文を見る
すると、全ての回答が全文表示されます。
  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.3

名前リストが有る前提ですが、以下の方法で可能です。 (1)元データをSheet1、集計用シートをA2以下にコピー (2)B2に=IF(COUNTIF(Sheet1!A:A,$A2),VLOOKUP($A2,Sheet1!A:B,2,FALSE),"")として下方向にコピー    C2に=IF(COUNTIF(Sheet1!D:D,$A2),VLOOKUP($A2,Sheet1!D:E,2,FALSE),"")として下方向にコピー   以降、科目別に数式内の列番号を各々調整して下さい。

yu-ka1220
質問者

お礼

ご助言有難うございました。 B列はうまく反映されているようなのですが、C列の名前と得点がずれてしまいます… テストを受けているメンバーが重複している場合とどちらか片方の列にしか存在しないメンバーがいるのでおかしくなってしまうのでしょうか… 重ね重ね恐縮ですが、必ずしもメンバー重複だけではない場合の調整についてもご助言頂けると助かります。

全文を見る
すると、全ての回答が全文表示されます。
  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.2

元データがSheet1にあるなら、まとめシートのB2セルに以下の式を入力して右方向及び下方向にオートフィルしてください。 =INDEX(Sheet1!$A$2:$N$10000,MATCH($A2,INDEX(Sheet1!$A$2:$N$10000,,MATCH(B$1,Sheet1!$A$1:$N$1,0)-1),0),MATCH(B$1,Sheet1!$A$1:$N$1,0)) データがない場合は#N/Aのエラーが表示されますので、たとえばIFERROR関数などで適宜エラー処理をしてください。 =IFERROR(上記の式,"") #エクセルのバージョンが記載されていませんが(ひとまず2007以降のバージョンの対応策を示しました)、エクセルのバージョンによって使用できる機能や操作方法が大きく異なりますので、質問の際には必ずバージョンを明記するようにしましょう。

yu-ka1220
質問者

お礼

エクセルがあまり得意ではないので、エラー処理がうまくいかず… ご助言頂いて有難うございました。 #質問が初めてだったので勝手がわからず申し訳ありません。 エクセルのバージョンは2007です。 恐縮ですがエラー処理の簡単な方法がありましたらご教授頂きたいです。

全文を見る
すると、全ての回答が全文表示されます。
  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.1

ピボットテーブルで分析するデータのある場所を「複数のワークシート範囲」として、A:B列、C:D列、E:F列を登録すれば御望みの表示になると思います。 ただし、同姓同名が居ない事が前提ですし、4,5万人分のデータを処理するとなると相当時間が掛かりそうですが……。 #提示されている元データと纏めたい表の例で、内容が異なっているのは手違いでしょうか?

yu-ka1220
質問者

お礼

ピボットでは参照出来ないデータ、データが多過ぎると言われてしまいました… #例は例として記載をしていたので、ニュアンスが伝わればと思い特に他意は御座いません。 まだ奮闘中ですが、ご助言有難うございました!

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Excel上でのデータソートの方法をご教授下さい

    Microsoft Excelでの、ソートについてご教授下さい。  例えば、蔵書リストを作成した場合、A列に著者名、B列に書名、C列に価格と入力していくとします。 このとき、C列を対象としてソートすると、そのC列は昇順なり降順なりで価格順としてソートされますが、A列B列のデータとC列のデータが食い違ってしまいます。  これを、エクスプローラのファイル一覧のように、A列の著者名でソートすると、それをB列C列にも反映させ、蔵書リストを著者順にも書名順にも価格順にも一行一冊づつ並べ替えるにはどうしたらよいのでしょうか。   なんとかうまく説明したいのですが、稚拙極まる質問の表現で大変恥ずかしく思います。 どなたか質問の内容をお酌み取り頂き、教えて頂いたら幸甚に存じます。  また、既出質問、あるいは各種マニュアルを精査すればこの方法が記載されてる事と思います。 それらを横着し、皆様の知識と善意に安直に頼る姿勢をお許し願いたいと存じます。

  • excel 7条件一括のソート方法

    excelの表を7条件 一度の操作でソートしたいです。 A      B     C    D    E     F     G     H       data1  data2 小計1   data3  data4  小計2   合計 Aさん   28    27     55    30    25     55    110 Dさん   29    26     55    30    25     55    110 Cさん   27    28     55    29    26    55     110 Bさん   28    28     56    27    27    54     110 上記のEXCELの表があった場合の ソート条件  1 H列の数が少ない順  2 1が同じ場合Gが少ない順  3  2が同じ場合Fが少ない順 4 3が同じ場合Eが少ない順 5 4が同じ場合Dが少ない順 6 5が同じ場合Cが少ない順 7 6が同じ場合Bが少ない順 となるように するには どうしたらよいでしょうか?    間違いをなくすために 数度のソートを繰り返すことはしたくありません。         よろしくお願いいたします  

  • エクセルデータの並び替え

    A列とB列に文字列ばかりのデータがあります。 C列に、A列の1データに対してB列の5データが続くように並べたいのです。 A列  B列  C列 a    1   a b    2     1 c    3     2 d    4     3 e    5     4 f    6     5 g    7     b h    8     6 i    9     7 j    10     8 k    11     9 l    12     10   以下、C列には、  c 11 12 13 14 15 d 16 17 18 19 20 e 21 ・・・・と続きます。 こんなことは関数処理で可能でしょうか。 手作業でやりだしたのですが、手間がかかるので質問させていただきました。どうぞ、よろしくお願いします。

  • Excel 二つの表を用いたデータ整理

    かなり困っています。 (1)二つのエクセル表が存在 (2)ファイル1には↓のようにデータが並んでいます    A列  B列  C列  D列    生徒A 生徒B 生徒C 生徒D 行1 国語27 国語34 国語54 算数34 行2 数学36 家庭25 算数23 理科23 行3 理科55 理科44 理科21 英語44 行4 社会87 社会33 社会32 行5 英語54  (3)ファイル2は以下のようになっています    A列  B列  C列  D列  E列        国語  算数  理科  社会 行1 生徒A 27   36   55   87 行2 生徒B  (4)要するに、ファイル1のデータから必要な数値を抽出して ファイル2のデータに移し変えたいのですが、ファイルAの中の名称とデータ数が異なる場合があることもあり、整理はコピペしかないのかと半ばあきらめています。 とはいえデータの数は4000…正直なきたいです…何かいい方法はありませんか?

  • エクセルデータの並び替え

    A列に 1 2 3 4 5 6 7 ・・・・・ B列に a b c d e f g h i j k l ・・・・ と文字列があります。 これを C列に 5つずつデータをセットにして並べたいのです。 A列    B列           C列 1     a      1 a   2 b  3 c  4 d  5 e 2     b      6 f   7 g  8 h  9 i  10 j 3     c      11 k  12 l  13 m  14 n  15 o 4     d      16 p   17 q  18 r  19 s  20 t 5     e      以下同じように続く 6     f 7     g 8     h 9     i 10     j 11     k 実際のC列のデータは トマト tomato  ネコ cat   机 desk  いす chair  かばん  bag  のようにしたいのです。 関数の扱いがわからずに苦戦しています。どうぞ、よろしくお願いします。

  • エクセルVBAで重複データの削除

    A列、B列、C列・・・とデータが入っていて、B~D列の5行目から10行目が関連の有るデータのかたまりとします。 C~D列の全てのデータが重複している場合に、最初のほうのデータ(行番号が小さいほう)を残すものとして、重複データを削除したいのです。 削除するときは、 B~Dの範囲で削除する。A列等は削除しない。 削除したらデータは上に詰める。 データはソートしない。 ということをやりたいのですが、簡単に出来ますでしょうか? 良く覚えていないのですが、ネット上で色々探してみても、必ずソートしている気がしたので、ソートしない方法が知りたいのですが。

  • Excelで、同一データ行を知るには

    Excel2000で、 A列からD列までまったく同じデータの場合、色をつけてくれる方法を教えてください。 例えば、 A20=A100 かつ B20=B100 かつ C20=C100 かつ D20=D100 の場合、同じデータとして、20行目と100行目に色をつけるようにしたいです。 次善の策として、 A列からD列だけでなく、E列以降もすべてまったく同じデータの場合でもいいです。 なお、ソートしたり、行の順番を変えるのはナシにしてください。 また、A列からD列のデータをくっつけるのも、できれば避けたいです。(それぞれの列を比較して異なる場合でも、くっつけたら同じになる場合もありうるので。)

  • Excelで違う列のデータを合わせたい

    A列に名前、B列にA列に関連した数値データがあります。 このA,B列の行は固定して、D列に別の名前のデータがあり、 このD列にあるデータがA列にある場合(D列の名前がいくつかA列にも同じものがある) A,B列の横C列にチェック(あるいはD列の名前を)表示できないでしょうか? この時A,B列の行は動かしたくありません。 例ーーーーーーーーーーーーーーーーーー A列に名前(相沢、赤井、秋山、井上、岩井、上野、、、)とあります。 D列に(間、秋山、相川、石井、岩井、植木、、、)とあり、 この場合D列の名前がA列にある(ここでは秋山と岩井)時、 A列に秋山と岩井の横に例えばC列にチェックあるいはD列の同じ名前を表示できませんか? データーは数百あります。

  • Excelでデータを抽出したい

    エクセルに詳しくないので、教えてください。 Sheet1のA列とB列に文章データがあります。このデータは2つで1セットになっています。 Sheet2には、D列部分にA列のデータが順不同であります。 このA列とD列にあるデータ同士の文章は同一のものですが、 Sheet1にあるB列のデータがSheet2にはないので、 同じB列のデータをD列の隣のE列に表示させ、 同じようにまた2つで1セットにしたいと思っていますが、方法がわかりません。 わかりにくい表現で申し訳ないのですが 教えていただけると助かります。 よろしくお願いします。

  • Excelで順位をつけたい

     お世話になります。よろしくお願いいたします。    エクセルでの順位の付け方です。  例えば、  国語、数学の2教科のテストの結果で順位をつけるとします。     列A  列B   列C   列D 行1      国語   数学  合計点 行2  A君  40    60   100 行3  B君  50    50   100 行4  C君  60    40   100  上記のような結果の時に普通に「RANK」を使うと、3人全員が「一位」になりますが、  合計点が同じ場合は、国語の点数が良い者から、「一位・二位・三位」になるようにしたいのです。  したがって、C君が「一位」・B君が「二位」・A君が「三位」になるようにするには、 どのようにすればよろしいですか?お教えください。

専門家に質問してみよう