• ベストアンサー

Excel データの取り纏め

Excelファイルが10個あります。 それぞれシートが1~20シート。 行の項目は順に「No」「日付」「ID」「名前」・・・ 入力行はシートによりマチマチです。(1件~100件くらい) これを一括で1シートにまとめたいのですが、簡単な方法を教えてください。 また、毎週繰り返しの作業で前回まとめたデータは残し、次の行から追加したいです。 Excel詳しい方、アドバイスお願いします。

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

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

 遅くなりましたが次の様な方法は如何でしょうか?  まず、元データとなるExcelファイルだけを纏めた1つのフォルダーを作っておきます。(データが必要なだけですので、必ずしも大元のファイルである必要は無く、コピーしたファイルであっても構いせん)  次に、下記のVBAマクロを起動させますと、ファイルを選択するためのダイアログボックスが開きますから、そこで「元データファイルをまとめたフォルダー」を開き、関係の無いファイルが紛れ込んでいない事を確認してから、元データとなるファイルの内の1つを選択し、[開く]ボタンをクリックして下さい。  すると、選択したフォルダー内にある全てのExcelファイルの全シート(但し、VBAの構文内で指定されている「元データから除外するシート名」のシートは除く)の、A列~L列の2行目以下のデータが、「一括」というシート名のシートに転記され、一括シートの既存のデータに付け加えられた上で、重複するデータが削除された後、「日付」、「地域」、「ID」に従って昇順で並べ替えられ、A列の「No」欄には、並べ替えられた後の順番で連番が割り振られます。  尚、「一括」というシート名のシートが存在していなかった場合には、新たに一括シートが自動的に作成されます。  それから、もし処理の途中でエラーが発生するとか、ESCキーが押されるなどといった理由により処理が中断する様な事がありますと、処理の途中でコピーしたデータと、マクロを起動させる前からあったデータが混在してしまう事になりますので、区別をつけやすくするためにA列のNoが「●」印付きの赤文字で表示される様になっています。  これは処理が最後まで正常に行われれば、元の表示に戻る様になっています。  又、万が一、処理が途中で中断される様な事があった場合には、「●」印付きの赤文字になっていない行を削除してしまえば、元のデータだけを残す事が出来る訳です。  尚、「●」印付きの赤文字表示を元に戻す際には、該当するセルの書式設定の表示形式を[標準]等に戻して下さい。  Sub QNo8981909_Excel_データの取り纏め() Dim myPath As String' 指定フォルダー名 Dim myFileName As String' 検出したファイル名 Dim myBook(1) As Workbook ' ワークブックの一時格納用の変数 Dim myRange As Range' セル範囲の一時格納用の変数 Dim FirstRow As Long' 項目欄として使用している行 Dim LeftColumn As String' コピー対象とする表の中の左端の列 Dim RightColumn As String ' コピー対象とする表の中の右端の列 Dim SortRefColumn(6) As String ' 並べ替えの基準となるデータが入力されている列 Dim oldNumberFormat As String ' No列の元の表示形式を格納するための変数 Dim oldRows As Long ' No列において最初にデータが入力されていた行数 Dim i As Long, j As Long' 繰り返し処理用の変数 Dim myTemp As Variant ' データの一時格納用変数 Dim myImfo As String' 表示する文字列の一部の格納用変数 Dim myBox As Variant' MsgBoxやInputBoxの返答を一時格納するための変数 Dim myOk As Boolean ' 判定結果の一時格納用変数 Dim oldStatusBar As Variant ' ステータスバーの初期表示のデータを保存しておくための変数 Dim PasteSheetName As String' 貼り付け先として使用するシートのシート名 Dim PasteSheet As Worksheet ' 貼り付け先として使用するシート Dim ExcludeSheet(4) As String 'コピー元として使用しないシートのシート名 PasteSheetName = "一括" ' 貼り付け先として使用するシートのシート名 FirstRow = 1 ' 項目欄として使用している行 LeftColumn = "A" ' コピー対象とする表の中の左端の列 RightColumn = "G" ' コピー対象とする表の中の右端の列 SortRefColumn(0) = "B" ' 並べ替えの際の基準となるデータが入力されている列その1:「日付」が入力されている列 SortRefColumn(1) = "F" ' 並べ替えの際の基準となるデータが入力されている列その2:「地域」が入力されている列 SortRefColumn(2) = "G" ' 並べ替えの際の基準となるデータが入力されている列その3:「店舗名」が入力されている列 SortRefColumn(3) = "C" ' 並べ替えの際の基準となるデータが入力されている列その4:「ID」が入力されている列 ExcludeSheet(1) = "雛型" 'コピー元として使用しないシートのシート名 その1 ExcludeSheet(2) = "コピー元として使用しないシートのシート名 その2" 'コピー元として使用しないシートのシート名 その2 ExcludeSheet(3) = "コピー元として使用しないシートのシート名 その3" 'コピー元として使用しないシートのシート名 その3 On Error GoTo label_Err ' 何かエラーが発生した場合はlabel_Errへ進む With Application oldStatusBar = .DisplayStatusBar ' ステータスバーの初期表示のデータを取得 .DisplayStatusBar = True ' ステータスバーの表示ON .CommandBars("Status Bar").Visible = True ' ステータスバーの表示ON .EnableCancelKey = xlErrorHandler ' Escキーでエラートラップする .ScreenUpdating = False ' 画面描画停止 .Calculation = xlCalculationManual ' 自動計算を停止 End With 'PasteSheetNameと同名のSheetが存在しなかった場合には、貼り付け先のシートを新たに作成 If IsError(Evaluate("ROW('" & PasteSheetName & "'!A1)")) Then Sheets.Add After:=Sheets(Sheets.Count) Sheets(Sheets.Count).Name = PasteSheetName myTemp = Array("No", "日付", "ID", "名前", "金額", "地域", "店舗名") With Sheets(PasteSheetName).Range(LeftColumn & FirstRow) For i = 0 To 6 With .Offset(0, i) .Value = myTemp(i) .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter End With Next i .Resize(2, Columns(LeftColumn & ":" & RightColumn).Columns.Count).Borders.LineStyle = True End With myTemp = Empty End If Set PasteSheet = Sheets(PasteSheetName) ' 貼り付け先として使用するシート ※ まだ途中なのですが、このサイトの回答欄の文字数制限の限度を超えてしまうため、残りは又後で投稿させて頂きます。

その他の回答 (8)

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

 回答No.8の続きです。 With .Range(LeftColumn & .Range(SortRefColumn(0) & Rows.Count).End(xlUp).Row + 1) _ .Resize(myRange.Rows.Count, myRange.Columns.Count) .PasteSpecial Paste:=xlPasteFormats ' 新たなデータの転記先となるセル範囲に書式のみ貼り付け Application.CutCopyMode = False ' コピーモード解除 myRange.Copy ' 元データのセル範囲をコピー .PasteSpecial Paste:=xlPasteValuesAndNumberFormats ' 新たなデータの転記先となるセル範囲に、元データのセル範囲の値と表示形式のみを貼り付け Application.CutCopyMode = False ' コピーモード解除 End With End With End If Next i myBook(0).Close SaveChanges:=False ' 開いたブックをClose Set myBook(0) = Nothing End If myFileName = Dir ' 次のファイル名を参照 Loop Application.StatusBar = "データを統合中...." ' ステータスバーに「統合中」である事を表示 ' 全てのデータが格納されたシートにおける データが存在しているセル範囲を指定 With ThisWorkbook.Sheets(PasteSheetName) Set myRange = .Range(LeftColumn & FirstRow & ":" & RightColumn _ & .Range(SortRefColumn(0) & Rows.Count).End(xlUp).Row) ' ひとまとめにされたデータの内、No.以外の全ての項目が重複しているものを削除 myRange.RemoveDuplicates Columns:=Array(2, 3, 4, 5, 6, 7), Header:=xlYes ' 既存のNoの表示形式を元に戻す If oldRows > 0 Then _ ThisWorkbook.Sheets(PasteSheetName).Range(LeftColumn & FirstRow + 1) _ .Resize(oldRows, 1).NumberFormatLocal = oldNumberFormat ' ひとまとめにされたデータの並べ替え With .Sort With .SortFields .Clear ' 並べ替え範囲の初期化 For i = 0 To UBound(SortRefColumn) ' 設定されている並べ替えの基準の数だけ繰り返し If Not IsError(Evaluate("COLUMN(" & SortRefColumn(i) & "1)")) Then ' 並べ替えの基準となる列番号が設定されているか否かを判定 .Add Key:=Range(SortRefColumn(i) & FirstRow + 1), Order:=xlAscending ' 設定されている列を昇順で並べ替えを行う際の基準列として指定 End If Next i End With .SetRange myRange ' 並べ替えを行うセル範囲を指定 .Header = xlYes ' 指定されたセル範囲の中で1番上の行をタイトル行と見做して、並べ替えの対象から除外する .MatchCase = False ' 大文字と小文字を区別しない .Apply End With myTemp = Empty myTemp = .Range(SortRefColumn(0) & .Rows.Count).End(xlUp).Row ' 最終行の行番号取得 myTemp = 1 / 0 ' 空欄の行の削除 .Range(LeftColumn & myTemp + 1 & ":" & RightColumn & FirstRow + myRange.Rows.Count - 1).Delete Shift:=xlUp ' ↓ 連番を入れる With .Range(LeftColumn & FirstRow + 1 & ":" & LeftColumn & myTemp) .Formula = "=ROW()-" & FirstRow .Value = .Value End With ' ↑ 連番を入れる .Columns(LeftColumn & ":" & RightColumn).Columns.AutoFit ' 列幅の自動調整 End With Application.Cursor = xlDefault ' マウスポインターの設定を標準のものに戻す Application.ScreenUpdating = True ' 画面描画再開 ' ステータスバーを復帰 Application.StatusBar = False Application.DisplayStatusBar = oldStatusBar MsgBox "処理が終了しました", vbInformation, "終了" GoTo labelE label_Err: ' Escキー脱出用 兼 エラー時処理用行ラベル label2: If Err = 18 Or Err = 91 Or Err = 1004 Then If MsgBox(Replace(Replace(myBook(0) Is Nothing, False _ , "中断キーが押"), True, "ファイルの読み込みが中断") _ & "されました。" & vbCrLf & "処理を中止し、マクロを終了します。" _ & vbCrLf & vbCrLf & "※ [いいえ]ボタンは無効です。" _ , vbExclamation + vbYesNo, "中断") <> vbYes Then GoTo label2 End If ' MsgBox() = vbYes Else MsgBox "実行時エラー '" & Err.Number & "' が発生しました。" _ & vbCrLf & Err.Description & vbCrLf & vbCrLf & _ "そのため処理を実行する事が出来ませんので、マクロを終了致します。" _ , vbExclamation, "エラー" End If ' If Err = 18 Or Err = 91 Or Err = 1004 ' 開いているExcelBookの中にマクロによって開かれたものがある場合には閉じる If Not myBook(0) Is Nothing Then For Each myBook(1) In Workbooks If myBook(1).Name = myBook(0).Name Then myBook(0).Close SaveChanges:=False ' 開いたブックをClose Next myBook(1) End If Set myBook(1) = Nothing ThisWorkbook.Activate Sheets("一括").Select Application.ScreenUpdating = True MsgBox "処理が途中で中断されました。" & vbCrLf & PasteSheetName & _ "シートには、処理の途中で新たに貼り付けられた未統合のデータが残っています。" & vbCrLf & _ "No.が「●」印付きの赤文字で表示されている行が、処理開始以前からあったデータです。" _ & vbCrLf & "No.の表示を元に戻すには、セルの書式設定の表示形式を[標準]に設定して下さい。" _ , vbInformation, "Information" labelE: ' 処理終了 On Error GoTo 0 ' エラーの際の動作を標準の設定に戻す ' ステータスバーを復帰 With Application .StatusBar = Empty .StatusBar = False .DisplayStatusBar = oldStatusBar .EnableEvents = True ' イベント動作再開 .EnableCancelKey = xlInterrupt ' Escキー動作を標準の設定に戻す .Cursor = xlDefault ' マウスポインターの設定を標準のものに戻す .Calculation = xlCalculationAutomatic ' 自動計算モードに切り替え .ScreenUpdating = True ' 画面描画再開 End With End Sub  以上です。

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

 回答No.7の続きです。 label1: MsgBox "このマクロは選択したフォルダー内に存在する全てのExcelファイルに記録されているデータを、" _ & vbCrLf & """" & ThisWorkbook.Name & """ファイルの""" & PasteSheetName & _ """シート上に1つにまとめてコピーするという処理を行います。" & vbCrLf & vbCrLf & _ "下の[OK]ボタンを押すと現れる" & vbCrLf & _ "「フォルダーを開き、元データファイルの内の1つを選択して下さい」" & vbCrLf & _ "というタイトルのダイアログボックスにおいてね元データが保存されているフォルダーを開いて、" & vbCrLf & _ "フォルダー内に元データとして使用する事が出来ない余計なファイルが含まれていない事を確認後、" _ & vbCrLf & "元データのファイルの内のどれか1つを選択してから[開く]ボタンを押して下さい。" _ & vbCrLf & vbCrLf & "※ 上記の操作はあくまでフォルダを選択するためのものであり、" & vbCrLf & _ "フォルダー内のどのファイルを選択してもフォルダー内の全てのファイルのデータがコピーされます。" _ & vbCrLf & "  ですから、フォルダー内に、コピー元として使う事が出来ないファイルが含まれていない様に注意して下さい。" _ , vbInformation, "説明" myPath = "" With Application.FileDialog(msoFileDialogOpen) .InitialFileName = CurDir .Title = "フォルダーを開き、元データファイルの内の1つを選択して下さい" .AllowMultiSelect = False With .Filters .Clear ' 「表示するファイルの種類」の設定を初期化 .Add "Excelブック", "*.xls; *.xlsx; *.xlsm", 1 ' 「表示するファイルの種類」を設定 End With If .Show Then ' 元データファイルの1つが選択された場合 myPath = Left(.SelectedItems(1), InStrRev(.SelectedItems(1), "\")) ' 元データファイルの保存先フォルダーのパスを取得 Else ' 元データファイルが選択されなかった場合 myBox = Empty myBox = MsgBox("保存されているExcelファイルが選択されていません。" _ & vbCrLf & "元データとなるファイル""" & "のみ" & """が保存されているフォルダーを" & _ "選択するための基準となる保存済みのExcelファイルを指定しなければ、どのファイルを" _ & "元データとして扱えば良いのか解りませんので、処理を進める事が出来ません。" _ & vbCrLf & "フォルダーを指定し直しますか?" & vbCrLf & vbCrLf & _ "[再試行]:フォルダーの選択のやり直し" & vbCrLf & "[キャンセル]:マクロの終了" _ , vbRetryCancel + vbQuestion, "フォルダーの再選択の可否") If myBox = vbRetry Then GoTo label1 Else Exit Sub End If End If End With ' 指定したフォルダー内に、このマクロが記録されているWorkbookと同名のWorkbooktがあった場合には処理を中止 If Dir(myPath & ThisWorkbook.Name) <> "" Then MsgBox "「指定されたフォルダー内に保存されているコピー元のWorkbook」の中に、" & _ "データの転記先のWorkbookと同名のWorkbookが存在しているため処理を行う事が出来ません。" _ & vbCrLf & "処理の実行を中止します。", vbExclamation, "無効な選択" Exit Sub End If ' 開いているExcelBookの中に指定したフォルダー内に保存されているものが無い事を判定 Set myBook(0) = Nothing myImfo = "" For Each myBook(1) In Workbooks If Dir(myPath & myBook(1).Name) <> "" Then myImfo = myImfo & vbCrLf & myBook(1).Name Next myBook(1) Set myBook(1) = Nothing ' 指定したフォルダー内に保存されているファイルと、現在開いているExcelBookの中に、同名のものがあった場合には処理を中止 If myImfo <> "" Then MsgBox "「指定されたフォルダー内に保存されているコピー元のWorkbook」" & _ "と同名のWorkbookが既に開かれているため処理を進める事が出来ません。" & vbCrLf & _ "処理の実行を中止しますので、もし本マクロによる処理を行いたい場合には、" & _ "現在開かれているWorkbookの内、下記のものを閉じてから再度本マクロを起動させて下さい。" _ & vbCrLf & myImfo, vbExclamation, "処理の妨げとなっている開かれたBook" Exit Sub End If With Sheets(PasteSheetName) oldRows = .Range(SortRefColumn(0) & Rows.Count).End(xlUp).Row - FirstRow If oldRows > 0 Then With .Range(LeftColumn & FirstRow + 1) oldNumberFormat = .NumberFormatLocal .Resize(oldRows, 1).NumberFormatLocal = "[赤]""●""0;[赤]""●""@" End With End If End With With Application .EnableEvents = False ' イベント動作停止 '.Cursor = xlWait ' マウスポインターを[待ち状態]にする End With myFileName = Dir(myPath & "*.xl*", vbNormal) ' 指定フォルダーに存在する1つ目のExcelファイルの名称を取得 ' 指定フォルダーの全Excelワークブックについて繰り返す Do While myFileName <> "" ' 元データがあるワークブックとして指定されたワークブックが '貼り付け先のワークブックでは無い場合に限り処理を行う If myPath & myFileName <> _ ThisWorkbook.Path & ThisWorkbook.Name Then Application.StatusBar = myFileName & " を読み込み中...." ' ステータスバーに処理ファイル名を表示 ' ワークブックを読み取り専用で開く Set myBook(0) = Workbooks.Open(Filename:=myPath _ & myFileName, UpdateLinks:=False, ReadOnly:=True) '全シートに対して繰り返し処理 For i = 1 To myBook(0).Sheets.Count ' 選択したシートのシート名がコピー元として使用しないシート名と同名ではない場合に限りコピーを行う myOk = True For j = 0 To UBound(ExcludeSheet) If myBook(0).Sheets(i).Name = ExcludeSheet(i) Then myOk = False Next j If myOk Then With myBook(0).Sheets(i) Application.StatusBar = myFileName & " の '" _ & .Name & "' シートのデータを転記中...." ' ステータスバーに処理ファイル名とシート名を表示 ' データの転記先の表の項目欄の1行下の書式を、新たなデータの転記先となるセル範囲にコピー Set myRange = .Range(LeftColumn & FirstRow + 1 & ":" & RightColumn _ & .Range(SortRefColumn(0) & .Rows.Count).End(xlUp).Row) ' 元データのセル範囲を取得 End With With ThisWorkbook.Sheets(PasteSheetName) .Range(LeftColumn & "1:" & RightColumn & 1).Offset(FirstRow).Copy ' データの転記先の表の項目欄の1行下のセル範囲をコピー ※ まだ途中なのですが、このサイトの回答欄の文字数制限の限度を超えてしまうため、残りは又後で投稿させて頂きます。

  • -9L9-
  • ベストアンサー率44% (1088/2422)
回答No.6

フォーマットが決まっているのなら、他の方も書いている通り、ひとつひとつ手作業でくっつけてやれば済むこと。その程度のデータ量なら一時間もあればまとめられるでしょう。 なお、そんなデータ管理は本来ならデータベースソフトでやるべきこと。EXCELでやろうとするから訳が分からなくなるんだと思います。

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

対象のfile(エクセルではブック)だけを、それ以外のブックは混じっていないフォルダを作る。 判別とフォルダ移動を手作業に頼るか、名前によってででも、自動的にプログラムで判別、移動できればラッキー。 (1)1フォルダの中のブックを1つずつ取り上げて全部のブックを捕まえて、対象シートをコピーし 集約ブックの1シートに張り付ける。Copy-Paste法。 WEBで「1フォルダの中のエクセルブックをすべて1つずつ捉える方法のコード例はたくさん載っている。 FOR EACHの活用。 今まで同じような質問も相当数あった。 ・各シートの列について項目順序が違う場合や捨てる項目がある場合は、1つに統一するようにVBAプログラムで中間的に編集する。そして張り付ける。 ・集積してきたシートの途中の現在の最終行はEnd(xlup)でとらえられる。その1行下のセル行に張り付ける。この繰り返しを行う。これもWEBにたくさんコード例がある。 ・1つのブック内のシートのデータもFor Eachでとらえられる。邪魔者シートがあれば手作業でのぞいておくか、名前ででも区別できればラッキー。 ・シートのデータの最初に見出し行があれば、Copy段階で、見出しはのぞくよう範囲指定して、コピーする。 ーー WEBに実例があるから、検索語を工夫して、検索し、勉強してみて。 質問者は余りVBAの経験がないようなので、頑張らないと。 ーー 本件は手作業でやるとした場合の行動や判別思考をなぞっているやり方だ。 まずそのステップを順序立てて箇条書きにしてみるとよい。その場合、口で言えばこうなるものをコードではどうなるという質問をここにしないと(丸投げだと)自分も進まないし、このコーナーは、そっくりコードを書けという依頼をする場所じゃない。 -- 各階に各階を区別できる情報(列の付加)も必要かもしれない。 並び順は作業完成後考えたらよい。

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

 前述の様に、解決方法を回答するために必要な情報が何も説明されていないため >簡単な方法 を回答する事は不可能ですが、簡単ではない方法、つまりある程度労力を要する方法であれば御伝えする事が出来ます。  まず、それらのファイルの中の各シートの中で、 >「No」「日付」「ID」「名前」・・・ 等の項目名が入力されている列より下の、実際のデータが入力されている行範囲をまとめてコピーして、 >一括で1シートにまとめたい としているまとめるためのシートの「既存のデータがある一番下の行」よりも下の行に貼り付ける、という作業を、各シート1枚ごとに繰り返して行って、全てのファイルの全てのシートのデータを1枚のシートに貼り付けて下さい。  その際、前回貼り付けたデータが重複して貼り付けられる事になっても構いませんので、「前回どこまでのデータを貼り付けたのか」などという事は気にせずに、項目欄よりも下の行のデータを丸ごと貼り付けてしまって構いません。  又、データをまとめるためのシートの下に追加して貼り付けて行く際にも、列がずれてしまう事と、既に貼り付けられているデータが上書きされて消えてしまう事さえなければ、途中に空欄の行が少々挟まってしまっても構いませんので、貼り付け先の行は必ずしもデータが貼り付け済みとなっている最終行の次の行でなくとも構いません。  そして、全てのデータを1枚のシートに貼り付け終えた後、「『No.』と記されているセル」~「データを貼り付けたセル範囲の中で右下の隅のセル」のセル範囲をまとめて範囲選択して下さい。  次に、「重複の削除」ダイアログボックスを開いて、Excelの[重複の削除]機能を使用して、重複するデータを全て削除して下さい。  その際には、削除対象とする項目の設定を[すべて選択]とし、[先頭行をデータの見出しとして使用する]欄のチェックもONにして下さい。  尚、もしExcelの[重複の削除]機能の使い方を御存知ではない場合には、下記のURLのページを御覧下さい。 【参考URL】  All About > デジタル > IT・インターネット > エクセル(Excel)の使い方 > データベース・データ集計 > 重複しているデータを瞬時に削除する方法   http://allabout.co.jp/gm/gc/376556/  次に、Excelの[ユーザー設定の並べ替え]機能を使用して、[重複の削除]を行った際に既に選択済みとなっているセル範囲のデータを昇順に並べ替えて下さい。  その際には、オプションの「並べ替えの方向」はデフォルトの「行」方向としたままで良く、最優先される項目は「日付」等の項目欄から適時選択し、その他にも優先したい項目がある場合には[レベルの追加]ボタンをクリックして、優先する項目を適時追加して下さい。 【参考URL】  パソコン三昧 やさしい講座 ~第77回 Excel 2007 の並べ替えとオートフィルタ機能~   http://mikisky40.web.fc2.com/kohza/kohza77/kohza77_06.html  

noname#212067
noname#212067
回答No.3

あれだ! 一ファイずつ開いて、新規作成したシートにコピペすればよいのです 一番簡単な方法です! 簡単を必要とする人は、頭より手を動かしましょう!

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

 この様な件の解決方法を回答するために必要な情報が何も説明されていないため、良い方法を回答する事するが出来ません。  この様な質問をする際には、A列、B列、C列・・・のどの列から、A列、B列、C列・・・のどの列までの範囲のデータをまとめたいのかという事と、 >行の項目は順に「No」「日付」「ID」「名前」・・・ とは一体何行目の事なのか、という事を必ず説明しておかなければ、どのデータをまとめれば良いのかなど、他人である回答者には判る筈がありません。  そしてどのデータを取り扱えば良いのか解らない以上、質問者が求めている事を実現する方法など答えられる筈もありません。  質問をされる際には、どの様な状況であるのかという事と、何をしたいのかという事、その際にはどの様な条件があるのかという事、等々の必要な情報を必ず説明する様にして下さい。  今回は、必要な情報の説明が殆どされていないのですから、「補足コメント入力」欄等を利用して上記に有る様な必要な情報を残さず御説明願います。

ss151120
質問者

補足

初めての質問なので言葉足らずで申し訳ありません。 あらためて A列 B列 C列 D列 E列 F列 G列 1行目 No 日付 ID 名前 金額 地域 店舗名 2行目以降、入力データ (シートにより数行~数十行入力されています) これらの入力された複数のシートを 1行目を共通にして入力されているデータ取り纏めたいです。 コピペでは時間がかかるので、一括でできる方法(VBAなど)教えていただけると助かります。

  • aokii
  • ベストアンサー率23% (5210/22062)
回答No.1

Excelファイル10個*20シート*100件=2000行を引用して、1シートにまとめ、必要により並べ替えては?

関連するQ&A

  • エクセルで繰り返しデータ入力

    エクセル初心者です。 Sheet1のH列2から20行に毎日複数のデータ入力があり、その入力データはSheet2に日付順で1日から31日までの行を割り当て、転記される設定は可能でしょうか。翌日は又Sheet1のH列2から20行に毎日複数のデータ入力しこの繰り返しです。

  • エクセルについてです

    エクセルのワークシートに小遣い帳(程度の帳簿)を作っています。 日付順に並んでいますが、任意の項目、たとえば「マンガ代」の行だけを 他の場所に並べて表示出来ますか。 集計ではなく、ただ同じ項目を集めて、一覧したいのです。 分る方、ぜひお願いいたします。

  • エクセルで日付順に自動で行を並び替えする方法

    エクセルで日付順に自動で行を並び替えする方法 今現在エクセルを編集しておりますが、下の2点の操作方法がわかりません。 ・「日付」の項目では、「日付」「テキスト」となります。 こちらを日付(古い日付から)、テキストの順に自動で並び替えたい ・同じ「日付」の項目についてですが今日を過ぎた行(最悪日付だけ)を赤文字にしたい 以上の2点の作業方法を教えてください。

  • 2つのエクセルデータを【ぶつけて】、データ抽出する

    タイトルの件、質問いたします。 下記の図をご覧ください。 図1のエクセルデータ【名簿】と図2のエクセルデータ【名簿】をぶつけて 図3のエクセルデータを作りたいと考えています。 図1のデータには、NOを1~5まで、ふられた、5人の名簿です。 図2のデータには、NO1、NO2、NO4、NO5、NO6までの5人の名簿です。 図2は、図1と比較して、NO3のCさんがいません。さらに、NO6のFさんがいます。 やりたい事は 図1のデータに、図2で追加されている、NO6のFさんを追加したいのです。 ⇒図1になくて、図2に追加されている人を、図1に追加して図3を作りたいです。 これは、数件を例にしていますが、実際は、何千件という中で、進めます。 よって、誰がダブっていて、誰が新しく追加されたかは、手作業では大変です。 これを見つけるやり方を、エクセルで、できないか検討しています。 アクセスでは、簡単にできると聞いた事はあります。 アクセスの場合は、初心者ですので、簡単に説明していただけると幸いです。 【エクセルバージョン】 2002、2003 【アクセスバージョン】 2003

  • 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に1件目A、という項目に野球          B、の項目に守備率          C、の項目に3.11 等入力項目を作り シート2の1行目に 野球 守備率 3.11 という風にデータをコピーする所までは関数等でできたのですが、シート1の入力項目に2件目を入力した時に シート2の2行目に入力した項目を表示、 3件目を入力したときにシート2の3行目を表示・・・ という風に一覧で保存できるようにしたいと考えているのですが、何か良い方法はないでしょうか?

  • エクセル 関数 データを並び替えに合わせる

    元シートC列にID番号があり、EC列まで受注情報や顧客情報が入っています。 C列のIDは重複、空白が混ざっています。 シートはロックをかけており、マクロのみで行の追加が行えます。 同じ顧客が複数受注することがあるので、マクロで行追加をする際には、選択行の真下に選択行を丸々コピペし、受注内容だけを削除するようにしています。 行の削除は管理者のみが行えます。 並び替えはIDや会社名など数列、マクロで行えるようになっています。 しかし顧客情報を変更する場合は複数行忘れずに変える必要等の不便があるので、別シートに各IDのデータを集めた顧客シートを作成し、そこから読み込むようにしました。 ユーザーフォームで元シートから情報を読み込み、編集は顧客情報の部分は顧客シートへ、受注内容は元シートへ記述します。 現時点では元シートへの直入力もできる状態です。 顧客シートはA列にIDを表示し、 =IF(COUNTIF(元!C$5:C6,元!C6)>1,"",元!C6) をドラッグして、元シートにIDが追加されても重複しないIDを表示し、その隣へ顧客情報を並べています。 ところが、元シートをIDやその他の列で並び替えた時、顧客シートで読み込んでいるIDも並び替わってしまい、その横の顧客情報と一致しなくなってしまいます。 1. 元シートを並び替えた時、顧客シートの情報はIDとマッチさせたままにする 2. 元シートに新規追加した際、IDが空白の場合は、仮IDとして自動で【仮1】などを順に振っていく。後で編集可能 顧客シートは現在A列が元シートから引っ張ってきたIDですが、ID列以降横に顧客情報が並べられれば、A列の前に作業列を数行挿入してもOKです。 新規顧客は初めからIDが無いため、ID無しでその他の顧客情報を記録するところから始まります。 しかし顧客情報はIDを基に管理したいので、ID発行までは仮IDを自動で振りたいと思っています。 どうぞ宜しくお願いいたします。

  • 【エクセル】リストに、別のリストからデータを追加

    タイトルの件、質問いたします。 下記の添付ファイルをご覧ください。 【やりたい事】 Sheet1の、住所項目を埋めたいです。 Sheet2には、Aさん、Bさん、Cさんの住所項目が埋まっている情報があります。 これを【NO】などから、ひもづけて⇒Sheet1の住所を埋めたいと思います。 Sheet1や、2は、NO順に並んでいますが、実際はメチャクチャです。 また、件数も、千件ほどあるため、目視ではできません。 ご存知の方、いらっしゃましたら、宜しくお願いします。

  • エクセル2007:シート内のデータの自動転記

    Excle2007を使用しています。 シート1のデータをシート2に自動で転記したいと思っています。 シート1 作業件名ごとにその内容、作業者名が書いてある表。 1行ににつき作業1件 A列:日付 B列:作業件名 C列:内容 D列:作業者名 シート2 作業者ごとに従事した作業をまとめた一覧表で、ひとりにつき1ページ。 表の形式(見た目)はシート1とはまったく別のもの。 作業者ごとに空欄の表が既に作られており、 1ページ目:Aさん 2ページ目:Bさん という風に、1シートに改ページしながら全ての作業者について1ページずつ一覧表になっている。 1ページは25行を使用しており、 Aさん(1ページ目)は1~25行(Bさん(2ページ目)は26~50行)となる。 1ページ目の表のうち、シート1のデータを入れられる行は11~21行。 3件あれば3行使って残り8行は空欄ということになります 日付欄はシート2のA11~A21 件名欄はシート2のB11~B21 内容欄はシート2のD11~D21 シート2には、作業者の住所や生年月日など、シート1にない項目があらかじめ入力されている。 いつもはシート1を入力後に作業者基準で並べ替えをして印刷し、 シート2の該当する作業者のページに手打ちでデータ入力しています。 シート1のデータをシート2の該当箇所に転記するだけなので、シート1が完成した段階で シート2を自動で作れたら作業時間の短縮になると思い、考え始めました。 が、VBAに詳しくないため、どこからどう手をつけたらいいものかわかりません。 お詳しい方、お知恵をいただけましたらと思います。 不足情報等ございましたらご指摘いただけましたら補足をさせていただきますので どうぞよろしくお願いいたします。

  • 各部署から毎日、エクセルの1ブック1シートでデータが送られてきます。

    それを少し編集し部署毎に月別ブックを作りデータを追加しています。ただ月別ブックも1シートのみで、1日から順に末尾行へ追加して、翌月は新たなブックに・・・という仕様です。 1日のデータは1行~数行あり、項目等は変わらす数値が変化し、行単位でのコピぺで対応しています、何とかマクロでできないかと。。。 現在、送られてくるデータを作業シートに読み込み、不要行抽出まではできました。 これを別ブック月報シートのデータ末尾行に追加上書きしていきたいのですが、 既存データ末尾を検索?貼り付けのマクロで四苦八苦です TOT どなたかご指導願います。

専門家に質問してみよう