質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%

Q&A

解決済

2回答

4456閲覧

複数の同じようなExcelファイルに対して、マクロ除去とフォントの一括変換をおこないたい

hos

総合スコア33

0グッド

0クリップ

投稿2017/06/28 05:23

編集2017/06/28 05:37

同じシート構成で中身の違うエクセルファイルが複数あります。

これらのエクセルファイルの
0. フォントファミリーの変更(MS PゴシックとMS ゴシックにしたい)
0. フォーム、マクロを除去

を行いたいです。
方法としては、Powershellで回す。VBAで回す。C#でNPOIを使う。あたりを候補にしています。
(1回限りなので何でもいいです。VBAはあまりわからないのですが、対象のオブジェクトがわかればなんとかなるのではないかと思っています)。

シートはどのエクセルも同じ名前で同じインデックスのものが5シートあります。
フォントファミリー以外のフォントのスタイルは変更したくありません。

フォーム、マクロは全て名称は同じです。

どのオブジェクトに対してどのような操作を行えば良いかを教えていただけると助かります。
よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答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

ttyp03

総合スコア16998

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hos

2017/06/28 10:42 編集

ありがとうございます。 試してみてまた報告します。 フォントの書き方はこんな感じなんですね。 拡張子はxlsで、マクロを解放したいので、そこはもう少し考えてみます。
guest

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

hos

総合スコア33

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問