Excelマクロ初心者です。どうぞよろしくお願いいたします。
各営業所のデータが入ったエクセルシートを所定のフォルダに入れ、同じフォルダ内にある「サマリー表」にデータを集計するマクロを作成しており、似たような事例が載っていた参考書を見ながら試行錯誤中です。
Cドライブの「4月営業所まとめ」というフォルダ内に各営業所のエクセルシートを入れれば、自動的にリンクで集計するところまでは分かったのですが、これの応用で、サマリーシート内のボタンを押してから集計(データをリンク)するマクロを作成しなくてはならず、以下のマクロではなぜうまくいかないのかが、よくわかりません。
Sub ボタン2_Click()
Sheets("サマリー表").Range("B3") = "C:\4月営業所まとめ\[秋葉原営業所.xlsx]Sheet1'!A2"
Sheets("サマリー表").Range("B4") = "C:\4月営業所まとめ\[新宿営業所.xlsx]Sheet1'!A2"
Sheets("サマリー表").Range("B5") = "C:\4月営業所まとめ\[渋谷営業所.xlsx]Sheet1'!A2"
Sheets("サマリー表").Range("B6") = "C:\4月営業所まとめ\[池袋営業所.xlsx]Sheet1'!A2"
Sheets("サマリー表").Range("B7") = "C:\4月営業所まとめ\[上野営業所.xlsx]Sheet1'!A2"
Sheets("サマリー表").Range("C3") = "C:\4月営業所まとめ\[秋葉原営業所.xlsx]Sheet1'!B2"
Sheets("サマリー表").Range("C4") = "C:\4月営業所まとめ\[新宿営業所.xlsx]Sheet1'!B2"
Sheets("サマリー表").Range("C5") = "C:\4月営業所まとめ\[渋谷営業所.xlsx]Sheet1'!B2"
Sheets("サマリー表").Range("C6") = "C:\4月営業所まとめ\[池袋営業所.xlsx]Sheet1'!B2"
Sheets("サマリー表").Range("C7") = "C:\4月営業所まとめ\[上野営業所.xlsx]Sheet1'!B2"
Sheets("サマリー表").Range("D3") = "C:\4月営業所まとめ\[秋葉原営業所.xlsx]Sheet1'!C2"
Sheets("サマリー表").Range("D4") = "C:\4月営業所まとめ\[新宿営業所.xlsx]Sheet1'!C2"
Sheets("サマリー表").Range("D5") = "C:\4月営業所まとめ\[渋谷営業所.xlsx]Sheet1'!C2"
Sheets("サマリー表").Range("D6") = "C:\4月営業所まとめ\[池袋営業所.xlsx]Sheet1'!C2"
Sheets("サマリー表").Range("D7") = "C:\4月営業所まとめ\[上野営業所.xlsx]Sheet1'!C2"
End Sub
どのように直せばよいのか、ほかの方法がわかる方、申し訳ないですが教えてください。
よろしくお願いいたします。
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
Sheets("サマリー表").Range("B3") = "C:\4月営業所まとめ\[秋葉原営業所.xlsx]Sheet1'!A2"
↓
Sheets("サマリー表").Range("B3") = "='C:\4月営業所まとめ\[秋葉原営業所.xlsx]Sheet1'!A2"
No.2
- 回答日時:
No.1です。
>With Worksheets("サマリー表")のところが黄色く反転して動かないです。
ん~~~
今一度こちらでそれぞれのBookを作成し同じコードで試してみました。
(もちろん保存場所はこちらの保存場所のパスに変更して・・・)
ちゃんと動いたのですが、
もしかして、「サマリー表」というシート名が間違っているというコトはないでしょうか?
考えられる原因としては
この程度しか思いつきません。
他の原因ならごめんなさい。
>解説を付けていただければ幸いです。
流れとしては「サマリー表」シートのA3~A列最終行までループさせ、
そのブックを開きB列以降に開いたブックのA2~D2セルの値を代入する。l
といった感じです。
もう一度コードにコメントを記載したものを載せてみます。
Sub Sample1()
Dim i As Long, wB As Workbook
Dim myPath As String, fN As String
'▼保存場所のパスを決める//
myPath = "C:\4月営業所まとめ" & "\"
'▼画面更新を止める//
Application.ScreenUpdating = False
'▼コード記載Bookの「サマリー表」というシート名の・・・//
With Worksheets("サマリー表")
'▼3行目~A列最終行まで//
For i = 3 To .Cells(Rows.Count, "A").End(xlUp).Row
'▼ブック名を「サマリー表」シートのA列 & 営業所.xlsx とする//
fN = .Cells(i, "A") & "営業所.xlsx"
'▼保存場所にブックが存在するか確認し、存在する場合はそのブックを開く//
If Dir(myPath & fN) <> "" Then '←念のため//
Workbooks.Open myPath & fN
'▼開いたBookを変数「wB」に格納//
Set wB = ActiveWorkbook
'▼「サマリー表」シートのi行目B~D列の値に、開いたBookのSheet1のA2~D2の値を代入//
.Cells(i, "B").Resize(, 3).Value = wB.Worksheets("Sheet1").Range("A2").Resize(, 3).Value
'▼wBを保存せずに閉じる//
wB.Close savechanges:=False
End If
Next i
End With
Application.ScreenUpdating = True
MsgBox "完了"
End Sub
※ コードは前回のコードと全く変えていません。m(_ _)m
No.1
- 回答日時:
こんばんは!
「サマリー表」シートにコマンドボタンを配置しているのですね?
まず、↓のコードを標準モジュールにコピー&ペーストしてください。
Sub Sample1()
Dim i As Long, wB As Workbook
Dim myPath As String, fN As String
myPath = "C:\4月営業所まとめ" & "\"
Application.ScreenUpdating = False
With Worksheets("サマリー表")
For i = 3 To .Cells(Rows.Count, "A").End(xlUp).Row
fN = .Cells(i, "A") & "営業所.xlsx"
If Dir(myPath & fN) <> "" Then '←念のため//
Workbooks.Open myPath & fN
Set wB = ActiveWorkbook
.Cells(i, "B").Resize(, 3).Value = wB.Worksheets("Sheet1").Range("A2").Resize(, 3).Value
wB.Close savechanges:=False
End If
Next i
End With
Application.ScreenUpdating = True
MsgBox "完了"
End Sub
次にコマンドボタンのコードを
Private Sub ボタン2_Click()
Call Sample1
End Sub
としてみてください。
こんな感じではどうでしょうか?m(_ _)m
ご回答いただきありがとうございます。
やってみたのですが、「インデックスが有効範囲にありません。」と出て、With Worksheets("サマリー表")のところが黄色く反転して動かないです。(。´Д⊂)うぅ・・・。
素人で難しいプログラミングがわからないので、解説を付けていただければ幸いです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/06/01 14:45
- Visual Basic(VBA) VBAコードを張り付け後のエクセルの進め方 2 2023/02/07 18:24
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/06/04 09:39
- Visual Basic(VBA) エクセルのマクロについて教えてください。 5 2023/06/02 08:44
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/03/07 14:05
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/03/08 09:08
- Excel(エクセル) エクセルのマクロについて教えてください。 3 2023/02/07 14:47
- Visual Basic(VBA) Excelのマクロについて教えてください。 1 2023/03/12 12:16
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/03/12 10:10
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/03/02 08:40
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「取りまとめる」と「まとめる...
-
メンバー退会の挨拶文
-
SNSなどで使われる、n回目とは...
-
仕事帰り社内の人と同じ時間に...
-
雑談たぬきについてなのですが...
-
メールソフト サンダーバード...
-
子どもは作らない方が賢い、ま...
-
中学生でも薬局でTENGAって買え...
-
誘いは難しい
-
自分から話しかけない人ってそ...
-
親に言わないで自分で創価学会...
-
カカオトークのリンクの貼り付...
-
503 Service Temporarily Unava...
-
5ちゃんねるがエロい広告ばかり...
-
「閑話休題」の逆の言葉
-
「あくまで」「あくまでも」の意味
-
職場で顔も見たくない声も聞き...
-
コスモ石油のアプリの機種変後...
-
5ch
-
語尾に笑いが含まれる人の心理 ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「取りまとめる」と「まとめる...
-
意見文 勉強は人生に役立つのか
-
芥川龍之介 の 鼻 で読書感想文...
-
Apple Watch第二世代とApple Wa...
-
「NEVERまとめ」が叩かれないの...
-
メンバー退会の挨拶文
-
SNSなどで使われる、n回目とは...
-
中学生でも薬局でTENGAって買え...
-
仕事帰り社内の人と同じ時間に...
-
コスモ石油のアプリの機種変後...
-
高2の女子です。 修学旅行で、...
-
子どもは作らない方が賢い、ま...
-
誘いは難しい
-
熟女の保険外交員って誘ってま...
-
職場で噂される男女とされない...
-
5ch
-
カカオトークのリンクの貼り付...
-
雑談たぬきについてなのですが...
-
新卒女性です。男性の先輩から...
-
カカオトーク退会すると、エラ...
おすすめ情報