dポイントプレゼントキャンペーン実施中!

いつもお世話になっております。

マクロ初心者です、宜しくお願い致します。

同じフォルダー内のすべてのファイルに対して、同じ処理をしたいのですが、途中で躓いたので、こちらで質問させていただきます。

★対象ファイルの状態
・システムから出力した複数の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ペコッ

「【VBA】同じフォルダーにある全てのファ」の質問画像

A 回答 (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
 ~~~
としたらうまくいきませんか?
    • good
    • 0

こうだと思います。



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
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます!

お礼日時:2018/07/18 17:39

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!