同じシート構成で中身の違うエクセルファイルが複数あります。
これらのエクセルファイルの
0. フォントファミリーの変更(MS PゴシックとMS ゴシックにしたい)
0. フォーム、マクロを除去
を行いたいです。
方法としては、Powershellで回す。VBAで回す。C#でNPOIを使う。あたりを候補にしています。
(1回限りなので何でもいいです。VBAはあまりわからないのですが、対象のオブジェクトがわかればなんとかなるのではないかと思っています)。
シートはどのエクセルも同じ名前で同じインデックスのものが5シートあります。
フォントファミリー以外のフォントのスタイルは変更したくありません。
フォーム、マクロは全て名称は同じです。
どのオブジェクトに対してどのような操作を行えば良いかを教えていただけると助かります。
よろしくお願いします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

回答2件
0
こんなんでどうでしょうか。
bfs配列に対象となるブックのファイル名を入れてください。
あとは全ブック・全セルに対してフォント名を変更します。
オブジェクトも対象にしたいのであれば別途(時間があれば)検討します。
マクロを削除する処理は、ファイル形式をxlsxに変更することで対応しています。
xlsmのままマクロのみを削除したいのであれば、また別途(時間があれば)検討してみます。
あと、すみません、なぜか途中でエラーが発生します(変換は最後まで行ってるようなんですが、調べる時間が…)
VBA
1Dim wb As Workbook 2Dim bfs(5) As Variant 3Dim bf 4bfs(0) = "c:\temp\book1.xlsm" 5bfs(1) = "c:\temp\book2.xlsm" 6bfs(2) = "c:\temp\book3.xlsm" 7bfs(3) = "c:\temp\book4.xlsm" 8bfs(4) = "c:\temp\book5.xlsm" 9Application.DisplayAlerts = False 10For Each bf In bfs 11 Set wb = Workbooks.Open(bf) 12 For Each ws In wb.Worksheets 13 ws.Cells.Font.Name = "MS ゴシック" 14 Next 15 wb.SaveAs Filename:=Replace(bf, "xlsm", "xlsx"), FileFormat:=xlOpenXMLWorkbook 16 wb.Close 17Next 18Application.DisplayAlerts = True
投稿2017/06/28 06:01
総合スコア17000
0
自己解決
xlsからxlsxへの変換も行う必要があったので ttyp03 さんにいただいた回答と下記のURLの情報を元にマクロを作成しました(ほぼコピペしただけです)。
xlsからxlsxへの変換 http://excel-ubara.com/excelvba5/EXCELVBA251.html
マクロの除去 http://chaichan.lolipop.jp/vbtips/VBMemo2006081403.htm
VBA
1Sub xls2xlsx() 2 3 Dim i As Long 4 Dim strArray() As String 5 Dim strFile As String 6 Dim strPath As String 7 Dim strBook As String 8 9 strPath = ThisWorkbook.Path & "\source\" 10 strDistPath = ThisWorkbook.Path & "\excel\" 11 strFile = Dir(strPath & "*.xls") 12 i = 0 13 Do While strFile <> "" 14 If LCase(Right(strFile, 4)) = ".xls" Then 15 ReDim Preserve strArray(i) 16 strArray(i) = strFile 17 i = i + 1 18 End If 19 strFile = Dir() 20 Loop 21 For i = 0 To UBound(strArray) 22 With Workbooks.Open(strPath & strArray(i)) 23 strBook = Left(strArray(i), InStrRev(strArray(i), ".") - 1) 24 ' フォント変更 25 For Each ws In .Worksheets 26 ws.Cells.Font.Name = "MS ゴシック" 27 Next 28 29 30 If .HasVBProject Then 31 ' ここからマクロ除去 32 Dim objVbcompo As Object 33 For Each objVbcompo In .VBProject.VBComponents 34 35 With objVbcompo.CodeModule 36 If .CountOfLines <> 0 Then .DeleteLines 1, .CountOfLines 37 End With 38 If (objVbcompo.Type = vbext_ct_StdModule Or objVbcompo.Type = vbext_ct_MSForm) Then 39 .VBProject.VBComponents.Remove objVbcompo 40 End If 41 Next objVbcompo 42 'ここまでマクロ除去 43 Set objVbcompo = Nothing 44 ' If Dir(strPath & strBook & ".xlsm") = "" Then 45 ' .SaveAs Filename:=strPath & strBook & ".xlsm", _ 46 ' FileFormat:=xlOpenXMLWorkbookMacroEnabled 47 ' Else 48 ' .SaveAs Filename:=strPath & strBook & "_" & Format(Now(), "yyyymmddhhmmss") & ".xlsm", _ 49 ' FileFormat:=xlOpenXMLWorkbookMacroEnabled 50 ' End If 51 Application.DisplayAlerts = False 52 If Dir(strDistPath & strBook & ".xlsx") = "" Then 53 .SaveAs Filename:=strDistPath & strBook & ".xlsx", _ 54 FileFormat:=xlWorkbookDefault 55 Else 56 .SaveAs Filename:=strDistPath & strBook & "_" & Format(Now(), "yyyymmddhhmmss") & ".xlsx", _ 57 FileFormat:=xlWorkbookDefault 58 End If 59 Else 60 If Dir(strDistPath & strBook & ".xlsx") = "" Then 61 .SaveAs Filename:=strDistPath & strBook & ".xlsx", _ 62 FileFormat:=xlWorkbookDefault 63 Else 64 .SaveAs Filename:=strDistPath & strBook & "_" & Format(Now(), "yyyymmddhhmmss") & ".xlsx", _ 65 FileFormat:=xlWorkbookDefault 66 End If 67 End If 68 .Close savechanges:=False 69 End With 70 Next 71 72 73End Sub 74
投稿2017/09/20 06:35
総合スコア33
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
関連した質問
複数の同じようなExcelファイルに対して、マクロ除去とフォントの一括変換をおこないたい
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/06/28 10:42 編集