Excelの魔力～だから似たような名前のファイルが大量生産される～

# コード
[Excel VBA でファイル名に使えない文字を取り除く _ 勉強とガジェット][1]に書かれているように、

- Windowsの都合・・・・・・  ```\/:*?"<>|```
- Excelの都合による追加 ・・・ ```[]```

という、ファイル名に使えない文字がある(以下、Windows都合文字、Excel都合文字と呼ぶ)。

それを置き換えるためのベース。
(rを指定しない場合は除去する)

```vbnet:c2r
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
```

各都合文字を"_"に置き換える

```vbnet:windows都合文字置換
after = c2r(before, "\/:*?""""<>|", "_")
```

```vbnet:Excel都合文字(＝windows都合文字＋"[]")置換
after = c2r(before, "\/:*?""""<>|[]", "_")
```

ファイル名に半角スペースがあるとうまく動かないケースがあるのでそれも置換

```vbnet:Excel都合文字+半角スペース置換
after = c2r(before, "\/:*?""""<>|[] ", "_")
```


# Excelの魔力
Windows都合文字とExcel都合文字が微妙に```[]```だけ合致してない。
```[]```がWindows都合文字に含まれないことExcelの魔力の源泉である。

- 似たような名前のファイルを大量生産させる
- ときには変更を台無しにする

という**破滅的／自滅的な行動を、なんの疑いもなく、かつ自発的に実施させる魔力**がある。
(そして、破滅的／自滅的行動しているとき、本人は「良かれと思っている」)


## 普通？の動作
### Excelのファイル→名前を付けて保存で"[001]y.xlsx"にする
![excel.png](https://qiita-image-store.s3.amazonaws.com/0/34777/c6b03d5c-7627-087c-e1eb-30b3dc0d977c.png)
というダイアログが出て保存できない。
・・・これは、「指定したファイルの名前に・・・」と出るのでわかりやすい。
ただ、
> []がファイル名に使えないのは**Excelの都合だよ**。Windowsはサポートしているから**右クリックでファイル名変更するときは気を付けて。**

とは言ってくれない。

## 勘違いを誘う動作
### "y.xlsx" を右クリックで　"[001]y.xlsx"に変更できる。
![001y.png](https://qiita-image-store.s3.amazonaws.com/0/34777/4e8764c9-bb60-9c75-439b-4abb080b7a10.png)
```[]```が**Excelのファイル名につかえる** ・・・ と思ってしまう。


### "[001]y.xlsx" を開ける。
![001y_excel.png](https://qiita-image-store.s3.amazonaws.com/0/34777/2a0cb73c-8da8-e6fb-c501-67778e116400.png)
```[]```が入っていても**Excelファイルが開ける** ・・・ と思ってしまう。


### 上書き保存できる。
![okexcel.png](https://qiita-image-store.s3.amazonaws.com/0/34777/2a8442e5-c3fb-f615-ccb2-11d3cf748211.png)
```[]```が入っていても**上書き保存できる** ・・・ と思ってしまう。

### ん？なんだこれ。
![ara_.png](https://qiita-image-store.s3.amazonaws.com/0/34777/33dd50b2-b5e6-d180-35f1-cf563821f557.png)



## 魔力の発動条件
### "y.xlsx" を共有ファイルにする。
![share_yxlsx.png](https://qiita-image-store.s3.amazonaws.com/0/34777/50a21dbf-38f8-87eb-0256-e92299726349.png)

### "y.xlsx" を右クリックで　"[001]y.xlsx"に変更する。
![001y.png](https://qiita-image-store.s3.amazonaws.com/0/34777/cf6a99b1-09a4-6976-d9aa-ea7ed5bc19cf.png)


## 魔力の原理
### 開く
![share_001_yxlsx.png](https://qiita-image-store.s3.amazonaws.com/0/34777/017d4040-be0b-a258-ec33-de1efef51e63.png)

### 上書き保存しようとすると・・・
![error.png](https://qiita-image-store.s3.amazonaws.com/0/34777/9d2e6f6c-c5a5-4392-e140-b6cc83df1cac.png)
Excel、**ファイルを開いた直後に「指定したファイルの名前に・・・」**をここでと言ってくれと

### そして、**名前を付けて保存**に誘導される・・・
![error_.PNG](https://qiita-image-store.s3.amazonaws.com/0/34777/6ec2dfe8-06e2-1682-63f1-d59d0cc48535.png)
Excel、**せめて誘導する前に「指定した（略）**と言ってくれと


### 保存を押すと・・・
![aaaaaaa.png](https://qiita-image-store.s3.amazonaws.com/0/34777/1722365c-e0de-96f4-8435-ba1c674a551f.png)
Excel、**無理しない**ほうがいい。
上書きできるふりをせず、こっそりファイル名を"(001)y"にして、「**ファイル名が変更されます。気を付けて**」といえばいい。


### 既存のファイルを上書きするつもりで、OKを押すと・・・
![bbbbbbb.png](https://qiita-image-store.s3.amazonaws.com/0/34777/4a8a2602-bfc0-e07a-cbef-dcb5b2da28f7.png)
Excel、**「指定（略）」を忘れていないか？**


### ファイル名を"[001]y_.xlsx"に変更して、保存すると・・・
![aaaaaaa.png](https://qiita-image-store.s3.amazonaws.com/0/34777/29a73cdb-917a-91e9-b11e-f516017b6320.png)
ここまで来てようやく**「指（略）」**がでてくる。

## 魔力の発動
### **```[]```が入った共有ファイルがサーバに置かれると**、人々は以下の行動を開始する。

1. ファイル名の```[]```だけを別の文字に変更する(別ファイル編集)
2. 1.のあと、自分の名前を示す何かをファイル名に入れる(別ファイル編集)
3. 1.～2.のいずれかのあと、「上書き保存しようとすると・・・」の警告に書いてあった**ブックの結合**をやる(別ファイル編集)
4. 1.～3.のいずれかのあと、```[]```がファイル名にないまま、サーバに別名保存
5. 1.～3.のいずれかのあと、~~Windows世界の魔力で~~右クリック操作で、```[]```を戻し、サーバに別名保存
6. 1.～3.のいずれかのあと、右クリック操作で**元のファイル名**に戻し、~~メガンテ~~**サーバに上書き保存**
7. 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