![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
エクセル マクロ で助け下さい!同一フォルダ内にある複数ファイル内の数字を足す!
宜しくお願いします!
同じフォルダ内に複数のエクセルファイルがあります。【xlsとxlsx】が混在して名前がバラバラで約50ファイルあります。
それぞれ1ファイル毎に複数シートあり名前がバラバラです。
集計したいシートは必ず1番左側【シート1】部分にあります。 このシートだけは同じフォームです。
『したいこと』
同フォームの新しいファイルに1〜50ファイルのF1を全て足していく方法 同じ足し算をF300まで繰り返す方法
以上2点どなたかスペシャリストの方教えていただきたいです! 宜しくお願いしますm(._.)m
No.6ベストアンサー
- 回答日時:
こんばんは!
横からお邪魔します。
Sub Sample1()
Dim i As Long, wB As Workbook
Dim myPath As String, fN As String
myPath = "保存場所のパス" & "\"
On Error Resume Next '←念のため//
Application.ScreenUpdating = False
fN = Dir(myPath & "*.xls*")
Do Until fN = ""
Workbooks.Open myPath & fN
Set wB = Workbooks(fN)
For i = 1 To 300
With ThisWorkbook.Worksheets("Sheet1").Cells(i, "F")
.Value = .Value + Workbooks(fN).Worksheets(1).Cells(i, "F")
End With
Next i
wB.Close
Application.DisplayAlerts = False
fN = Dir()
Loop
Application.ScreenUpdating = True
End Sub
フォルダ内のExcelファイルのF1~F300を順次足し算したものを
コード記載ファイルのSheet1のF列に順次表示しています。
こんな感じで良いのでしょうか?
※ 単に合計だけなので、各ファイル(Sheet1、F列)の数値の把握はできません)m(_ _)m
No.8
- 回答日時:
#2の回答者です。
>スタートがF10からF300だとどうなりますでしょうか?
>x = .Worksheets(1).Range("F1:F300").Value 'シートは左端1番目
x = .Worksheets(1).Range("F10:F300").Value 'シートは左端1番目
と変えればよいはずです。
もし、不安になったら、
'ThisWorkbook.Worksheets(2).Cells(j, 1).Offset(, cnt).Value = x(j, 1) 'これは検算のための予備
このブロックを開けて、それぞれの値を貼り付けてみればよいでしょう。
別案:
それはそうと、確か、ブックを開かなくても、シートの1番目が取り出せたはずなのですが……。ADODBで、左端のシートが取れますね。
#7さんの方法と似たものを考えていたので、左端のシート名も取得できると思ったのですが、エラーが出てしまいました。
rc_data = "r" & k & "c2"
v = Application.ExecuteExcel4Macro("'" & myPath & "[" & fn & "]" & Sh_name & "'!" & rc_data)
これで、ファイルを開けなくても、値を取り出せます。
シートはこうしてみたけれども、
sh= Application.ExecuteExcel4Macro("INDEX(GET.WORKBOOK(1,""" & fn & """),1,1)")
なぜか、失敗!(Win10-32 + Excel 2013)
それから、セルに数式を書き出す場合は、相手のファイルをオープンしていないので、フルアドレスになるはずです。(同じフォルダーで参照すればよいのですが)
それで、今度は、ファイルを開けないもう一つの手段として、ADODBでやってみました。
こちらは、万が一、数値なのに数値でないものが混じったら、通常のExcelとは違い、その列は、全部、取れなかったはずです。
それと、微妙にややこしいのは、項目行を1つ取れられるので、全部1行繰り上げになってしまいます。また、最低限のデータベース形式になっていないと、どうなるか分かりません。しかし、ファイルのオープンの煩わしさがありません。ご興味がありましたら紹介します。
No.5
- 回答日時:
No.4 説明
------------------------------------------------------------------------
・このファイルを置いたフォルダの「*.xls」「*.xlsx」のみ集計します。
・他の拡張子と、このファイル自身は無視します。
・数以外が対象のセルに有っても無視します。
・拡張子に大文字が混じっても小文字として扱います。
------------------------------------------------------------------------
「If IsNumeric(Sheets(1).Cells(行, 6).Value) Then」
「データ(行) = Sheets(1).Cells(行, 6).Value」
の「6」の部分が読み込む列番号です。
------------------------------------------------------------------------
「Cells(行, 6).Value = Cells(行, 6).Value + データ(行)」
の「6」の部分が書き込む列番号です。
------------------------------------------------------------------------
もちろん「For 行 = 1 To 300」を変えれば行も変えられます。
------------------------------------------------------------------------
No.4
- 回答日時:
No.3 修正です。
「ChDir ThisWorkbook.Path」が抜けていたため開いてすぐ実行するとエラーになります。
また、このマクロを記入したファイルは一度保存してから実行して下さい。
------------------------------------------------------------------------
Sub Sample()
Dim 行 As Long
Dim ファイル名 As String
Dim データ(300) As Variant
ChDir ThisWorkbook.Path
ファイル名 = LCase(Dir(ThisWorkbook.Path & "\*.*"))
Do While ファイル名 <> ""
行 = 行 + 1
If ファイル名 <> LCase(ThisWorkbook.Name) Then
If Right(ファイル名, 4) = ".xls" Then
Workbooks.Open Filename:=ファイル名
For 行 = 1 To 300
If IsNumeric(Sheets(1).Cells(行, 6).Value) Then
データ(行) = Sheets(1).Cells(行, 6).Value
Else
データ(行) = 0
End If
Next
ActiveWindow.Close
End If
If Right(ファイル名, 5) = ".xlsx" Then
Workbooks.Open Filename:=ファイル名
For 行 = 1 To 300
If IsNumeric(Sheets(1).Cells(行, 6).Value) Then
データ(行) = Sheets(1).Cells(行, 6).Value
Else
データ(行) = 0
End If
Next
ActiveWindow.Close
End If
For 行 = 1 To 300
Cells(行, 6).Value = Cells(行, 6).Value + データ(行)
Next
End If
ファイル名 = LCase(Dir())
Loop
End Sub
------------------------------------------------------------------------
No.3
- 回答日時:
こんなのはいかがでしょうか?
------------------------------------------------------------------------
Sub Sample()
Dim 行 As Long
Dim ファイル名 As String
Dim データ(300) As Variant
ファイル名 = LCase(Dir(ThisWorkbook.Path & "\*.*"))
Do While ファイル名 <> ""
行 = 行 + 1
If ファイル名 <> LCase(ThisWorkbook.Name) Then
If Right(ファイル名, 4) = ".xls" Then
Workbooks.Open Filename:=ファイル名
For 行 = 1 To 300
If IsNumeric(Sheets(1).Cells(行, 6).Value) Then
データ(行) = Sheets(1).Cells(行, 6).Value
Else
データ(行) = 0
End If
Next
ActiveWindow.Close
End If
If Right(ファイル名, 5) = ".xlsx" Then
Workbooks.Open Filename:=ファイル名
For 行 = 1 To 300
If IsNumeric(Sheets(1).Cells(行, 6).Value) Then
データ(行) = Sheets(1).Cells(行, 6).Value
Else
データ(行) = 0
End If
Next
ActiveWindow.Close
End If
For 行 = 1 To 300
Cells(行, 6).Value = Cells(行, 6).Value + データ(行)
Next
End If
ファイル名 = LCase(Dir())
Loop
End Sub
------------------------------------------------------------------------
No.2
- 回答日時:
こんばんは。
>同フォームの新しいファイルに1〜50ファイルのF1を
マクロのあるブックに書いてしまったけれども、それは簡単に直せます。
'書き出しファイル
Set sh1 = ThisWorkbook.Worksheets(1)
ここを適宜、書き換えればよいです。
'//
Sub SummaryMacro()
Dim myPath As String
Dim myFiles()
Dim fName As String, fn As Variant
Dim sh1 As Worksheet
Dim x As Variant
Dim orgDir As String
Dim cnt As Long, i As Long, j As Long
Dim ext As String
orgDir = ThisWorkbook.Path & "\"
ReDim myFiles(49) '0から49まで 50ファイル
'書き出しファイル
Set sh1 = ThisWorkbook.Worksheets(1)
myPath = "C:\Temp\Test1\" 'フォルダー
fName = Dir(myPath & "*.xls?", vbNormal)
Do While fName <> ""
If (GetAttr(myPath & fName) And vbNormal) = vbNormal Then
ext = StrConv(Mid(fName, InStrRev(fName, ".") + 1), vbLowerCase)
If ext = "xlsx" Or ext = "xls" Then
myFiles(i) = fName
i = i + 1
End If
If i > 50 Then Exit Sub
End If
fName = Dir
Loop
Application.ScreenUpdating = False
For Each fn In myFiles
If fn <> "" Then
With Workbooks.Open(myPath & "\" & fn)
x = .Worksheets(1).Range("F1:F300").Value 'シートは左端1番目
For j = 1 To UBound(x)
If IsNumeric(x(j, 1)) Then
'出力は、マクロブックのシートの1 のA1 から
sh1.Cells(j, 1).Value = sh1.Cells(j, 1).Value + x(j, 1)
''ThisWorkbook.Worksheets(2).Cells(j, 1).Offset(, cnt).Value = x(j, 1) 'これは検算のための予備(不要)
End If
DoEvents
Next j
cnt = cnt + 1
.Close False
End With
End If
Next fn
Application.ScreenUpdating = True
MsgBox cnt & "回、合計しました。", vbInformation
End Sub
'//
本来は、ファイルを開けずに計算をするという方法を取りたかったのですが、シート名の確約ができないので、一般的に、Workbooks.Openで開ける方法を取りました。
ありがとうございますm(._.)m
マクロの記録を使って何パターンか作ったのですが上手くいかず悩んでおりました‼️ かなりの時間を節約できそうです(^^) 後学の為に教えていただきたいのですが、スタートがF10からF300だとどうなりますでしょうか? お暇な時にご教授願いますm(._.)m
No.1
- 回答日時:
もしかしたら以下の間違いですか?
-----------------------------------------------------------------------------
『したいこと』
同じフォルダ内の新しいファイルに1〜50ファイルのF1を全て足していく方法 同じ足し算をF300まで繰り返す方法
-----------------------------------------------------------------------------
また、マクロはどのファイルに置くのですか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excel、同じフォルダ内のExcelファイルの特定シートのみを1つのファイルに集約したい 8 2022/09/07 15:12
- システム vba シートの追加について 2 2023/05/17 15:58
- Visual Basic(VBA) 集めたシートのシート名を変更したい。 下記のコードでサブフォルダにあるファイルのSheet3を集めて 6 2022/08/23 10:38
- Excel(エクセル) 【マクロ】マクロが保存されているエクセルとは、別のエクセルのオートフィルターのしぼりをクリアーしたい 2 2022/12/24 08:36
- Excel(エクセル) セルの値からファイルを複数作りたい 2 2022/10/06 12:42
- Excel(エクセル) フォルダAから1つのファイルだけを、フォルダBへを移動するVBAについて 2 2022/07/25 11:45
- Visual Basic(VBA) 複数ファイルのデータの統合について 12 2022/05/14 12:03
- Excel(エクセル) 【マクロ】マクロが保存されているエクセルとは、別のエクセルブックの全シートの非表示列を再表示したい 1 2022/12/24 20:48
- Visual Basic(VBA) エクセルのマクロについて教えてください マクロを実行して 作業フォルダの中にある PDFファイル名を 3 2023/07/01 15:16
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/05/24 08:33
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
複数のCSVファイルを横に並べて...
-
VBAでCSVの1行目だけを書き換え...
-
エクセルの指数を無効にしたい
-
大量のCSVデータを1つのエ...
-
VBAでユーザーフォーム上に参照...
-
CSVファイルをExcelで開くとき
-
PNGファイルの透過色指定の見分...
-
Accessにエクセルからデータを...
-
CSVファイルの結合(重複データ...
-
【マクロ】2度貼付けを実行する...
-
「ほかのアプリケーションを無...
-
エクセルでcsvデータを自動読み...
-
同じ形のCSVファイルを複数同時...
-
ファイル名を今日の日付、時刻...
-
エクセル終了時の保存確認メッ...
-
複数のデータ系列の線の太さを...
-
VBA マクロ実行時エラー’1004Ra...
-
Excelマクロ ファイル名が変わ...
-
別のパソコンでエクセルのマク...
-
コピーしたファイルのマクロを...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルの指数を無効にしたい
-
複数のCSVファイルを横に並べて...
-
excelインポート時の「実行時エ...
-
大量のCSVデータを1つのエ...
-
VBAでCSVの1行目だけを書き換え...
-
CSVファイルの結合(重複データ...
-
複数のcsvファイルを1つのEXCEL...
-
EXCELにcsv形式の外部データを...
-
二つのCSVファイルを照らし合わ...
-
Excel VBAを使った複数のCSVフ...
-
datファイル→csvファイル→datフ...
-
「ほかのアプリケーションを無...
-
【VBA初心者】同じフォルダ内の...
-
EXCELLの動きが遅い
-
VBAでユーザーフォーム上に参照...
-
破損したExcelファイルの内容を...
-
二つのファイル間でデータリン...
-
エクセルの日付への自動変換を...
-
ExcelでCSVファイル読み込み時...
-
エクセルの関数、VBAの使い分け
おすすめ情報
すいません!おっしゃる通りでした(^^)
マクロを同じフォームの新しいファイルに置きたいと思っていますm(._.)m