• 締切済み

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…正直なきたいです…何かいい方法はありませんか?

みんなの回答

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.9

こんばんは! すでに色々回答が出ていますので、 参考程度で目を通してみてください。 ↓の画像で説明させていただきます。 数学を算数に変更させてもらっています。 尚、科目は7科目まで、生徒数は列幅いっぱい 当方使用のExcel2003ではIV列が最終列になるはずですので 生徒数は 256列÷2の128人 までしか対応できないと思います。 科目数は増えても問題ないと思いますので、 科目数によって範囲指定の領域はアレンジしてください。 Sheet2の 科目はあらかじめ入力してあるものとします。 Sheet2の生徒名のセルA2セルに =IF(COUNTA(Sheet1!$1:$1)>=ROW(A1),INDEX(Sheet1!$1:$1,,2*ROW(A1)-1),"") そして、B2セルに =IF(ISERROR(INDEX(Sheet1!$2:$8,MATCH(B$1,INDEX(Sheet1!$2:$8,,MATCH($A2,Sheet1!$1:$1,0)),0),MATCH($A2,Sheet1!$1:$1,0)+1)),"",INDEX(Sheet1!$2:$8,MATCH(B$1,INDEX(Sheet1!$2:$8,,MATCH($A2,Sheet1!$1:$1,0)),0),MATCH($A2,Sheet1!$1:$1,0)+1)) という数式を入れ列方向(科目が入力してあるセルまで)オートフィルでコピー 最後にA2~科目がある最後の列を範囲指定し、最後のセルのフィルハンドルで 下へオートフィルでコピーすると画像のような感じになります。 以上、参考になれば幸いですが、 他に良い方法があれば読み流してくださいね。m(__)m

kunikunisa
質問者

お礼

ありがとうございます! ぜひとも参考にさせていただきます! 皆さんのおかげでどうやら三日連続徹夜は防げそうです…

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

#3です。補足いただいたのですが、 >つのブックが存在し、書式は固定です。正しくはブック1からブック2の書式で指定されている項のデータを抜き出すのが目的でした。 エクセルでは書式は別の意味が決っているので、表のレイアウトとかフォーマットと表現すべきだと思います。 >指定されている項のデータを抜き出すのが 指定されているというのはどういう状態ですか。 ●ブック2に、穴埋めをすべきような、空白セルがあるのか。 そこへブック1のデータを探して、該当セルデータを持ってくるのか。 ブック2で、空白?のセルのあり場所は何かルール性が無いのか。 例えば科目の理科がデータが入ってないとか 在る科目だけとか。 ●生徒の順番はブック1とブック2と違うのか。 ーー 回答すべきことの内容は、 結局データ例を少数挙げて、人間が手作業でやる場合、どういうステップになるか、文章にすれば判りよいのだ。あとは回答者がエクセル的に方法を考える。

  • a987654
  • ベストアンサー率26% (112/415)
回答No.7

NO7です。1っ箇所ポカミス修正です。 >7.SHEET3からファイル1に移り "ファイル1”→"ファイル2”に読み替えて下さい。 (読み替えないと元ファイルを壊します。)

  • a987654
  • ベストアンサー率26% (112/415)
回答No.6

>データの数は4000… このことからEXCEL2007と断定して回答します。 (2003等は256列が仕様の最大ですのでこの質問が不成立。 本当にこんなことをやっているのでしょうか? ファイル1の列方向に4000件かつ1セルの文字と数値を付けた データの持ち方、しかも使う行数は現時点で6行、教科が増えても 10行程度であり甚だ疑問ですが、次の機会からはファイル1 のような作り方をしないようにしましょう。 VBAの方法は他の方が書かれていますので、作業用シートを 使った方法を示します。 1.ファイル1にて1~6行を選択(行表示を左クリックのまま   1~6を選択) 2.1.の選択状態で 右クリック→"コピー" 3.作業用シート(SHEET3とします)に移り A1セルで右クリック   "型式を選択して貼り付ける" 4."値"と"行列を入れ替える"の2箇所にチェックを入れ"OK" ここまででA~E列4000行のデータになっている。 5.下記のように数式を設定   F1セル =A1   G1セル =IF(B1="","",LEFT(B1,2))   G1セルをH1~J1にオートフィル   K1セル =IF(B1="","",VALUE(SUBSTITUTE(B1,G1,"")))   K1セルをL1~N1にオートフィル   ここの数字を文字で扱うならば    K1セルを =IF(B1="","",SUBSTITUTE(B1,G1,""))   として下さい。 6.F1~N1を必要なだけ下方にオートフィル 7.SHEET3からファイル1に移り   ・B1~E1セルに固定で国語 算数 理科 社会 を入力   ・A2セルに =+Sheet3!F1   ・B2セルに    =IFERROR(OFFSET(Sheet3!$J1,0,MATCH(B$1,Sheet3!$G1:$J1,0)),"")    B2セルをC2~E2にオートフィル 8.A2~E2を下方に必要なだけオートフィル 以上です。 冒頭にも述べましたが、ファイル1のような表の作り方はすべきでは ないことを重ねて進言します。

kunikunisa
質問者

お礼

ありがとうございます! データ数4000に関する説明が不十分でした・・・ 140人×(最大)10教科×3年分という意味です。 バイト先で上からある日配られてきた資料なので詳しいことは分かりませんが…とりあえず適当に並べられているようです。 他の方の方法と同様に試してみます。

回答No.5

「算数」と「数学」は考えませんでした エラー処理もしませんでした A,B列は生徒A、C,D列は生徒B・・・ 同様にA列の8行目以降に並んでいるとします。 B8セルに =INDEX($B$1:$H$5,MATCH(B$7,INDEX($A$1:$G$5,,ROW(A1)*2-1),0),ROW(A1)*2-1) 右へ 下へオートフィル 添付図参照。

kunikunisa
質問者

お礼

ありがとうございます! 画像も入っていて凄く分かりやすいです。

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

行1と書かれているのは1行目には項目名が書かれているのですから2行目からデータがあるとします。 ファイル1とありますのはシート1であるとします。 そこでお望みの表はシート2に作成するとします。 1列目には科目名が有るとします。 A2セルには次の式を入力し下方にオートフィルドラッグします。 =IF(INDEX(Sheet1!$1:$1,ROW(A1)*2-1)=0,"",INDEX(Sheet1!$1:$1,ROW(A1)*2-1)) B2セルには次の式を入力し右横方向にオートフィルドラッグしたのちに下方にもオートフィルドラッグします。 =IF(OR(B$1="",$A2="",COUNTIF(Sheet1!$1:$1,$A2)=0),"",IF(COUNTIF(INDEX(Sheet1!$A:$XX,1,MATCH($A2,Sheet1!$1:$1,0)):INDEX(Sheet1!$A:$XX,1000,MATCH($A2,Sheet1!$1:$1,0)),B$1)=0,"",INDEX(Sheet1!$A:$XX,MATCH(B$1,INDEX(Sheet1!$A:$XX,1,MATCH($A2,Sheet1!$1:$1,0)):INDEX(Sheet1!$A:$XX,1000,MATCH($A2,Sheet1!$1:$1,0)),0),MATCH($A2,Sheet1!$1:$1,0)+1)))

kunikunisa
質問者

お礼

ありがとうございます! サンプルデータを用いて試して見ようと思います!

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

何がしたいのか、文章で表現してみること。 エクセルの質問なんだからバージョンぐらい書くこと 20003までなら256列しか使えず、データ数4000が4000人(ならば)はありえないだろう。4000セル? ーー 生徒(人別)に見て 「縦のものを横にする」だけのことか。 ーーー 2つのブックのシートのデータを比べたいのか。 1つから2つめを導出したいのか >ファイル1のデータから必要な数値を抽出して ファイル2のデータに移し変えたいのですが からはそう取れる。 >名称とデータ数が異なる場合があることもあり なら2のブックも既に存在するのかな。 ではどうするのか。 >「要するに」、なんていっているが、どうしたいのかわからない。 質問の文章を読み返して、考えてみること。 ーーー 一般に表の組み換えは関数では複雑になる。全セルに数式を埋め込むことになり、データ数ガ多いとエクセルの動きが重くなるとおもう。 形式を選択して貼り付けー行列を入れ替える、では対処できないのか。 == 結局VBAでも出来る人の考える課題と思う。 ブック1から質問で下の方の形式に直すのは極簡単なVBAで可能。 質問者は、匂いだけ嗅いで。 標準モジュールで Sub test01() Dim sh1, sh2 As Worksheet Set sh1 = Worksheets("Sheet1") Set sh2 = Worksheets("Sheet2") '--最右列を捉える c = sh1.Range("IV2").End(xlToLeft).Column MsgBox c k = 2 'シート2でだい2行から書き出し For j = 1 To c 'A列から最右列まで sh2.Cells(k, "A") = sh1.Cells(1, j) '生徒名書き出し For i = 2 To 8 '7科目以内と仮定 If sh1.Cells(i, j) = "" Then Exit For 'その列で空白セルに '空白セルに出くわすと次の列の処理へ sh2.Cells(j + 1, i) = sh1.Cells(i, j) Next i k = k + 1 '次はシート2の次の行に書き出し Next j End Sub これは簡単のためSheet2に書き出している。ブック2のシートにブック1のシート2結果をコピペすると質問のようになる。

kunikunisa
質問者

お礼

4000に関する説明は上のとおりですが、やはり自分でも読み返してみると支離滅裂ですね…申し訳ありません。アドバイスありがとうございます。地道にひとつずつ方法を試してみようと思います。 念のため WindowsExcel2007において、2つのブックが存在し、書式は固定です。 正しくはブック1からブック2の書式で指定されている項のデータを抜き出すのが目的でした。

noname#204879
noname#204879
回答No.2

[回答番号:No.1この回答への補足]へのコメント、 》 だからMATCH関数が使えないみたいです それは貴方の勝手な思い込みです。ナントカとハサミは使いよう、と申します。 下の例では、簡単のために、別「ファイル」でなく、同一シート内のハナシにしていますが、「MATCH関数が使え」ています。ちなみに、セル A3 は「数学」でなく「算数」に改竄しています。(^_^)    A   B   C   D   E   F   G   H 1 生徒A   生徒B   生徒C   生徒D 2 国語  27 国語  34 国語  54 算数  34 3 算数  36 家庭  25 算数  23 理科  23 4 理科  55 理科  44 理科  21 英語  44 5 社会  87 社会  33 社会  32 6 英語  54    J   K   L   M   N   O   P 1     国語 算数 理科 社会 英語 家庭 2 生徒A  27  36  55  87  54 3 生徒B  34     44  33     25 4 生徒C  54  23  21  32 5 生徒D     34  23     44 K2: =IF(ISERROR(VLOOKUP(K$1,OFFSET(INDIRECT(ADDRESS(1,MATCH($J2,$A$1:$H$1,0))),,,10,2),2,FALSE)),"",VLOOKUP(K$1,OFFSET(INDIRECT(ADDRESS(1,MATCH($J2,$A$1:$H$1,0))),,,10,2),2,FALSE))

kunikunisa
質問者

お礼

ありがとうございます。 自省した上でmikeさんの方法を試してみようと思います。 お手数かけて申し訳ありません。

  • yokomaya
  • ベストアンサー率40% (147/366)
回答No.1

勿論ありますよ。 まず、空いている列を作業列として使いMATCHでデータの有無を調べます。 次にそれで得た行番号を用いてINDEX等で実データを抜き出すんです。 ただ4000だと同姓同名など考慮が要りますね。 ちなみに縦横がややこしいなら、条件貼付けの中に行列入れ替えがありますからそちらを先にすれば、シンプルになるかも。

kunikunisa
質問者

補足

>>yokomayaさん ありがとうございます。 ですが、ここで質問文の補足、というか重要なことを間違えていました。一番目のファイルは↓が正しいです。    A列  B列  C列  D列  E列   F列    生徒A     生徒B     生徒C  行1 国語  27   国語   34  国語   54  行2 数学  36   家庭   25  算数   23  行3 理科  55   理科   44  理科   21  行4 社会  87   社会   33  社会   32 行5 英語  54  だからMATCH関数が使えないみたいです…

関連するQ&A

  • エクセルの質問です。

    エクセル2003を使用しています。 元データには   A   B(国語点数) C(算数点数) D(社会点数) E(理科点数 F(英語点) G(合計) 1 名前(1)   90        85        70       100      20    365 2 名前(2)   85        20        40       70       50    265    3 名前(3)   50        90        60       70       80    350 というデータを     A    B    C 1 名前(1)  国語  90 2        算数  85 3        社会  70 4        理科  100 5        英語  20 6        合計  365 7 名前(2)  国語  85 8        算数  20 9        社会  40 10       理科  70 11       英語  50 12       合計  265       ・       ・       ・ となるように表示していきたいのですが… ただのセルのコピーでは人が連続してコピーできませんでした。 何かいい方法があるかたはご教授ねがいます。 よろしくお願いします。   

  • データの集計・表示について

    エクセルやgoogleスプレッドシートで、下記のようなデータが入力されていたとします。 【元データ(シート)】         A B C D E F 1行目・・・ 山田 国語 英語  理科  社会  音楽 2行目・・・ 鈴木 理科 社会  英語  数学  国語 3行目・・・ 山田 数学 国語  英語  音楽  社会 4行目・・・ 山田 社会 英語  音楽  理科  数学 上記のデータが入力されているシートから、山田さんのデータのみを別のシートへ下記のように 集計?表示?するような関数ってありますでしょうか? 【作りたいデータ(シート)】 山田のデータのみのシート        A B C D E 1行目・・・国語 英語  理科  社会  音楽 2行目・・・数学 国語  英語  音楽  社会 3行目・・・社会 英語  音楽  理科  数学 希望としては、元データシートに5行・6行とどんどんデータを入力をしていく度に、 元データシートA列の名前で判断をし個人別で別シートにデータを1行目から順に並べたいです。 このような事は可能でしょうか? いろいろと調べてみましたがうまく調べられずわからなかったので、 質問させていただきました。 わかる方いらっしゃいましたら、回答をお願いいたします。

  • エクセル2列に入っているデータの重複を無視したい

    エクセルのバージョンは2003です。 A列2文字、B列2文字の熟語が入っているときに 他の列に、入れ替わってかぶっているものを削除し、 取り出す方法はありますか。 2列のデータが入れ替わっている行も、同じ行もカブリと考えます。 データ例 A  B 算数 国語 算数 理科 松本 佐藤 桑田 竹内 年月 金曜 国語 算数 斉藤 米山 金曜 年月 杉本 長谷 吉岡 西川 ・  ・   ・  ・   ・  ・   ・  ・   というようなデータがたくさんあるときに 1行目の算数 国語と3行目の算数 国語 5行目の国語 算数 の場合は1行目の算数 国語のみ残し、 5行目の年月 金曜と8行目の金曜 年月の場合は 5行目の年月 金曜のみ残すということです カブリのない松本 佐藤や桑田 竹内などはそのまま残したいです。 ちなみに、このようなカブリが「どこで起こっているか」については http://okwave.jp/qa/q6697902.htmlにて 教えていただきました D1に=A1&B1 E1に=B1&A1 で「入れ替わり」を是正したリストを用意し、 C1に=IF(COUNTIF(E:E,D1),MATCH(D1,E:E,0),"") を入れることでどこでカブッているかわかる大変便利な式で助かりましたが 次の作業として、 カブッている場合に、カブっているものはひとつだけ残す (フィルタオプションの設定で「重複するレコードは無視する」で 残るようなイメージ)ということがしたいのですが、 そんなことは可能なのでしょうか。 カブリ部分の昇順で削除しようとしてみましたが 後ろのほうにあるとも限らず、断念しました。 さすがにそんな方法はないか…と思っていますが こちらの皆さんの博識に期待して、よろしくお願いいたします。

  • Excel VBA 検索して該当行を抽出

    はじめまして、下記のように、Excelでマクロを組みたいのですが 組み方がわかりません。 ご教授願えませんでしょうか。 MS Ofiice2010 生徒数500名ほど シート1には生徒の生徒番号、氏名などがあります。      A     B     C     D 1 生徒番号   氏名   備考 2 120001     田中 3 120002     山田  試験時休み 4 T120009    相田   転入 シート2には生徒の成績表:生徒番号、氏名、国語、算数、理科、社会 生徒番号でソートされていません。      A     B     C     D     E     F    1 生徒番号   氏名   国語   算数   理科   社会   2 120001     田中   80    65     65     75 3 T120009    相田   90    85     80     80 シート1の生徒番号でシート2生徒番号を検索して、該当したら成績を シート1の検索した生徒番号のD列以降にコピーしたいのですが      A     B     C     D     E     F     G 1 生徒番号   氏名   備考   国語   算数   理科   社会 2 120001     田中         80    65     65     75 3 120002     山田  試験時休み 4 5 10 T120009    相田   転入    90    85     80     80 お手数ですが、ご教授願えますでしょうか。 よろしくお願いいたします。

  • 参照関数を教えてください。

    エクセル2003sp2をXPで使用しています。 たとえば。     Aさん  Bさん  Cさん  Dさん 国語   1    3    4    2 算数   2    4    1    3 社会   4    1    3    2 理科   3    2    4    1 ↑のようなランキングの数表があるとして。その横に Aさん'   Bさん'   Cさん'   Dさん'  国語   算数    理科    社会  算数   理科    社会    国語  理科   社会    国語    算数  社会   国語    算数    理科 ↑のようにランキング順に並べ替えし、 同時に左端のラベルを引っ張ってきたいのですが。 LOOKUPやVLOOKUPは「昇順」というのがキーワードのようで 『Aさん'』の真下に 【=VLOOKUP(1,B$2:B$5,1,0)】と入れても【1】が出。 【=LOOKUP(1,A$2:A$5,B$29:B$49)】と入れると【#N/A】が出ます。 縦に20前後、横に90前後とデータがちょっと多いため ランキングを個々に並び替えることなく一発表示させたいです。 どんな数式を入れてあげればよいのでしょうか?

  • エクセルのデータ比較

    シート1のA行のデータとB行のデータをすべて比較して、同じデータがあれば C列にそのデータを書き出したいのですが、どうすればよろしいのでしょうか。 行数(比較するデータの数)はそれぞれ数千行あります。 例(a~hはデータです) シート1     A列 B列 a c b d  c f d h の場合、比較した結果をC列に次のように表示させます。 A列 B列  C列 a c c b   d d c f d h どなたかよろしくご教示くださるよう、お願いします。

  • excel 2003 数値の1次元配置を2次元へ

    質問します! 下表(1)のように並んでいる数字を,下表(2)のようにするにはどうすればいいですか? 宜しくお願いします!! <表の説明> 表(1)はある生徒の,ある季節の,ある科目のスコアを表すものとします。 A~Cは春,D~Fは夏,G~Iは秋とします。 A,D,Gは英語,B,E,Hは数学,C,F,Iは国語とします。 1,2,3,4,・・・は生徒それぞれ(出席番号とします)を表し,各生徒の春,夏,秋における英語,数学,国語のスコアが表(1)中に記載されています。 例えば,C3は出席番号3番の,春における国語のスコアとなります。 この表(1)を,生徒それぞれについて,春夏秋での英数国のグラフを作りたいのです。 そのために表(2)が必要と考えています。 すなわち,表(2)の「1,2,3」行は出席番号1番のデータを表しており,A列は英語,B列は数学,C列は国語で,1行目は春,2行目は夏,3行目は秋です。 続いて4,5,6行目は出席番号2番のデータ,7,8,9行目は出席番号3番のデータとなります。 例えば,C7は出席番号3番の,春における国語のスコアとなります。 このように,1行でまとめられていたデータを3行ごとに変換したいのです。 コピペで対応できるかもしれませんが,データの数が膨大なので,関数とかオートフィルを使って自動でできる方法を探しています。 <表(1)>   A B C D E F G H I 1  2 3 1 4 5 6 3 2 2 2  4 3 2 2 3 2 1 5 6 3  3 4 6 6 3 2 1 2 3 4     (以下同様) <表(2)>   A B C D E F G H I 1  2 3 1 2  4 5 6 3  3 2 2 4  4 3 2 5  2 3 2 6  1 5 6 7  3 4 6 8  6 3 2 9  1 2 3 10 (以下同様)

  • エクセル2列に入っているデータのカブリを探したい

    A列2文字、B列2文字の熟語が入っているときに 他の列に、入れ替わってかぶっていることを見つける方法はありますか。 エクセルのバージョンは2003です。 データ例 A  B 算数 国語 松本 佐藤 桑田 竹内 年月 金曜 国語 算数 斉藤 米山 金曜 年月 杉本 長谷 吉岡 西川 ・  ・   ・  ・   ・  ・   ・  ・   というようなデータがたくさんあるときに 1行目の算数 国語と5行目の国語 算数 4行目の年月 金曜と7行目の金曜 年月を 「カブリ」と考えて 見つけたいと思っています ひとつひとつ検索する以外で簡単な方法はありますか。 他の列に印がつくとか、見つかる方法は問いません よろしくお願いいたします。

  • エクセルで規則的に列を入れたいのですが・・・

    宜しくお願いします。 エクセル2003で規則的に列を挿入したいです。 例えば ============================= A   B  C  D 算数  国語 社会 ============================== という列があり、A列とB列、B列とC列の 間に10行くらいずつ列を挿入したいです。 列が100行くらいの中に全て7列ずつ挿入したいので 普通にやると時間がかかってしまいます。 なにかいい方法ないでしょうか? 教えて頂ければと思います。 宜しくお願いします。

  • エクセル関数について

    エクセルで重複に関する質問です。 [元データ] A      B       C        会員番号 氏名     選択コース 1111   山田一郎  英語 1212   鈴木恵子  英語 1323   佐藤次郎  算数 1111   山田一郎  国語 1212   鈴木恵子  算数 1212   鈴木恵子  国語 という表があるとします。(実際のデータはもっとある) 山田さんは英語と国語の2コースを選択。 鈴木さんは英語と国語と算数の3コースを選択。 佐藤さんは算数だけを選択。 というわけです。 ここで、D列に、 A      B       C          D     会員番号 氏名      選択コース   総選択内容 1111   山田一郎   英語       英語・国語 1212   鈴木恵子   英語       英語・国語・算数 1323   佐藤次郎   算数       算数のみ 1111   山田一郎   国語       英語・国語 1212   鈴木恵子   算数       英語・算数・国語 1212   鈴木恵子   国語       英語・算数・国語 という表示をさせたいのですが、 どうすればいいでしょう? いろいろあると思うのですが、 作業させる人がPC操作が苦手なので、 元データを貼り付けただけで、 自動的にD列が表示されるようにしなければならないのです。 ピポットやマクロなどは使えないのです。 毎回私がやってあげられないので、 関数のみで、(勿論、隠しシートで関数を組み合わせることになると思いますが)、 あるいは、とにかく作業させる人が何もしないのに元データを貼り付けただけで、 D列が自動的に表示される、という状態にする方法があれば、どうか教えてください。 よろしく御願いします。

専門家に質問してみよう