
いつもお世話になっております。
マクロ初心者です、宜しくお願い致します。
同じフォルダー内のすべてのファイルに対して、同じ処理をしたいのですが、途中で躓いたので、こちらで質問させていただきます。
★対象ファイルの状態
・システムから出力した複数のExcelファイルが存在します。
・各ファイルには複数のシートがあります。
・すべてのシートは同じフォーマットです。
・各シートはデフォルトで保護されています(パスワードはかかっておりません)。
★行いたい処理
・画像のような、ボタンにマクロを登録し、クリックするだけで、自動で処理してくれるツールを作りたいです。
★自分で試したコードは下記になります。
Sub 集計1()
Application.ScreenUpdating = False
Dim mb As Workbook
Dim myfdr As String
Dim fname As String
Set mb = ThisWorkbook
myfdr = mb.Path
' 保護解除のファイルと同じディレクトリにあるファイルを取得する
fname = Dir(myfdr & "\*.xls") ' xls, xlsx, xlsm等が引っかかる
Do Until fname = Empty
If fname <> mb.Name Then
Set wb = Workbooks.Open(myfdr & "\" & fname)
Dim sh As Object
On Error Resume Next
For Each sh In wb.Sheets
With sh.Unprotect ' シートの保護を解除
.Range("B20") = "=A20*0.25" '試算1
.Range("C20") = "=B20*D20" '試算2
End With
Next sh
wb.Save ' 保存
wb.Close ' 閉じる
End If
fname = Dir
Loop
Application.ScreenUpdating = True
MsgBox "すべてのシートを処理しました"
End Sub
上記コードを実行してみた結果、【sh.Unprotect】の部分はすべてのシートに反映されていました。
それに続く、【.Range("B20") = "=A20*0.25"】のような作業は、各ファイルの1番目のシートにしか反映されません。
いろいろ調べてみても、うまくいきませんでしたので、ご教授して頂ければ幸いです。
できれば、詳しく解説などが載っているサイトも教えていただければ嬉しいです。
宜しくお願い致します(o*。_。)oペコッ

No.2ベストアンサー
- 回答日時:
こんにちは
試してはいませんが・・・
>【.Range("B20") = "=A20*0.25"】のような作業は、
>各ファイルの1番目のシートにしか反映されません。
Withステートメントが正しく処理されていないと推測します。
>sh.Unprotect
の戻り値が(↓)では明記されていませんが、多分、戻り値はシートではないのだと推測します。
https://msdn.microsoft.com/ja-jp/vba/excel-vba/a …
・・・ということで、
With sh
.Unprotect ' シートの保護を解除
.Range("B20") = "=A20*0.25" '試算1
.Range("C20") = "=B20*D20" '試算2
~~~
としたらうまくいきませんか?
No.1
- 回答日時:
こうだと思います。
With sh
.Unprotect ' シートの保護を解除
.Range("B20").Formula = "=A20*0.25" '試算1
.Range("C20").Formula = "=B20*D20" '試算2
End With
または
sh.Unprotect ' シートの保護を解除
sh.Range("B20").Formula = "=A20*0.25" '試算1
sh.Range("C20").Formula = "=B20*D20" '試算2
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセルのマクロを使ってメールを送る方法について教えてください 2 2022/03/29 01:36
- Visual Basic(VBA) 【VBA】印刷マクロのループ処理が反映されません 3 2022/08/09 02:15
- Visual Basic(VBA) 特定の文字を含むシートだけマクロ処理をしたい 1 2023/05/22 01:43
- Visual Basic(VBA) VBAが止まります。 2 2022/09/02 14:02
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Excel(エクセル) Excel VBAどこが間違ってますか? 4 2023/07/17 10:04
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
- Visual Basic(VBA) vbaのエラー対応(実行時エラー7:メモリが不足しています) 4 2023/04/24 00:20
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAでシート名を選んで転記する...
-
エクセルVBA Ifでシート名が合...
-
エクセルのシート名変更で重複...
-
VBA ThisWorkbookはSheet*で記...
-
エクセルvba ハイパーリンクに...
-
エクセルのマクロでアクティブ...
-
excelで新規作成されるシート名...
-
VBA 検索して一致したセル...
-
シートの枚数について
-
Codeがわかりません(自作の...
-
原本シート複写してリストの氏...
-
条件によってシート別に振り分...
-
excelのマクロで該当処理できな...
-
エクセルVBA ListBoxの並び...
-
月ごとに作成している日報ファ...
-
VBA WorksheetFunction.SumIfs...
-
excel vba
-
セルを指定してテキストファイル化
-
VBAで、シート間の転記するコー...
-
VBA初心者 シート名などについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
特定の文字を含むシートだけマ...
-
Excelマクロのエラーを解決した...
-
excelのマクロで該当処理できな...
-
ユーザーフォームに入力したデ...
-
実行時エラー'1004': WorkSheet...
-
XL:BeforeDoubleClickが動かない
-
エクセルVBA Ifでシート名が合...
-
実行時エラー1004「Select メソ...
-
エクセルのシート名変更で重複...
-
【ExcelVBA】全シートのセルの...
-
VBA 存在しないシートを選...
-
ブック名、シート名を他のモジ...
-
Excel チェックボックスにチェ...
-
VBA 検索して一致したセル...
-
エクセルで通し番号を入れてチ...
-
シートが保護されている状態で...
-
【VBA】特定の文字で改行(次の...
-
ExcelのVBAのマクロで他のシー...
-
Worksheet_Changeの内容を標準...
-
EXCELVBAを使ってシートを一定...
おすすめ情報