「.xls」形式のExcelファイルを「.xlsx」形式へ一括して変更する場合、マクロを使うと便利です。
※Keynoteで作成 iPhone X
Excelファイルのxlsとxlsx
Excelのファイルは、Excel2003以前と2007以降で、大きく種類が変わりました。
Excel2003以前は、拡張子(ファイルの最後につく)が「.xls」
Excel2007以降(2007、2010、2016、Office365)は、「.xlsx」です。
(Excel2007以降でも、「.xls」で保存することはできます。)
マクロが入っているExcelファイルは、
Excel2003以前は、「.xls」で通常のものと同じ
Excel2007以降は、「.xlsm」です。
(Excel2007以降でも、「.xls」で保存することはできます。)
古いExcelファイル(.xls)をxlsx形式で保存したいということもあるでしょう。
1つ、2つなら、xlsファイルを開いて、名前をつけて保存(F12)で、xlsxファイルにしてもいいかもしれませんが、これが5、10、100となると、手作業でやるのは大変です。
こういうときもExcelマクロが役に立ちます。
xlsをxlsxに変換するマクロ
Xlsをxlsxに変換して保存するマクロはこういったものです。
Sub Excel_fileformat_change() 'フォルダの場所を変数に入れる Dim Folder_path Folder_path = "\\Mac\Dropbox\そのままExcel 事例" 'xlsファイルを探すように指定 Dim Excel_book Excel_book = Dir(Folder_path & "\*.xls*") '指定フォルダから、xlsファイルを開き、xlsxで保存 Do Until Excel_book = "" If LCase(Right(Excel_book, 3)) = "xls" Then Workbooks.Open Filename:=Folder_path & "\" & Excel_book Application.DisplayAlerts = False If ActiveWorkbook.HasVBProject = True Then ActiveWorkbook.SaveAs Filename:=Excel_book & "m", FileFormat:=xlOpenXMLWorkbookMacroEnabled Else ActiveWorkbook.SaveAs Filename:=Excel_book & "x", FileFormat:=xlOpenXMLWorkbook End If ActiveWorkbook.Close Application.DisplayAlerts = True End If Excel_book = Dir() Loop End Sub
①フォルダを指定
まずフォルダを指定します。
プログラムに直接書いてもいいですし、ファイルを選択する方法もできます。
変数というのは好きに決められます。
「フォルダ」でもいいですし、「folder」でもいいですし、fでもかまいません。
自分で使うなら自分がわかるようにすれば十分です。
ただ、内容がわかるようにつけたほうが後から読みやすくはなります。
私は、アルファベットでつける主義です。
こういった変数を使わなくてもいいのですが、あとのプログラムが、
Excel_book = Dir(“\\Mac\Dropbox\そのままExcel 事例”\*.xls*”)
と長くなります。
変数を使うと、
Excel_book = Dir(Folder_path & “\*.xls”)
と短くみやすくなるわけです。
ただ、これはケースによります。
変数をあえて使わないほうが見やすくなることもありますし、他人が名付けた変数は読みにくいケースも多いものです。
プログラムが長くなろうと、効率化できるのは変わりませんので、あまりこだわらないほうがいいでしょう。
②xlsファイルを探すように指定
xlsを含むファイルを探すように指定します。
Dirは、ファイルがあるかどうかを判定する関数です。
Dir(○○)の○○があれば、そのファイル名を示します。
それをExcel_bookという変数に入れているわけです。
③xlsファイルを開き、xlsxファイルとして保存
Do Until Excel_book = “”
○○
Excel_book = Dir()
Loop
でセットで、Excel_bookがフォルダ内にある限り、黄色の枠の処理を繰り返すという意味です。
繰り返しはマクロの必殺技で、疲れずひるまずミスなく繰り返してくれます。
直訳すると、「Excel_bookがブランク(””)でない(=until)限り繰り返す(Loop】」で、プログラムは、こういう翻訳が大事です。
自分がやりたいことをどう翻訳するか、プログラムをどう翻訳するかの勝負ともいえます。
論理的なもので、文系・理系関係ないものなのです。
むしろ文系もむいています。
特殊な事例を想定して、IFで判定するようにしました。
「Xlsを含む」と処理すると、「xls」も「xlsx」も「xlsm」も含まれるので、
If LCase(Right(Excel_book, 3)) = “xls” Then
で処理しています。
Lcaseは大文字を小文字にする関数。
仮に「xls」でなく「XLS」の場合でも対応します。
Rightは、右から○文字を取り出す関数。
ファイル名の右から3つが、「xls」なら、「xlsx」や「xlsm」ではありません。
そして、xlsファイルには、前述のとおりマクロが入っている場合があります。
マクロが入っていると、xlsxではなく、xlsmにしたいので、IFで判定しました。
HasVBProjectでマクロが入っているかどうか判定できます。
マクロが入っていれば、「xls」に「m」をつけて「xlsm」にし、ファイル形式(FileFormat)を、マクロ有効ブック(xlOpenXMLWorkbookMacroEnabled)に、入ってなければ「xls」に「x」をつけて「xlsx」にし、ファイル形式(FileFormat)を、Excelブック(xlOpenXMLWorkbook)にします。
Xlsをxlsm、xlsxに置き換えるというプログラムにすることもできますが、こういうのはアイデア次第でなんとでもできるわけです。
これがプログラミングのおもしろいところでもあり、おすすめする理由でもあります。
If ActiveWorkbook.HasVBProject = True Then
ActiveWorkbook.SaveAs Filename:=Excel_book & “m”, FileFormat:=xlOpenXMLWorkbookMacroEnabled
Else
ActiveWorkbook.SaveAs Filename:=Excel_book & “x”, FileFormat:=xlOpenXMLWorkbook
End If
保存する場所は、Excelの規定の保存フォルダ(通常はドキュメント)です。
Excelのオプション(Alt→T→O)の[保存]で確認しておきましょう。
もちろん、フォルダを指定することもできます。
その前にある
Application.DisplayAlerts = False
は、「警告が出たら無視してくれ」という便利なプログラムです。
これがないと、すでに同じ名前のファイルがあった場合、こういった警告があります。
気にしないで上書きしてくれという意味です。
こういうことも本来は丁寧に依頼しなければいけません。
人対人だと、
・「う、上書きしても大丈夫ですか?」と部下が聞くと、上司が「そんなん当然だろ!ジョーシキで判断しろ!」と怒る
・「上書きしときました」と言うと、上司が「なんで上書きするんだ!普通しないだろ!」と怒る
なんてことが起こるわけです。
xls-xlsx変換マクロの考え方
このマクロを、最初から書こうとすると、特殊事例も考えなければいけませんし大変です。
まずは小さくつくりましょう。
繰り返しも考えず、シンプルに、ファイルを開くところから書き始めます。
Sub Excel_fileformat_change() Workbooks.Open Filename:="\\Mac\Dropbox\そのままExcel 事例"\移動年計.xls" End Sub
これを実行(F5)して、うまくいったら、変数で表現します。
Dimは変数を定義するものです。
・「Folder_path」は変数
・Folder_pathは”\\Mac\Dropbox\そのままExcel 事例”である
という指令を意味します。
Sub Excel_fileformat_change() 'フォルダの場所を変数に入れる Dim Folder_path Folder_path = "\\Mac\Dropbox\そのままExcel 事例" Dim Excel_book Excel_book = "移動年計.xls" Workbooks.Open Filename:=Folder_path & "\" & Excel_book End Sub
これを実行して正しく動いたら、次はxlsxに変えて保存してみましょう。
Sub Excel_fileformat_change() 'フォルダの場所を変数に入れる Dim Folder_path Folder_path = "\\Mac\Dropbox\そのままExcel 事例" Dim Excel_book Excel_book = "移動年計.xls" Do Until Excel_book = "" Excel_book = Dir() Loop Workbooks.Open Filename:=Folder_path & "\" & Excel_book Application.DisplayAlerts = False ActiveWorkbook.SaveAs Filename:=Excel_book & "x", FileFormat:=xlOpenXMLWorkbook ActiveWorkbook.Close Application.DisplayAlerts = True End Sub
これで動いたら、
Do Until Excel_book = “”
Excel_book = Dir()
Loop
を書いて、上記のプログラムを入れ、”移動年計.xls”を変数に変えていきます。
えいやっと実行してみてうまくいけばOKくらいの心意気で行きましょう。
Sub Excel_fileformat_change()
'フォルダの場所を変数に入れる
Dim Folder_path
Folder_path = "\\Mac\Dropbox\そのままExcel 事例"
Dim Excel_book
Excel_book = "移動年計.xls"
Do Until Excel_book = ""
Excel_book = Dir()
Loop
Workbooks.Open Filename:=Folder_path & "\" & Excel_book
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs Filename:=Excel_book & "x", FileFormat:=xlOpenXMLWorkbook
ActiveWorkbook.Close
Application.DisplayAlerts = True
End Sub
↓
Sub Excel_fileformat_change() 'フォルダの場所を変数に入れる Dim Folder_path Folder_path = "\\Mac\Dropbox\そのままExcel 事例" Dim Excel_book Excel_book =Dir(Folder_path & "\*.xls*") Do Until Excel_book = "" Workbooks.Open Filename:=Folder_path & "\" & Excel_book Application.DisplayAlerts = False ActiveWorkbook.SaveAs Filename:=Excel_book & "x", FileFormat:=xlOpenXMLWorkbook ActiveWorkbook.Close Application.DisplayAlerts = True Excel_book = Dir() Loop End Sub
これでひとまず完成です。
特殊事例は必要あれば入れましょう。
フォルダに、マクロの入っていないxlsファイルだけを入れれば、このプログラムだけで問題ありません。
人がちょっと工夫するとプログラミングは楽になります。
どんな人が何をやっても大丈夫なプログラムはコストがかかり、それを重視しすぎるとそのプログラムによるソフトは使いにくくなるものです。
(会計ソフトや税務ソフトはそうでしょう。わかってやっているのかどうかですが)
サンプルファイルでは、フォルダを指定するマクロをボタンに入れていますので、フォルダを指定してから、次のマクロ(xlsx変換)を使ってみていただければ。
EX-ITサンプル Excel xlsからxlsx変換マクロ.xlsm
このサンプルをそのまま使うのではなく、実際にプログラムを書いてみましょう。
昨日は、東京ビックサイトのAI・人工知能EXPOへ。
といっても午前中は仕事して、AI弁護士とランチして、Amazonのセッションを聴いて、会場に入ったのは14時前。
気になるブースを回ってきました。
予想通り(?)、うーんというものも多かったのですが。
その後、AI弁護士と合流してスイム練。
4月にトライアスロンデビューし、7月は一緒の大会に出ます。
【昨日の1日1新】
※詳細は→「1日1新」
AI・人工知能EXPO
クリエイターズEXPO
【昨日の娘日記】
最近、なぜかお風呂を嫌がります。
ちょっと前まで大好きだったのに。。
■著書
『税理士のためのプログラミング -ChatGPTで知識ゼロから始める本-』
『すべてをがんばりすぎなくてもいい!顧問先の満足度を高める税理士業務の見極め方』
ひとり税理士のギモンに答える128問128答
【インボイス対応版】ひとり社長の経理の基本
「繁忙期」でもやりたいことを諦めない! 税理士のための業務効率化マニュアル
ひとり税理士の自宅仕事術
リモート経理完全マニュアル――小さな会社にお金を残す87のノウハウ
ひとり税理士のセーフティネットとリスクマネジメント
税理士のためのRPA入門~一歩踏み出せば変えられる!業務効率化の方法~
やってはいけないExcel――「やってはいけない」がわかると「Excelの正解」がわかる
AI時代のひとり税理士
新版 そのまま使える 経理&会計のためのExcel入門
フリーランスとひとり社長のための 経理をエクセルでトコトン楽にする本
新版 ひとり社長の経理の基本
『ひとり税理士の仕事術』
『フリーランスのための一生仕事に困らない本』
【監修】十人十色の「ひとり税理士」という生き方