Excel複数シートのデータを1枚にまとめる方法

このQ&Aのポイント
  • Excel初心者の方が複数のシートのデータを1枚にまとめる方法について質問されました。シートの構成が複雑で一人でまとめることが難しいとのことです。具体的なデータの構造について説明があり、1行目に名前・ID・機材名とバージョンを並べ、2行目以降に個人名・ID・機材の使用状況を記入したいという要望です。
  • 質問者はExcelの初心者であり、縦列にデータが並んでいるため、行に移して関連づける方法に困っていると述べています。質問者は本質的にはデータの結合と関連付けが欲しいとしています。
  • Excelを使ったデータの結合や関連付けは、基本的な操作ですが初めての方には難しいこともあります。しかし、Excelには強力なデータ操作機能があり、多くのデータを効率的に処理することができます。質問者はこの問題に取り組むための助けを求めています。
回答を見る
  • ベストアンサー

Excel 複数あるシートのデータを1枚にまとめる

複数あるシートのデータを1枚にまとめたいです。 シートの作りが私にとっては複雑で・・・一人でできそうにもありません。 構成は下記のようになっています。 列Aに機材名・その機材のバージョン・名前・その人の個人IDが書かれています。 ○○システム バージョン2.0 山田 ABCDE 佐藤 ACEDF バージョン2.1 永田 DEFCD ・ ・ ・ ▲▲システム バージョン1.0 渋谷 UUIOP バージョン2.0 ・ ・ ・ という感じです。 こんなデータが50数枚のシートにそれぞれあります。 どのように1枚にまとめたいかといいますと、 1行目に名前・ID・機材名とバージョンずらずらずら 2行目から個人名・その人のID・1行目に書いている機材を使用しているか(使用していたら○をつけたい) という感じです。 Excel初心者で、キャパ越えで困っています。 縦列につらつらつら~っと書かれているせいで、どうこれを行に移して名前とIDと機材名を関連つけるか悩んでいます。 どうか力を貸してください・・・ 宜しくお願いいたします。

  • buri16
  • お礼率24% (134/553)

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

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

No.1・2です! 何度もお邪魔します。 今までの投稿は両方とも無視してください。 少し長くなりますが、今までの二つのコードをまとめてみました。 ただし、前提条件があります。 (1)新しいSheetを挿入し、Sheet見出しの一番左側に配置しておく。 (2)Sheet2以降のデータはA列の1行目からある。(Sheet数はいくつでも構いません) (3)質問文にある「ABCDE」等のアルファベットセルがIDセルで、半角英数で入力してある。 (4)同姓同名は構いませんが、IDに重複はない (5)「機材名」は「○○システム」のように「システム」という語句が入っている。 (6)バージョンセルも「バージョン2.0」のように「バージョン」という語句が入っている (7)元データの並びが変わってしまうがそれでも構わない 以上を踏まえた上での一例です。 Alt+F11キー → 画面左下の「ThisWorkbook」をダブルクリック →  ↓のコードをコピー&ペーストしてマクロを実行してみてください。 (Alt+F8キー → マクロ → マクロ実行です) Sub 各Sheet集計() 'この行から Dim i, j, k, L As Long Dim ws As Worksheet Set ws = Worksheets(1) Dim buf1, buf2 As String ws.Cells.ClearContents ws.Cells(1, 1) = "氏名" ws.Cells(1, 2) = "ID" Application.ScreenUpdating = False For k = 2 To Worksheets.Count For i = Sheets(k).Cells(Rows.Count, 1).End(xlUp).Row To 6 Step -1 If LenB(StrConv(Sheets(k).Cells(i, 1), vbFromUnicode)) = Len(Sheets(k).Cells(i, 1)) Then If Not Sheets(k).Cells(i - 2, 1) Like "バージョン" & "*" And Not Sheets(k).Cells(i - 3, 1) _ Like "*" & "システム" And LenB(StrConv(Sheets(k).Cells(i - 2, 1), vbFromUnicode)) = _ Len(Sheets(k).Cells(i - 2, 1)) Then Range(Sheets(k).Cells(i - 1, 1), Sheets(k).Cells(i, 1)).Insert (xlDown) ElseIf Sheets(k).Cells(i - 2, 1) Like "バージョン" & "*" And Not Sheets(k).Cells(i - 3, 1) _ Like "*" & "システム" Then Sheets(k).Cells(i - 2, 1).Insert (xlDown) End If End If Next i For i = 1 To Sheets(k).Cells(Rows.Count, 1).End(xlUp).Row If Sheets(k).Cells(i, 1) Like "*" & "システム" Then buf1 = Sheets(k).Cells(i, 1) ElseIf Sheets(k).Cells(i, 1) Like "バージョン" & "*" Then buf2 = Sheets(k).Cells(i, 1) End If If Sheets(k).Cells(i, 1) = "" And Sheets(k).Cells(i + 1, 1) = "" Then Sheets(k).Cells(i, 1) = buf1 Sheets(k).Cells(i + 1, 1) = buf2 ElseIf Sheets(k).Cells(i, 1) = "" And Sheets(k).Cells(i + 1, 1) Like "バージョン" & "*" Then Sheets(k).Cells(i, 1) = buf1 End If Next i Next k For k = 2 To Worksheets.Count For i = 1 To Worksheets(k).Cells(Rows.Count, 1).End(xlUp).Row Step 4 If WorksheetFunction.CountIf(ws.Columns(1), Sheets(k).Cells(i, 1) & vbCrLf & Sheets(k).Cells(i + 1, 1)) = 0 Then ws.Cells(Rows.Count, 1).End(xlUp).Offset(1) = Sheets(k).Cells(i, 1) & vbCrLf & Sheets(k).Cells(i + 1, 1) End If Next i Next k L = ws.Cells(Rows.Count, 1).End(xlUp).Row Range(ws.Cells(2, 1), ws.Cells(L, 1)).Sort key1:=ws.Cells(1, 1), order1:=xlAscending For j = 2 To L ws.Cells(1, j + 1) = ws.Cells(j, 1) Next j Range(ws.Cells(2, 1), ws.Cells(L, 1)).ClearContents For k = 2 To Worksheets.Count For i = 4 To Sheets(k).Cells(Rows.Count, 1).End(xlUp).Row Step 4 If WorksheetFunction.CountIf(ws.Columns(2), Sheets(k).Cells(i, 1)) = 0 Then With ws.Cells(Rows.Count, 1).End(xlUp).Offset(1) .Value = Sheets(k).Cells(i - 1, 1) .Offset(, 1) = Sheets(k).Cells(i, 1) End With End If Next i Next k For i = 2 To ws.Cells(Rows.Count, 1).End(xlUp).Row For j = 3 To ws.Cells(1, Columns.Count).End(xlToLeft).Column For k = 2 To Worksheets.Count For L = 1 To Sheets(k).Cells(Rows.Count, 1).End(xlUp).Row Step 4 If ws.Cells(1, j) = Sheets(k).Cells(L, 1) & vbCrLf & Sheets(k).Cells(L + 1, 1) Then If ws.Cells(i, 2) = Sheets(k).Cells(L + 3, 1) Then ws.Cells(i, j) = "○" End If End If Next L Next k Next j Next i Application.ScreenUpdating = True j = ws.Cells(1, Columns.Count).End(xlToLeft).Column Range(ws.Columns(1), ws.Columns(j)).AutoFit End Sub 'この行まで ※ 一旦マクロを実行すると元に戻せませんので別Bookす何枚かのSheetをコピー&ペーストしてマクロをためしてみてください。 以上、ご希望通りの動きになれば良いのですが・・・m(_ _)m

buri16
質問者

お礼

tom04さん こんにちは、はじめまして。 すごく丁寧にアドバイスをくださり、ありがとうございます! 私の説明が稚拙で・・・ 「バージョン」や「システム」といった言葉は必ず含められていないんです。 わかりやすくするために書いたのですが、逆に足手まといになってしまいました・・・ もしよろしければ・・・ もう一度、きちんと画像付で質問をさせていただいたので、見ていただけないでしょうか>< http://oshiete.goo.ne.jp/qa/7079053.html 本当にわがままで申し訳ないです。 週末マクロを勉強してみましたがちんぷんかんぷんでした・・・ 宜しくお願いいたします。

その他の回答 (3)

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.4

 機材名には必ず「システム」という文字列が含まれていて、且つ、機材名が入力されているセル以外のセルに入力されている文字列には「システム」という文字列は、絶対に含まれておらず、 バージョン名には必ず「バージョン」という文字列が入っていて、且つ、バージョン名が入力されているセル以外のセルに入力されている文字列には「バージョン」という文字列は、絶対に含まれていないものと考えれば宜しいのでしょうか?  もし、上記の条件に基づいて、機材名とバージョン名を、文字列と区別する事が出来るのでしたら、以下の様な方法を使う事が出来ます。  複数列の作業列と関数を使った方法です。  今仮に、「補助」という名称のシートのA列~M列を作業列として使用して、「一覧」という名称のシートにデータをまとめるものとします。  まず、補助シートのA2以下に、元データが入力されている50数枚のシートの、各シート名を全て並べて入力して下さい。  次に、補助シートのC1セルに 0 という数値を入力して下さい。  次に、補助シートのC2セルに次の数式を入力して下さい。 =IF(ISNUMBER(MATCH("゛",INDIRECT($A2&"!A:A"),-1)),MATCH("゛",INDIRECT($A2&"!A:A"),-1),"")  次に、補助シートのD1セルに次の数式を入力して下さい。 =IF(ISNUMBER($C1),SUM($C$1:$C1)+1,"")  次に、補助シートのE1セルに次の数式を入力して下さい。 =IF(ROWS($1:1)>SUM($C:$C),"",INDIRECT(INDEX($A:$A,MATCH(ROWS($1:1),$D:$D)+1)&"!A"&ROWS($1:1)-VLOOKUP(ROWS($1:1),$D:$D,1)+1))  次に、補助シートのE1セルに次の数式を入力して下さい。 =IF(ROWS($1:1)>SUM($C:$C),"",INDIRECT(INDEX($A:$A,MATCH(ROWS($1:1),$D:$D)+1)&"!A"&ROWS($1:1)-VLOOKUP(ROWS($1:1),$D:$D,1)+1))  次に、補助シートのF1セルに次の数式を入力して下さい。 =IF(ISNUMBER(FIND("システム",$E1)),ROW(),"")  次に、補助シートのG1セルに次の数式を入力して下さい。 =IF(ISNUMBER(FIND("バージョン",$E1)),ROW(),"")  次に、補助シートのH2セルに次の数式を入力して下さい。 =IF(AND($E2<>"",MAX($F$1:$F2)<MAX($G$1:$G2)),INDEX($E:$E,MAX($F$1:$F2))&INDEX($E:$E,MAX($G$1:$G2))&"゛"&COUNTIF(H$1:H1,"="&INDEX($E:$E,MAX($F$1:$F2))&INDEX($E:$E,MAX($G$1:$G2))&"゛*"),"")  次に、補助シートのI2セルに次の数式を入力して下さい。 =IF(AND(ISNUMBER(FIND("システム",$E2)),COUNTIF($E$1:$E2,$E2)=1),ROW(),"")  次に、補助シートのJ2セルに次の数式を入力して下さい。 =IF(AND(ISNUMBER($G2),COUNTIF($H$1:$H2,$H2)=1),INDEX($E:$E,MAX($F$1:$F2))&"゛"&COUNTIF(J$1:J1,"="&INDEX($E:$E,MAX($F$1:$F2))&"゛*")+1,"")  次に、補助シートのK2セルに次の数式を入力して下さい。 =IF($J2="","",MAX($F$1:$F2))  次に、補助シートのL2セルに次の数式を入力して下さい。 =IF(AND(VLOOKUP(ROW(),$D:$D,1)<MAX($G$1:$G2),COUNT($F2,$G2)=0,MOD(ROW()-MAX($G$1:$G2),2)=1),ROW(),"")  次に、補助シートのM2セルに次の数式を入力して下さい。 =IF(AND(ISNUMBER($L1),COUNTIF($E$1:$E2,$E2)=1),ROW(),"")  次に、補助シートのD1~G1の範囲をコピーして、補助シートのD2~G2の範囲に貼り付けて下さい。  次に、補助シートのC2~M2の範囲をコピーして、同じ列の3行目以下に貼り付けて下さい。  次に、一覧シートのA1セルに「名前」と入力して下さい。  次に、一覧シートのB1セルに「ID」と入力して下さい。  次に、一覧シートのA1セルとA2セルを結合して下さい。  次に、一覧シートのB1セルとB2セルを結合して下さい。  次に、一覧シートのC1セルに次の数式を入力して下さい。 =IF(COLUMNS($C:C)>COUNT(補助!$K:$K),"",IF(IF(COLUMNS($C:C)>1,SMALL(補助!$K:$K,COLUMNS($C:C))=SMALL(補助!$K:$K,COLUMNS($C:C)-1),),"",INDEX(補助!$E:$E,SMALL(補助!$K:$K,COLUMNS($C:C)))))  次に、一覧シートのC2セルに次の数式を入力して下さい。 =IF(COLUMNS($C:C)>COUNTIF(補助!$J:$J,"*?"),"",INDEX(補助!$E:$E,MATCH(INDEX(補助!$E:$E,SMALL(補助!$I:$I,COUNTIF($C$1:C$1,"*?")))&"゛"&COLUMNS($B:C)-MATCH(INDEX(補助!$E:$E,SMALL(補助!$I:$I,COUNTIF($C$1:C$1,"*?"))),$B$1:C$1,0)+1,補助!$J:$J,0)))  次に、一覧シートのB3セルに次の数式を入力して下さい。 =IF(ROWS($A$3:$A3)>COUNT(補助!$M:$M),"",INDEX(補助!$E:$E,SMALL(補助!$M:$M,ROWS($A$3:$A3))))  次に、一覧シートのA3セルに次の数式を入力して下さい。 =IF($B3="","",INDEX(補助!$E:$E,MATCH($B3,補助!$E:$E,0)-1))  次に、一覧シートのC3セルに次の数式を入力して下さい。 =IF(COUNTIF(補助!$H:$H,"="&INDEX(補助!$E:$E,SMALL(補助!$K:$K,COLUMNS($C:C)))&C$2&"゛"&$B3),"○","")  次に、一覧シートのA3~C3の範囲をコピーして、同じ列の4行目以下に(機材の使用者の人数を上回るのに充分な行数となるまで)貼り付けて下さい。  次に、一覧シートのC列全体をコピーして、C列よりも右側にある列範囲に(機材の全バージョンの数の総数を上回るのに充分な列数となるまで)貼り付けて下さい。  後は、補助シートのA2以下に、元データが入力されている、各シートのシート名を並べて入力しますと、一覧シートの表に、使用者の名前とID、及び、機材名とバージョン名が自動的に重複無しに表示され、使用した機材を示す列と、使用者を示す行が交差した処に、丸印が表示されます。

buri16
質問者

お礼

kagakusukiさん こんにちは、はじめまして。 とても丁寧にアドバイスをくださり、ありがとうございます! 画像までくださり・・・! まさにそのような感じで作成したいんです>< しかし私の説明が稚拙で・・・ 「バージョン」や「システム」といった言葉は必ず含められていないんです。 わかりやすくするために書いたのですが、逆に足手まといになってしまいました・・・ もしよろしければ・・・ もう一度、きちんと画像付で質問をさせていただいたので、見ていただけないでしょうか>< http://oshiete.goo.ne.jp/qa/7079053.html 本当にわがままで申し訳ないです。 週末マクロを勉強してみましたがちんぷんかんぷんでした・・・ 宜しくお願いいたします。

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

No.1です! 前回は >1行目に名前・ID・機材名とバージョンずらずらずら・・・ の部分を考慮していませんでした。 結局1行目に 「○○システム バージョン××」のような感じの項目が必要な訳ですよね? そうなると各Sheetが↓の画像になるように手を加える必要があると思います。 そのためには何か規則性を見つけなければならないのですが、 一つだけ!「ID」が半角英数という大前提があれば↓のコードで可能だと思います。 各SheetともA列1行目からデータがあるとして、画像の左側のようになるようなコードだけ載せておきます。 Alt+F11キー → 画面左側の「ThisWorkbook」をダブルクリック → ↓のコードをコピー&ペーストしてマクロを実行してみてください。 (Alt+F8キー → マクロ → マクロ実行です) Sub 各Sheet調整() 'この行から Dim i, k As Long Dim buf1, buf2 As String Application.ScreenUpdating = False For k = 1 To Worksheets.Count For i = Sheets(k).Cells(Rows.Count, 1).End(xlUp).Row To 6 Step -1 If LenB(StrConv(Sheets(k).Cells(i, 1), vbFromUnicode)) = Len(Sheets(k).Cells(i, 1)) Then If Not Sheets(k).Cells(i - 2, 1) Like "バージョン" & "*" And Not Sheets(k).Cells(i - 3, 1) _ Like "*" & "システム" And LenB(StrConv(Sheets(k).Cells(i - 2, 1), vbFromUnicode)) = _ Len(Sheets(k).Cells(i - 2, 1)) Then Range(Sheets(k).Cells(i - 1, 1), Sheets(k).Cells(i, 1)).Insert (xlDown) ElseIf Sheets(k).Cells(i - 2, 1) Like "バージョン" & "*" And Not Sheets(k).Cells(i - 3, 1) _ Like "*" & "システム" Then Sheets(k).Cells(i - 2, 1).Insert (xlDown) End If End If Next i For i = 1 To Sheets(k).Cells(Rows.Count, 1).End(xlUp).Row If Sheets(k).Cells(i, 1) Like "*" & "システム" Then buf1 = Sheets(k).Cells(i, 1) ElseIf Sheets(k).Cells(i, 1) Like "バージョン" & "*" Then buf2 = Sheets(k).Cells(i, 1) End If If Sheets(k).Cells(i, 1) = "" And Sheets(k).Cells(i + 1, 1) = "" Then Sheets(k).Cells(i, 1) = buf1 Sheets(k).Cells(i + 1, 1) = buf2 ElseIf Sheets(k).Cells(i, 1) = "" And Sheets(k).Cells(i + 1, 1) Like "バージョン" & "*" Then Sheets(k).Cells(i, 1) = buf1 End If Next i Next k Application.ScreenUpdating = True End Sub 'この行まで ※ 各Sheetの変更が許されない場合はコードを手直しする必要があります。 尚、その後の新しいシートへの表示はもう少し待ってください。 (外出する用事があるため、時間が取れれば再度挑戦したいと思っています) 上記投稿(各Sheetの変更)がダメならごめんなさいね。m(_ _)m

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

こんばんは! 外しているかもしれませんが・・・ 「システム」は無視しても良いわけですよね? VBAの一例です。 各SheetともA列のみのデータで、 「機材名」(バージョン○○)の下のセルに「氏名」・その下のセルに「ID」が入っているという前提での方法です。 当然のことながらIDに重複はない!(同姓同名があっても構いません)としています。 Sheet数はいくつあっても構いませんので、ワークシートを一つ挿入し 画面左下のSheet見出しの一番左側に配置しておきます。 そうした上で、Alt+F11キー → VBE画面が出ますので、画面左下の「ThisWorkbook」をダブルクリックし、↓のコードをコピー&ペーストしてマクロを実行してみてください。 (Alt+F8キー → マクロ → マクロ実行です) Sub test() 'この行から Dim i, j, k, L As Long Dim ws As Worksheet Set ws = Worksheets(1) ws.Cells.ClearContents Application.ScreenUpdating = False For k = 2 To Worksheets.Count For i = 1 To Worksheets(k).Cells(Rows.Count, 1).End(xlUp).Row If Worksheets(k).Cells(i, 1) Like "バージョン" & "*" And _ WorksheetFunction.CountIf(ws.Rows(1), Worksheets(k).Cells(i, 1)) = 0 Then ws.Cells(1, Columns.Count).End(xlToLeft).Offset(, 1) = Worksheets(k).Cells(i, 1) End If Next i Next k ws.Columns(1).Insert For k = 2 To Worksheets.Count For i = 1 To Worksheets(k).Cells(Rows.Count, 1).End(xlUp).Row If Worksheets(k).Cells(i, 1) Like "バージョン" & "*" And _ WorksheetFunction.CountIf(ws.Columns(2), Worksheets(k).Cells(i + 2, 1)) = 0 Then With ws.Cells(Rows.Count, 1).End(xlUp).Offset(1) .Value = Worksheets(k).Cells(i + 1, 1) .Offset(, 1) = Worksheets(k).Cells(i + 2, 1) End With End If Next i Next k For i = 2 To ws.Cells(Rows.Count, 1).End(xlUp).Row For j = 3 To ws.Cells(1, Columns.Count).End(xlToLeft).Column For k = 2 To Worksheets.Count For L = 1 To Worksheets(k).Cells(Rows.Count, 1).End(xlUp).Row If Worksheets(k).Cells(L, 1) = ws.Cells(1, j) And Worksheets(k).Cells(L + 1, 1) = ws.Cells(i, 1) Then ws.Cells(i, j) = "○" End If Next L Next k Next j Next i ws.Cells(1, 1) = "氏名" ws.Cells(1, 2) = "ID" Application.ScreenUpdating = True j = ws.Cells(1, Columns.Count).End(xlToLeft).Column Range(ws.Columns(1), ws.Columns(j)).AutoFit End Sub 'この行まで ※ ワークシート挿入は一度だけでOKです。 ※ マクロは何度実行されても構いません。 無理矢理やってみましたが、望み通りにならなかったらごめんなさいね。m(_ _)m

関連するQ&A

  • Excel 複数あるシートのデータを1枚にまとめる

    何度かこちらで質問をさせていただいてます。 同じような質問を繰り返してしまい、申し訳ございませんがどうかお助け願いたいです。 複数あるシートを、1シートにまとめ、且つ見やすくしろと上司に言われました。 同一ブック内に70シートあります。 いずれも列Aは空白のままで、列Bからデータが入力されています。 列Bにシステム名・そのシステムのバージョン・名前・その人の個人IDが、 列Cには人数が書かれています。 (画像参照) ▲▲▲ 2.0.1 山田 ABCDE 佐藤 ACEDF 2.1.1 永田 DEFCD ・ ・ ・ ●●● 1.0.1 渋谷 UUIOP 1.0.2 ・ ・ ・ という感じです。 こんなデータが約70のシートにそれぞれあります。 どのように1枚にまとめたいかといいますと、 1行目に名前・ID・機材名とバージョンずらずらずら 2行目から個人名・その人のID・1行目に書いている機材を使用しているか(使用していたら○をつけたい) という感じです。 Excel初心者で、キャパ越えで困っています。 縦列につらつらつら~っと書かれているせいで、どうこれを行に移して名前とIDと機材名を関連つけるか悩んでいます。 どうか力を貸してください・・・ 宜しくお願いいたします。 (なお、画像に使ったデータは参照用ですので、元データではありませんが、元データはこのような形です。)

  • Excel複数シートにあるデータを1枚にまとめる

    Excelブックにある50枚ほどのシートのデータを一枚のシートにまとめたいです。 現在シート1には機材Aを使用している人の名前、シート2には機材Bを使用している人の名前、シート3には機材Cを・・・ というような感じで50枚ほどあります。 これを一枚にまとめます。 列Aに名前、列Bからを機材名としたいんです。 たとえば山田さんが機材Aと機材Cを使用していたとしたら、「山田 ○  ○」という感じで、機材A、Cの列に○が付くようにしたいです。 各シートに記載されている名前は、重複しています。(佐藤さんはシート1にも2にも40にも名前があるというようなかんじです) 列の中に何回も同じ名前が出ることを避けたいです。 出来る限り短時間で終わらせたいのですが、なんせExcelの知識が乏しく困っています。 なるべく早くするよう言われていますので、初心者でも出来るような方法をご存じでしたら教えてください。 ちなみにしようするのはExcel2010です。 大雑把な質問で申し訳ございません、よろしくお願いいたします。

  • excelの複数シートのデータを別シート1枚に表示

    シートa・シートbにデータがあります。 データは現在各20行程度ですが、今後も増える可能性があります。 このデータをシートcにまとめて表示することはできますか? シートcに一緒に表示したうえで、ソートができるとありがたいです。 データベースソフト「アクセス」は持っていません。 バージョンは2013です。 よろしくお願いします。

  • 複数シートのデータを1シートにまとめたい

    添付ファイルのシート名(A商店~C商店)のような同フォームの複数シートのデータをシート名(まとめ)にょうに1シートにまとめたいのですが、いい方法ご存知でしたらお教えください。  パワークエリで出来そうな気もするのですが  ちなみに実作業で使用するファイルはシート数は100くらいあり、行数も100行くらいあります。  EXCELに長けた方、お教えください。

  • 複数のエクセルファイルとシートからデータ抽出したい

    すみませんが教えてください! 複数のエクセルファイルがあり、それぞれに複数のシートがあります。 (ファイルによってシート数は異なります) そのすべてのファイル/シートから、C列の最後の行のデータを抽出し、集計ファイルに書き出したいのです。 書き出しのフォーマットは3セル使用して、ファイル名、シート名、データとしたいです。 すみませんが、よろしくお願いいたします。

  • excel 別シートから複数項目を取得

    こんばんは。エクセルについて質問があります。 今、エクセルで同じ構造で中身の違うデータベースの様なシートを数枚作り、 そこから参照して、別の入力シートにそのデータを引っ張って来るということをしたいです。 調べてみた感じVLOOKUP関数などを使うのかなと思うのですが、 どうもうまいこといきません。 DBのような扱いをしているデータシートの構造は 【データシート】 A1(クラス名)列| B1(番号) 列 | C1(名前:漢字) 列 | D1(名前:かな) 列 | ------------------------------------------------------------------- A2   1-1 |  B2 1番 | C2 鈴木 太郎   | D2 すずき たろう   | のようなデータの入れ方をしており、クラスは1-7まである感じで、 B1の列はA1列のクラスの人数分が連番になっています。 なので、番号は重複してる部分が多いです。 これが複数枚シートあるといった具合です。 データを反映させたいシートも前4列は同じ様な構造をしています。 これにあと複数列足した感じになってます。 【反映させたいシート】 A1(クラス名)列| B1(番号) 列 | C1(名前:漢字) 列 | D1(名前:かな) 列 | E1 別項目 |… -------------------------------------------------------------------------------- A2  3-7  |  B2 2 | C2 田中 次郎   | D2 たなか じろう   | ×× |… ここで名前列に名前(漢字、もしくはかな)を入れるか、 もしくはクラス名+番号ですぐさま該当シートの特定し、 合致するE列以前の残りのデータを全て取得してくる。 反映させたシートのE列などに入れたデータを 今度はデータシートへとリンクさせるという風な プログラムを組みたいです。 こういった具合のエクセルシートを作成したいのですが、 どのようにしたら良いでしょうか? プログラムの様にIF文などを使用する感じになるのでしょうか? それともデータのシートに別でIDなどユニークな値を各々の データに割り振らないとダメでしょうか? また参考として知りたいのですが、 1行に引っ張りたくないデータが多数あっても行単位で3列の分だけ取得して、 1行にある3列分のデータを同じ1行3列に反映させることは可能でしょうか? 説明が下手で意味が解り辛い所もあるかもしれませんが、 回答よろしくお願いします。

  • Excel シート間のデータの照合

    Excelで、シート間のお客様データ(だいたい各1万件)を照合します。下記は現在の照合方法ですが、これでは時間がかかるうえ手作業が多く発生しミスにつながります。頻繁に行う作業なので、関数でも、マクロでも、とにかくもう少し簡単にできる方法がありましたら、どうぞご教授ください。よろしくお願いします!! 【目的】 シート「sheet2008」には2008年度のデータ。シート「sheet2007」には「sheet2008」と同じ形式の2007年度のデータが入っています。シート「sheet2008」に、そのお客様の2007年度の担当営業マンを表示させたいのです。 【例】 列A(電話番号): 011-231-1112 列B(名前):佐藤 一郎 列C(住所):北海道札幌市中央区北1-1-1 列D(担当営業マン):鈴木 新規の列(2007年度の担当営業マン):鈴木  ・「sheet2008」「sheet2007」はほぼ同じデータですが、一部のお客様は名前が変わっていたり、住所が変わっていたりします。  ・「sheet2007」にないお客様が「sheet2008」にあったり、その逆があったりして、各シートのデータ件数は一致しません。  ・名前が同じでも住所が違うデータ、電話番号が同じでも担当営業マンが違うデータは別者として扱います。  ・「顧客ID」のような“必ずユニークな情報”は存在しません。 【現在の照合方法】 (1)「sheet2008」の各列の前に空白列を挿入する。  (データの1行目はタイトル行…B1:電話番号/D1:名前/F:住所/H:担当営業マン)  (データの2行目以降はデータ)     列A(空白行):     列B(空白行): 011-231-1112     列C(空白行):     列D(名前):佐藤 一郎     列E(空白行):     列F(住所):北海道札幌市中央区北1-1-1     列G(空白行):     列H(担当営業マン):鈴木 (2)「sheet2007」を列Aの電話番号で昇順に並べ替える。 (3)「sheet2008」の電話番号が「sheet2007」にあるかを調べる。     A2:「=IF(B2=(VLOOKUP(Sheet2008!$B2,Sheet2007!$A:$D,1,0)),"○","▲")」 (4)(3)で調べた「sheet2008」の電話番号と同じ行にある名前/住所が「sheet2007」にあるかを調べる。     C2:「=IF(D2=(VLOOKUP(Sheet2008!$B2,Sheet2007!$A:$D,2,0)),"○","▲")」     E2:「=IF(F2=(VLOOKUP(Sheet2008!$B2,Sheet2007!$A:$D,3,0)),"○","▲")」 (5)電話番号/名前/住所がすべて一致するデータについて、「sheet2007」にある担当営業マンの値を列Gに表示させる。     G2:「=IF((AND(A2="○",C2="○",E2="○"))=TRUE,(VLOOKUP($B2,Sheet2007!$A:$D,4,0)),"▲") (6)"▲"やエラー値で表示される計算結果について、目視で確認する。 (終了)

  • Excelで複数シートのデータを紐づけまとめる方法

    Windows Excel 2007にて、恐らく多く使われる作業にて、類似質問を探したのですが、見つけられなかったので、どうぞお教えください。 複数シートにある下記のようなm列×n行のデータを、経年的に1シートにまとめています。 ID 項目A(2011) 項目B(2011) 項目C(2011) 1 ○ ○ ○ 2 ○ ○ ○ 5 ○ ○ ○ 8 ○ ○ ○ これを次のようにIDで紐付けして、横に長いシートにまとめたいと思います。例のように、個人毎のIDは一意なのですが、調査年ごとに対象は多く重なるものの、同一ではありません(一緒なら、横に貼りつけるだけで済むのですが)。 ID 項目A(2011) 項目B(2011) 項目C(2011) 項目A(2012) 項目B(2012) 項目C(2012) 1 ○ ○ ○      × × × 3 ○ ○ ○      × × × 5 ○ ○ ○      × × × 9 ○ ○ ○      × × × 今は、行挿入でIDを手作業でそろえているのですが、数千の作業なので、めちゃくちゃ時間がかかります。Access2007もありTryしたのですが、目的が果たせませんでした。Accessで行うべきであれば、カテゴリーを変えて質問を改めさせていただきます。 ひとまず、Excelでこれを行う方法をご存じの方、お教えていただけませんでしょうか。 どうぞよろしくお願いします。

  • 複数シートのデータを行列を入れ替えて統合したい

    現在1ブックに30シートが入っています。 30シートすべて同じフォーマットで A      B 項目名1 データ1 項目名2 データ2 … のように複数行2列の内容です。 この30シート分のデータを行列を入れ替えて1シートに統合し A項目名1       B項目名2       C項目名3 シート1のデータ1  シート1データ2  シート1のデータ3 シート2のデータ1  シート2データ2  シート2のデータ3 … シート30のデータ1  シート30データ2  シート30のデータ3 のようにしたいのです。何ブックもあり、手動では時間がかかるため VBAで処理できたらと思います。 どのようにすればよいか教えていただければ助かります。

  • VBA,二つのExcelのsheetにデータ保存

    VBA初心者です。 皆様のお力をお貸し頂きたく質問させて頂きます。よろしくお願いいたします。 質問内容は、下記になります。 Excelのsheet1には、縦列A,B,C・・・とデータが入っております。 sheet1の例 A B C sheet2は、入力するsheetです。 今回はA列の3行目からとします。 問題は、sheet1の縦の列をA,B,C,Dとすればデータの更新は、出来るのですが sheet1のデータのA,B,C一つ飛んでEまた一つ飛んでGという感じでsheet1のデータを 飛ばしてsheet2に表示、更新(保存)をしたいと思います。 ですので、sheet2のA列の3行目からA,B,C,飛んでE飛んでGとsheet1からデータを 表示させ、さらにsheet2の入力値が変更されると、sheet1のデータが入っている A,B,C,E,Gに更新される仕様です。 sheet1(データが入っています) A , B , C , E , G , 値1 , 値2 , 値3   , 値4 , 値5 sheet2(入力する、入力したデータは、sheet1へ更新される) A列 3行目 、sheet1の値1(A列)が入ります。 4行目 、sheet1の値2(B列)が入ります。 5行目 、sheet1の値3(C列)が入ります。 6行目 、sheet1の値4(E列)が入ります。 7行目 、sheet1の値5(G列)が入ります。 以上です。申し訳ございませんが、ご教授よろしくお願いいたします。

専門家に質問してみよう