スポンサーリンク
はじめに
※以下の記述では、Excel2003までのバージョンを「旧Excel」、Excel2007以降のバージョンを「新Excel」と呼びます。
貴方の会社にもExcelファイルは沢山あるはずだが、
旧Excelファイル(拡張子.xls)
と
新Excelファイル(拡張子.xlsxとか.xlsm)
とが混在しているだろうか?
もし混在しているなら、それら沢山のファイルを手早く、新Excelファイル(拡張子.xlsxとか.xlsm)の方に統一してしまいたいとは思わないだろうか。
今回はそれを簡単に実現し、旧Excelファイル(.xls)を複数まとめて新Excelファイル(.xlsx)に変換するマクロを紹介する。
貴方の手元に旧Excelファイルがあるなら、まずこのマクロを使って、可能な限り新Excelファイルに変換しまくってみよう。
・・・と書いたが、そもそも上記の記述がわけ分からんという方はいらっしゃるだろうか?
拡張子って何よとか、Excelの形式がとか何よとか、思われているだろうか?
もしそうだとしたら、はっきり言ってしまうが、ITの必要な基礎知識が欠落していてかなりマズい状態だ。
正直なところ私の職場にもそのレベルの人が多く、しかも彼らはそれに危機感を持たず呑気こいてるのだが、一刻も早く叩き直すべきところだ。
蛇足説明:拡張子とExcelのバージョンについて
もうこの辺は、イチイチ詳細には書かないが、さわりだけ簡潔に書いておく。
そんな解説は蛇足だ退屈だと、飛ばすくらいになっていただきたい。
拡張子
まず拡張子ってのは、ファイルの末尾にピリオド文字「.」を伴って付いてくる「.xls」とか「.doc」とかの語句だ。
これを元に、それがExcelのファイルなのかとか、ファイルの種類を判定するわけだ。
と言ってもそんなの見た記憶ねえよって人も、結構いるんだろうな。
Windowsのマイコンピュータとか開く「エクスプローラ」においては、この「拡張子」を表示するってオプションが、なぜかデフォルトではOFFになってしまっている。
この拡張子表示オプションをONにする設定を、PCを入手したら速攻で最優先で実施してもらいたい。
はっきり言って、事務職とかでこの設定をONにしてない人を見たら、私はそれだけで「こんド素人が」とプッツンしそうになるくらいだ。
設定をONにする方法は、OSのバージョンによってもちょっと違うし「ググれ」で済ませるが、Windows10の場合の設定方法を図示だけはしておく。後はなんとかすること。
Excelの形式・バージョン
次に、Excelの形式とか書いたやつだけど、形式というのはバージョンと言っても良い。
そして貴方は、自分の使用しているExcelのバージョンが何か、分かっているだろうか?
これについても、そんなの分からんという人を多く見ていて、そのたびに呆れてしまっている。
スタートメニューとかでExcelのアイコンを見れば、「Excel2010」とかバージョン名が書かれているはずなのだが。
ちなみに単に「Excel」とだけショートカットに書かれているものしかない場合は、それは「Office365」というやつの可能性が高く、これは分からんとなっても無理はないかもしれない。
でも分からないままにしていては駄目だ。必ず調べ、明らかにすること。
そして先述の、ファイルの種類を示す「拡張子」が、Excelのバージョンによって異なる。
厳密にはけっこう色々と種類があるのだが、ひとまず下表のように覚えておけば十分だ。
Excel2003までなら「.xls」1つで良かったのが、新しいバージョンになると2つになってややこしい。
新Excelなら全部「マクロ有り」の「.xlsm」拡張子にして運用しても問題なさそうだけど、それやってる会社はあるのかな?
ファイル形式 | マクロ有無 | 拡張子 |
---|---|---|
Excel2003まで | マクロ無し | .xls |
マクロ有り | ||
Excel2007以降 | マクロ無し | .xlsx |
マクロ有り | .xlsm |
マクロの動作イメージ
さて、初歩的事項の解説はこの辺にして、今回のマクロの動作イメージだ。
このマクロを実行すると、ファイルを開くダイアログが出るけど、それは旧Excelの拡張子「.xls」のファイルしか開かないようにしてある。
そのダイアログで、ファイルを複数選べるのでまとめて選択し実行すれば、それらが新Excelの形式で別名保存されるというものだ。
元々の旧Excelファイルも、特に削除したりはせずそのまま残すようにしてあるので、処分はご自由に。
ソースコード
では、当該マクロのソースコードを。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
'Excel2003までのファイル(xls)をExcel2010以降形式(xlsx,xlsm)に変えて保存する Dim strFiles() As String Dim i As Long Dim fileNum As Long With Application.FileDialog(msoFileDialogOpen) .AllowMultiSelect = True '複数ファイル選択可能にする .Filters.Clear .Filters.Add "Excel2003ファイル", "*.xls" 'xlsファイルのみ開く許可 If Not .Show Then Exit Sub fileNum = .SelectedItems.Count '選択されたExcelファイルを配列へ ReDim strFiles(1 To fileNum) For i = 1 To fileNum strFiles(i) = .SelectedItems(i) Next i End With Dim eachWb As Workbook With Application .ScreenUpdating = False '描画省略 .DisplayAlerts = False '警告を省略 End With For i = 1 To fileNum Workbooks.Open strFiles(i), UpdateLinks:=False, ReadOnly:=True Set eachWb = ActiveWorkbook If eachWb.HasVBProject Then 'マクロ有りの場合 eachWb.SaveAs strFiles(i) & "m", xlOpenXMLWorkbookMacroEnabled 'xlsmで保存 Else 'マクロ無しの場合 eachWb.SaveAs strFiles(i) & "x", xlOpenXMLWorkbook 'xlsxで保存 End If eachWb.Close False Next i With Application .ScreenUpdating = True '描画再開 .DisplayAlerts = True '警告再開 End With MsgBox "終了しました。処理件数:" & fileNum, vbInformation, "処理終了" End Sub |
このマクロは、Excelの個人用マクロブックに組み込んで使うと良い。
ソースコードの細部の解説はあまりしないけど、余談的な話。ラストの方で
eachWb.Close False
と書いてるやつがある。
これは何がFalseなのか一見すると分からないが、省略せず書くと
eachWb.Close SaveChanges:=False
となる。
SaveChangesってのは文字通りというか、変更を保存するかどうかって話。これがFalseってことは、イチイチExcel上で変更したものを上書き保存はしませんよってこと。
で、なんでこのSaveChangesってのを省略できるかっていうと、今回使ったeachWb.Closeの「Close」ってやつが、その後に付く引数ってやつを
<SaveChanges><Filename><RouteWorkbook>っていう順に持つのだと規定されているから。
そのうち最初に来る<SaveChanges>を省略したっていうのは、自動的に推測してくれるわけ。
よけい難しくなったかもね。私もここまで複雑なこと考えてやってるわけじゃない。
要はSaveChangesってのは、Excel VBAの側で融通をきかせて推測してくれてるんだってこと。それだけ何となく分かってくれればいい。
最後に
冒頭で、貴方の会社に新Excelと旧Excelが混在してないかと書いたけど、実際どうだろう。
私は今回のマクロとか使って、自分の手元からは旧Excelファイルを根絶し新Excelファイルに統一するようにはしている。
でもその辺をあまり考えない人とかは、以前から使ってた旧Excelファイルをそのまま送ってきたりするので、完全な根絶はなかなか難しい。
これもまた分かってない人は即刻改善が必要なのだが、新Excelファイルは旧Excelファイルと比べて改良点が非常に多い。
という具合で、大まかにで良いからとにかく凄く改良されたのだということは押さえてほしい。
「いや、自分はそんな新しい機能とか使い切れないから」とかいうことは言わないでほしい。
ガラケーがどんどん世間で使われなくなってきたからスマホに乗り換えようくらいのノリで良い。
旧Excelを使い続けるなんて、何か考えがあってならともかく、惰性で続けるのは即刻やめよう。
そして、新Excelの快適さに早く馴染むようにしよう。
…ってか、旧ExcelなんてExcel2003までの話で、いつの時代の話をしてるんだって感じなのだが。
スポンサーリンク