エクセルデータ上の値を一つのセルにまとめる方法

このQ&Aのポイント
  • 複数のエクセルデータ上特定位置の値を一つのセルにまとめる方法についての質問です。
  • エクセルデータのNO.シートのD6セルには番号が入っており、特定のセルの値を「データ」ファイルのSeet1にまとめたいです。
  • 質問者はExcel2007を使用しており、拡張子が.xlsxのファイルは問題なく使えますが、拡張子が.xlsの場合にエラーメッセージが表示され、困っています。
回答を見る
  • ベストアンサー

複数のエクセルデータ上特定位置の値を一つのセルに2

前回の質問「複数のエクセルデータ上特定位置の値を一つのセルに」に対し、ベストアンサーを教えていただきました。その質問とご回答のポイントは次の通りです。 質問: 大量の同じフォーマットのエクセルファイル(Book1,Book2...)があり、それぞれのBookファイルの「NO.」シートのD6セルには番号が入っています。それぞれファイルでSheet1の特定のセル(例えばB4セル)の値を「データ」ファイルのSeet1にまとめたいです。「データ」ファイルのA列には「NO.」が入力されているので、Bookファイルの値はそれぞれ対応する番号の右側3番目のセルに移したいです。 ご回答: sub macro1()  dim myPath as string  dim myFile as string  dim myNo as variant  dim myRng as range  on error resume next  application.screenupdating = false  mypath = "c:\test\" ’book1,2,3…の保存場所を指定する事  myfile = dir(mypath & "*.xlsx") ’拡張子を正しく指定すること  do until myfile = ""   workbooks.open mypath & myfile   myno = workbooks(myfile).worksheets("No.").range("D6").value   set myrng = thisworkbook.worksheets("Sheet1").range("A:A").find(what:=myno, lookin:=xlvalues, lookat:=xlwhole)   myrng.offset(0, 3).value = workbooks(myfile).worksheets("Sheet1").range("B4").value   workbooks(myfile).close savechanges:=false   myfile = dir()  loop  application.screenupdating = true end sub 現在Excel2007を使っており、Bookファイルが全部(.xlsx)の状態では問題なく使えましたが、ファイルが97-2003の(.xls)バージョンになると、マクロを実行したときに次のメッセージが出ます。「データ.xlsmは既に開いています。2重に開くと、これまでの変更内容は破棄されます。データ.xlsmを開きますか?」 もちろんご回答の中の「myfile = dir(mypath & "*.xlsx") ’拡張子を正しく指定すること」は("*.xls")に変更されている状態です。 何が問題なのか全く分からず、困っています。どなたか教えていただけないでしょうか? よろしくお願い致します。

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

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

はい,ではとりあえず暫定的に Do Until myFile = ""  if myfile <> thisworkbook.name then ’追加   Workbooks.Open myPath & myFile   myNo = Workbooks(myFile).Worksheets("NO.").Range("D6").Value   Set myRng = ThisWorkbook.Worksheets("Sheet1").Range("A:A").Find(what:=myNo, LookIn:=xlValues, lookat:=xlWhole)   myRng.Offset(0, 3).Value = Workbooks(myFile).Worksheets("申込1").Range("D4").Value   Workbooks(myFile).Close savechanges:=False  end if ’追加  myFile = Dir() Loop としてみましょう。

bwcnn017
質問者

お礼

できました!!! 本当に助かりました。 何度もご丁寧にありがとうございました。

その他の回答 (1)

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

寄せられた回答のマクロを適切に手直しできてないのが原因です。 こういうご相談では、教わった回答をコピーして再掲示してもダメです。あなたが「具体的にどこにどう手を入れてミスったのか」、何の説明もされてないからです。 そういうときは、「いま実際にアナタがあなたのエクセルで動かしてるそのマクロ」を、手抜きせずにあなたのエクセルからコピーして全部情報提供してください。 そうすればマクロのどこをミスったのか、それとも前回や今回のご質問で説明できてない/説明し忘れてる何かが問題の原因になってるのか、少しはヒントになるはずです。

bwcnn017
質問者

補足

ご指摘ありがとうございました。 本人の知識が足りなく、大変失礼しました。それでは具体的に抱えている問題を説明させていただきます。 実際の業務で使われているファイルはほとんどエクセル97-2003バージョン(.xls)です。業務で使っているファイルは直接お見せすることができないので、実際の状況になるべく近づけるようにサンプルを工夫しました。 サンプルファイルが入っているフォルダの場所:E:\test サンプルファイル:Book1.xls, Book3.xls, データ.xlsm Book1.xlsとBook3.xlsにはそれぞれ「申込1」と「NO.」ワークシートがあり、「申込1」SheetのD4セルにそれぞれの値、「NO.」SheetのD6セルにはそれぞれの番号が入っています。 教えていただいたマクロを次のように直しました。 Sub macro1() Dim myPath As String Dim myFile As String Dim myNo As Variant Dim myRng As Range On Error Resume Next Application.ScreenUpdating = False myPath = "E:\test\" 'book1,2,3…の保存場所を指定する事 myFile = Dir(myPath & "*.xls") '拡張子を正しく指定すること Do Until myFile = "" Workbooks.Open myPath & myFile myNo = Workbooks(myFile).Worksheets("NO.").Range("D6").Value Set myRng = ThisWorkbook.Worksheets("Sheet1").Range("A:A").Find(what:=myNo, LookIn:=xlValues, lookat:=xlWhole) myRng.Offset(0, 3).Value = Workbooks(myFile).Worksheets("申込1").Range("D4").Value Workbooks(myFile).Close savechanges:=False myFile = Dir() Loop Application.ScreenUpdating = True End Sub このマクロを実行した結果、例のメッセージボックスが現れ、「はい」を押すと何も変化が現れなく、「いいえ」を押すとファイルが閉じられます。 ただし、ファイルの拡張子とマクロを.xlsxに直すと問題なく実行してくれます。 それでは以上の質問に対し、ご指導よろしくお願い致します。

関連するQ&A

  • フォルダ内の特定ブックだけを1つのブックにまとめる

    以前こちらで質問させて頂きましたフォルダ内の特定ブックだけを1にのブックにまとめる方法で、大変助かっていましたがブック名が変更になり、教えて頂いたマクロでは実行できなくなったので自分なりに考えたのですがどうしてもできません。 質問時のブック名は「1_****」と「2_****」で 今回「1_****」だけが「1(3)_****」に変更になりました。 下記のマクロでmyfile = dir(mypath & "1_" & "*.xl*")→myfile = dir(mypath & "1(3)_" & "*.xl*")に変更するのはわかるのですが do until myfile = ""   myfile2 = "2" & mid(myfile,2,99)をどう変更すれば良いかわかりません どなたかお助け頂けませんか? sub macro1()  dim myPath as string  dim myFile as string  dim myFile2 as string  mypath = "c:\test\"  myfile = dir(mypath & "1_" & "*.xl*")  do until myfile = ""   myfile2 = "2" & mid(myfile,2,99)   workbooks.open mypath & myfile   workbooks.open mypath & myfile2   application.displayalerts = false   workbooks(myfile).worksheets("2").delete   application.displayalerts = true   workbooks(myfile2).worksheets("2").move after:=workbooks(myfile).worksheets("1")   workbooks(myfile).close true   workbooks(myfile2).close false   myfile = dir()  loop end sub

  • 複数ファイルのA1だけを抽出して別ファイルにしたい

    すみませんが、教えてください。 特定のフォルダ内に入っているcsvのA1列目のみ抽出して別ファイルにしたく、検索したところ 同じように困っていた方がいたようで、参考にさせていただいたのですが、 以下を実行しても インデックスが有効範囲にありませんと出ます。 各csvファイルのシート名は 1000近くあるファイル全て違い、別々の名前(コード00-000とか)になっています。 (エクセルで開いたとき) お手数ですが、教えていただきたくお願いいたします。 参考にしたマクロです。 Sub macro1() Dim myPath As String Dim myFile As String myPath = "ファイルの場所\" myFile = Dir(myPath & "*.xls") Do Until myFile = "" Workbooks.Open myPath & myFile With Workbooks("集約.xls").Worksheets("Sheet1").Range("A65536").End(xlUp) .Offset(1, 0).Value = myFile .Offset(1, 1).Value = Workbooks(myFile).Worksheets("概要").Range("C3").Value End With Workbooks(myFile).Close savechanges:=False myFile = Dir() Loop End Sub 宜しくお願いいたします。

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

    以前に http://soudan1.biglobe.ne.jp/qa8369459.html でやられている内容なのですが、私の場合はシートすべての[i4」のセル値を一覧でひっぱりたいです。 keithinさんご回答の sub macro1()  dim myPath as string  dim myFile as string  dim w as worksheet  mypath = thisworkbook.path & "\"  myfile = dir(mypath & "*.xls*")  application.screenupdating = false  do until myfile = ""   if myfile <> thisworkbook.name then    workbooks.open mypath & myfile    for each w in workbooks(myfile).worksheets    with thisworkbook.worksheets("Sheet1").range("A65536").end(xlup).offset(1)     .value = myfile     .offset(0, 1) = w.name     .offset(0, 2).value = w.cells(w.rows.count, "C").end(xlup).value              ↑をRange("i4").Value      end with    next    workbooks(myfile).close false   end if   myfile = dir()  loop  application.screenupdating = true end sub にて実施しましたが、ファイル名・シート名は正確に抽出するものの 参照したい「i4」のデータが先頭のシートのi4だけを拾ってしまいます 1.xls、2.xls、3xlsがありそれぞれ名前がばらばらなシート「あ」、「い」、「う」の3つがある。2.xlsには「え」、「お」、「か」のしーとがあると仮定、マクロを実行すると、一覧のエクセルに 1、xls  あ  あのシートi4の値 1、xls  い  あのシートi4の値 1、xls  う  あのシートi4の値 2.xls  え  えのシートi4の値 2.xls  お  えのシートi4の値 2.xls  か  えのシートi4の値 子のようなか形で出力されます い のところには いのシートのi4が、う のところには うのシートのi4が、 抽出されるには構文をどう買えればよいのでしょうか

  • Excel VBA連続コピー、貼付処理について

    特定のフォルダ内に格納されている複数のExcelファイルの「sheet1」シートのデータを 所定のExcelファイルにコピー&ペーストしたいのですが、うまくいきません。 (貼付先のファイルを閉じようとするとエラーが発生します。) どうすればできるようになるでしょうか? ご教授の程よろしくお願いいたします。 -------------------------------------------------------------------- Sub copy_test() Dim myPath As String Dim copyFile As String Dim pasteFile As String Dim n As Long myPath = "C:\copy\" copyFile = Dir(myPath & "*.xls*") pasteFile = "C:\paste\paste_data.xlsx" n = 2 Do Until copyFile = "" Workbooks.Open Filename:=myPath & copyFile Workbooks(copyFile).Worksheets("sheet1").Range("A2:L201").Copy Workbooks.Open Filename:=pasteFile 'Workbooks(pasteFile).Worksheets("paste_data").Active Range("B1").Select Selection.End(xlDown).Select Selection.End(xlToLeft).Select Selection.End(xlUp).Select ActiveCell.Offset(1, 0).Select ActiveSheet.Paste ActiveWorkbook.Save Workbooks(pasteFile).Close False Application.CutCopyMode = False Workbooks(copyFile).Close False n = n + 999 copyFile = Dir() Loop End Sub ---------------------------------------------------------------------------------

  • 複数テキストファイルをエクセルで開く

    度々の質問申し訳ございません。 複数のテキストファイルが入ったフォルダ内のすべてのテキストデータをエクセルの1シートで開きたいです。 他の方の同じような質問の御回答に以下のようなマクロが有りました。 Sub macro1() Dim myPath As String Dim myFile As String Dim n, c, s '初期化 myPath = ThisWorkbook.Path & "\" myFile = Dir(myPath & "*.txt") '受入準備 On Error Resume Next Worksheets.Add before:=Worksheets(1) ActiveSheet.Name = Format(Date, "yyyymmdd") On Error GoTo 0 'ファイルの巡回 Do Until myFile = "" n = n + 1 Cells(n, "A") = myFile 'データの読み出し Open myPath & myFile For Input As #1 c = 1 Do Until EOF(1) Line Input #1, s c = c + 1 Cells(n, c) = s Loop Close #1 myFile = Dir() Loop End Sub これを利用させていただいて、テキストファイルを開いたのですが、こちらのマクロですとテキストデータの1列目しか開く事が出来ません。(図参照) 1列目2列目共に開くには何処を変更すれば良いですか? マクロはまったく理解できないので、何卒宜しくお願い致します。 また、できればエクセルの横方向に開くのではなく、縦方向に開けるようにして頂けると非常にありがたいです。 何卒宜しくお願い致します。

  • 複数のエクセルブックを開かず特定シートのセル抽出

    他の方の質問を参考に自作しましたが動作に時間が掛かる為、教えて下さい。  PCはWin10、エクセル2016、ファイル形式はxlsm  該当フォルダはネットワーク上\\○○○○\Users\ この中に複数ブックが存在  抽出したいデータは全てのブックの「メニュー」というSheetのA100からAO100までを  「集計.xlsm]のSheet1の2行目から抽出結果をA2からAO2までを2行目、3行目とずらして値で貼り付けたい 作成したVBAを見て良い方法をご教授下さい。 Sub 集約() Dim myFolder As Variant Dim fso As Object Dim GetFolder As Object Dim Fol As Object Set fso = CreateObject("Scripting.FileSystemObject") With Application.FileDialog(msoFileDialogFolderPicker) If .Show <> 0 Then myFolder = .SelectedItems(1) End If End With With CreateObject("WScript.Shell") .CurrentDirectory = myFolder End With Set GetFolder = fso.GetFolder(myFolder) For Each Fol In GetFolder.SubFolders Debug.Print Fol.Name Next Set GetFolder = Nothing 'フォルダの場所を変数に入れる Dim Folder_path As String Folder_path = Range("a1").Value '集計先のシートを指定し、変数に入れる Dim w Set w = Worksheets("sheet1") '集計するブックを変数に入れる Dim Merge_book As String Merge_book = Dir(Folder_path & "\*.xlsm*") 'いったん数値をクリア w.Range("b" & Rows.Count).Clear '集計先のシートの1行からスタート Dim n n = 4 '指定したフォルダから、Excelファイルを探す Do Until Merge_book = "" Workbooks.Open FileName:=Folder_path & "\" & Merge_book '見つかったら、A列にファイル名、B列に集計値を入れる w.Range("a" & n).Value = Merge_book w.Range("b" & n).Value = Workbooks(Merge_book).Worksheets("メニュー").Range("a100").Value w.Range("c" & n).Value = Workbooks(Merge_book).Worksheets("メニュー").Range("b100").Value w.Range("d" & n).Value = Workbooks(Merge_book).Worksheets("メニュー").Range("c100").Value    ・・・・・・・・・・・・・・・省略・・・・・・・・・・・・・                         ・ ("ao100").Value w.Range("ap" & n).Value = Workbooks(Merge_book).Worksheets("メニュー").Range '次の行へ n = n + 1 '集計するブックを閉じる Workbooks(Merge_book).Close '次のファイルを探しに行く Merge_book = Dir() Loop End Sub この方法は1つのフォルダ直下に全てのブックを入れないと動かないのでPCの容量に負担が掛かり画面もチラチラし、時間も掛かる為、もっと効率的な方法で作業を行いたいのです。 よろしくお願いいたします。

  • マクロ処理後のファイル名変更について

    マクロでいくつかの処理を行った後、もとのファイル名に 「済+ファイル名」としてファイル名を変更して終了をしたいのですが、 どのようにすればできるのかわかりません。 どなたか教えていただけますか? イメージ) 処理前のファイル名:サラダ.xls、お肉.xls・・・ 処理後のファイル名:済サラダ.xls、済お肉.xls・・・ Dim myPath As String Dim myFile As String Dim w As Workbook Dim s As Worksheet myPath = ThisWorkbook.Path & "\" myFile = Dir(myPath & "*.xls") Do Until myFile = "" If myFile <> ThisWorkbook.Name Then Set w = Workbooks.Open(myPath & myFile) For Each s In w.Worksheets s.Range・・・・・     ・・・・・・・・     ・・・・・・・・ Next w.Close savechanges:=True End If myFile = Dir() Loop MsgBox "完了しました。" End Sub

  • VBAでブック名の拡張子を除去してシートにコピー

    VBA初心者でコード作成で困っております。 下記の通りコードを組みましたが、シート名をブック名に変更して 保存したいのですが、このコードですと拡張子までついてしまいます。 拡張子を除去するためにはどうすればよいでしょうか? アドバイス宜しくお願い致します。 Sub test() 'シート名の変更 Dim MyPath As String Dim MyFile As String Dim Wb As Workbook MyPath = "C:\TEST\" MyFile = Dir(MyPath & "*.xlsx") Do While MyFile <> "" Set Wb = Workbooks.Open(MyPath & MyFile) ActiveSheet.Name = ActiveWorkbook.Name Application.DisplayAlerts = False Wb.Save Application.DisplayAlerts = True Wb.Close (False) MyFile = Dir() Loop End Sub

  • エクセルで複数のブックの一部を抽出する

    エクセルで複数のブックの一部をBOOK1に1行ずつコピーしたいんですが、いろいろ探して近いものは見つけたのですが、元になるブックの1部の列をコピーするブックの行にコピー出来ないでしょうか? merlionXXさんのhttp://oshiete1.goo.ne.jp/qa4969413.htmlこれを参考にして作っているのですが、 課名D16 商品名B20:B39 枚数H20:H39 金額I20:I39 の部分をbook1に1件1行としてコピーしたいのですができますでしょうか? もとのブックの行数は決まっています。 どうか力を貸してください。よろしくお願いします。 Sub test02() Dim MyFile As String, MyPath As String '変数宣言 Dim x As Long, y As Long Dim wb As Workbook, tb As Workbook Dim ka As String Dim sh1, sh2 Set tb = ThisWorkbook MyPath = tb.Path & "\" '自分のパスを取得 MyFile = Dir(MyPath & "*.xls", vbNormal) 'パス内のエクセルファイル Application.ScreenUpdating = False '画面更新停止 Application.Calculation = xlCalculationManual '自動計算停止 Do While MyFile <> "" 'エクセルファイルがなくなるまで If MyFile <> tb.Name Then '自分以外のファイルを対象 Set wb = Workbooks.Open(MyPath & MyFile) '選択したファイルを開く With ActiveSheet ka = .Range("D16").Value '課名取得 x = .Range("B" & Rows.Count).End(xlUp).Row '最終行取得 sh1 = .Range("B20:B" & x).Value '商品名取得 sh2 = .Range("H20:I" & x).Value '数量&金額取得 End With With tb.Sheets("Sheet1") y = .Range("B" & Rows.Count).End(xlUp).Row '最終行取得 y = IIf(.Range("B" & y) = "", y, y + 1) If x >= 20 Then '納品書B20以下にデータがあれば Set myRng = .Range("A" & y).Resize(x - 19, 1) myRng.Value = ka '課名転記 myRng.Offset(, 1).Value = sh1 '商品名転記 myRng.Offset(, 2).Resize(, 2).Value = sh2 '数量&金額転記 End If End With wb.Close (False) '選択したファイルを閉じる End If MyFile = Dir() '次のファイルを検索 Loop '繰り返し Application.Calculation = xlCalculationAutomatic '自動計算停止解除 Application.ScreenUpdating = True '画面更新停止解除 Set tb = Nothing Set wb = Nothing Set myRng = Nothing End Sub

  • ExecuteExcel4Macroでセル値取得

    office2010 あるフォルダにファイルを入れて、ファイルを開かずに対象シートの対象セルの値を取得したいです。 この取得したいセル情報を、変数で指定したいのです。 C:\dataに取得元のファイルが入っています。 このファイル名((1))は、いろいろ変わりますが、中にH4という文字があります。 対象シートのシート名とセルアドレスは、別のファイル(これにマクロがあります) のsettingシートで指定します。 1例ですが、settingシートの B2に11_001 C2にAF9 と設定します。 (1)のファイルで11_001というシートのAF9セル値を取得したいのです。 Dim myPath As String Dim myFile As String myPath = "C:\data\" myFile = Dir(myPath & "*H4*.xlsm") Dim sheetname As String Dim cell As String sheetname = Worksheets("setting").Range("B2") cell = Worksheets("setting").Range("C2").Value ' 'Range("A1") = ExecuteExcel4Macro("'[" & myFile & "]" & sheetname & "'!R9C32") Range("A1") = ExecuteExcel4Macro("'[" & myFile & "]" & sheetname & "'!" & cell & "") 上記で、 Range("A1") = ExecuteExcel4Macro("'[" & myFile & "]" & sheetname & "'!R9C32") は、値取得できます。 このR9C32を変数にする所で、エラーが発生します。 実行時エラー1004と。 いろいろWEB見て、’,スペース等を入れてみましたが、どうしても分からず、 Range("A1") = ExecuteExcel4Macro("'[" & myFile & "]" & sheetname & "'!" & cell & "") の最後のセル指定を、変数で設定する方法を教えて頂きたく。

専門家に質問してみよう