コード
[Excel VBA でファイル名に使えない文字を取り除く _ 勉強とガジェット][1]に書かれているように、
- Windowsの都合・・・・・・
\/:*?"<>|
- Excelの都合による追加 ・・・
[]
という、ファイル名に使えない文字がある(以下、Windows都合文字、Excel都合文字と呼ぶ)。
それを置き換えるためのベース。
(rを指定しない場合は除去する)
Function c2r(s, c, Optional r = "")
For i = 0 To Len(c) - 1
s = Replace(s, Mid(c, i + 1, 1), r)
Next i
c2r = s
End Function
各都合文字を"_"に置き換える
after = c2r(before, "\/:*?""""<>|", "_")
after = c2r(before, "\/:*?""""<>|[]", "_")
ファイル名に半角スペースがあるとうまく動かないケースがあるのでそれも置換
after = c2r(before, "\/:*?""""<>|[] ", "_")
Excelの魔力
Windows都合文字とExcel都合文字が微妙に[]
だけ合致してない。
[]
がWindows都合文字に含まれないことExcelの魔力の源泉である。
- 似たような名前のファイルを大量生産させる
- ときには変更を台無しにする
という破滅的/自滅的な行動を、なんの疑いもなく、かつ自発的に実施させる魔力がある。
(そして、破滅的/自滅的行動しているとき、本人は「良かれと思っている」)
普通?の動作
Excelのファイル→名前を付けて保存で"[001]y.xlsx"にする
というダイアログが出て保存できない。
・・・これは、「指定したファイルの名前に・・・」と出るのでわかりやすい。
ただ、
[]がファイル名に使えないのはExcelの都合だよ。Windowsはサポートしているから右クリックでファイル名変更するときは気を付けて。
とは言ってくれない。
勘違いを誘う動作
"y.xlsx" を右クリックで "[001]y.xlsx"に変更できる。
[]
がExcelのファイル名につかえる ・・・ と思ってしまう。
"[001]y.xlsx" を開ける。
[]
が入っていてもExcelファイルが開ける ・・・ と思ってしまう。
上書き保存できる。
[]
が入っていても上書き保存できる ・・・ と思ってしまう。
ん?なんだこれ。
魔力の発動条件
"y.xlsx" を共有ファイルにする。
"y.xlsx" を右クリックで "[001]y.xlsx"に変更する。
魔力の原理
開く
上書き保存しようとすると・・・
Excel、ファイルを開いた直後に「指定したファイルの名前に・・・」をここでと言ってくれと
そして、名前を付けて保存に誘導される・・・
Excel、せめて誘導する前に「指定した(略)と言ってくれと
保存を押すと・・・
Excel、無理しないほうがいい。
上書きできるふりをせず、こっそりファイル名を"(001)y"にして、「ファイル名が変更されます。気を付けて」といえばいい。
既存のファイルを上書きするつもりで、OKを押すと・・・
ファイル名を"[001]y_.xlsx"に変更して、保存すると・・・
魔力の発動
[]
が入った共有ファイルがサーバに置かれると、人々は以下の行動を開始する。
- ファイル名の
[]
だけを別の文字に変更する(別ファイル編集) - 1.のあと、自分の名前を示す何かをファイル名に入れる(別ファイル編集)
- 1.~2.のいずれかのあと、「上書き保存しようとすると・・・」の警告に書いてあったブックの結合をやる(別ファイル編集)
- 1.~3.のいずれかのあと、
[]
がファイル名にないまま、サーバに別名保存 - 1.~3.のいずれかのあと、
Windows世界の魔力で右クリック操作で、[]
を戻し、サーバに別名保存 - 1.~3.のいずれかのあと、右クリック操作で元のファイル名に戻し、
メガンテサーバに上書き保存 - 1.~5.のいずれかのあと、
- メールで「なんか保存できなかったので別名ファイルで置いときました」 と連絡する
- 6.のやつは、「終わりました」とだけ言う
共有無効化(1.~5.)、ファイル破壊(6.)を意味するので、「似た名前ファイル大量生産からのマージ地獄もしくは復旧地獄に自ら落ちる(or特定の人物を落とす)」という破滅的/自滅的な行動をしている。
しかし、発動条件を仕込んでいる時を含め、行動しているときは「良かれ」と思っている。
例:
- 共有ファイルでみんなが編集できるようにしたよ
-
[]
を使って、連番で/IDで管理できるようにしたよ - 頼まれた期限を守って提出できてよかった
さらに、発動条件を探究しない、別の人がやるなどで繰り返すことがおおい
発動条件を知った人も、Excelで知らないことがあると恥ずかしいのか、あまり人に話さない。
[Excelは奥深い][4]し、ベーシックな作業の速度アップは毎日の積算で大きな効果があるから、どんどん人に聞いたほうがいいんじゃないかなー。
備考
わかりにくい警告しているので「Excel/MSがすべて悪い」と言えない?
ナイフを使った犯罪があったとして、ナイフ自体やメーカが・・・(略)・・・
参考
- [Excel VBA でファイル名に使えない文字を取り除く _ 勉強とガジェット][1]
- [Windowsでファイル名に使えない文字 _ kotaログ][3]
- [VBAのSplitでは1文字ずつの配列にならない エクセルマクロ・Excel VBAの使い方-配列][2]
- [【すごいExcel】こんなことまでできるんだ! っていうExcelの奥深… - 人力検索はてな][4]
[4]:http://forest.watch.impress.co.jp/article/2008/01/24/dexev.htm
[3]:http://www.itc.u-toyama.ac.jp/el/win7/restricted.html
[2]:http://www.relief.jp/docs/vba-split-can-not-make-array-each-characters.html
[1]:http://tanaka-misaki.blogspot.jp/2012/02/excel-vba.html