ここから本文です

職場でExcel2013を使っていますが、未だに.xlsで保存している人がいます。 .xlsの...

アバター

ID非公開さん

2018/6/1311:08:51

職場でExcel2013を使っていますが、未だに.xlsで保存している人がいます。
.xlsのブックを一括で.xlsxまたは.xlsmに変換したいのですがフリーソフトで簡単にできるものはありますか?

よろしくお願いいたします。

閲覧数:
243
回答数:
1
お礼:
25枚

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

lin********さん

2018/6/1312:15:23

「VBScript」による「ツール」ですので、「Windows限定」です。

このプログラムは、「~.xls」ファイル群が存在するフォルダにプログラムファイルを放り込んで、ダブルクリック(「シングルクリック」→「Enter」の方が確実)するだけです。

最後に「Finished!」と表示しますので、「OK」を押して、終了してください。

なお、今は、15行目の「'so.DeleteFile gf & "\" & f.Name, True」、頭に「'」が付いていますので、実行されません。

この行は、「xlsx」に変換してから、元の「xls」ファイルを削除する部分ですので、削除しても大丈夫な場合は、頭の「'」を外してください。

以下のプログラムを、メモ帳かテキストエディタに貼り付け、「~.vbs」という名前で保存します。

「~」の部分は、何でもかまいませんが、「.vbs」の部分は、必ず、半角です。

できたプログラムファイル(「~.vbs」ファイル)を、「~.xls」ファイル群が存在するフォルダに放り込んで、ダブルクリックするだけです。

★★★注意事項★★★
たとえば、「Book1.xls」を「Book1.xlsx」にするわけですので、フォルダ内に「Book1.xlsx」ファイルが、すでに存在してはいけません。

プログラムでは、無条件に変換してしまっています。

Option Explicit
Dim b, bk, ex, f, gf, so
Set so = CreateObject("Scripting.FileSystemObject")
Set gf = so.GetFolder(so.GetParentFolderName(WScript.ScriptFullName))
Set ex = CreateObject("Excel.Application")
ex.Application.DisplayAlerts = False
ex.Visible = False
For Each f In gf.Files
If Lcase(so.GetExtensionName(f.Name)) = "xls" Then
b = so.GetBaseName(f.Name)
Set bk = ex.Workbooks.Open(gf & "\" & f.Name)
bk.SaveAs gf & "\" & b & ".xlsx", 51
bk.Close
Set bk = Nothing
'so.DeleteFile gf & "\" & f.Name, True
End If
Next
ex.Quit
Set ex = Nothing
Set so = Nothing
MsgBox("Finished!")

簡単な説明です。

Option Explicit

「厳密に」というような名前ですが、気にしないでください。

Set so = CreateObject("Scripting.FileSystemObject")

ファイルやフォルダを扱えるようにしています。

Set gf = so.GetFolder(so.GetParentFolderName(WScript.ScriptFullName))

プログラムファイル(「~.vbs」ファイル)が存在するフォルダ、すなわち、「~.xls」ファイル群が存在するフォルダを取得しています。

Set ex = CreateObject("Excel.Application")

エクセルを扱えるようにしています。

ex.Application.DisplayAlerts = False
ex.Visible = False

「上書きしますか?」などと聞いてこないように、また、エクセルを表示しません。

For Each f In gf.Files

プログラムファイルが存在するフォルダ内のすべてのファイルを1つずつ処理。

If Lcase(so.GetExtensionName(f.Name)) = "xls" Then

拡張子が「xls」なら、

b = so.GetBaseName(f.Name)

ベースネームを調べています(「abc.xls」→「abc」)。

Set bk = ex.Workbooks.Open(gf & "\" & f.Name)

ブックを開いています。

bk.SaveAs gf & "\" & b & ".xlsx", 51

「~.xlsx」形式で、保存しています。

bk.Close
Set bk = Nothing

閉じています。

'so.DeleteFile gf & "\" & f.Name, True

処理が済んだので、「~.xls」ファイルを削除。

End If
Next

を、すべてのファイルで繰り返しています。

ex.Quit

エクセルそのものを終了しています。

Set ex = Nothing
Set so = Nothing
MsgBox("Finished!")

あとは、終了処理で、最後に「Finished!」と表示しています。

あわせて知りたい

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる