MacのExcelにはVBAよりPythonだとおもふのよ

# Summary

VBAはツライというお話

### VBAのかわりにPythonを使ってみる

osx version

```
tmp$ sw_vers 
ProductName:	Mac OS X
ProductVersion:	10.13.3
BuildVersion:	17D102
```

Excel version

```
Version 16.10(180210)
```

python3 version

```
tmp$ python3 --version
Python 3.6.4
```

### install

install python's library for Excel

```
$ pip3 install xlwings
```

For autocompete with vim

```
// for autocomplete
$ pip3 install jedi

$ vim dein.toml

[[plugins]]
repo = 'davidhalter/jedi-vim'
on_ft = 'python'
hook_add = '''
    let g:deoplete#sources#jedi#python_path = '/usr/local/bin/python3.6'
'''
```


### Hello world

```python
import xlwings as xw
wb = xw.Book('/Users/callmekohei/Desktop/Foo/foo.xlsx')
sht = wb.sheets['Sheet1']
sht.range('A1').value = 'hello world'
```

![image.png](https://qiita-image-store.s3.amazonaws.com/0/149269/a5c7c8e2-2a62-7a59-c411-df90187f0cb0.png)


# たとえばバーのリストを作ってみる

`callmekohei`はお酒が好きなので

新規開拓用にバーのリストを作ってみる

<br>


（データーの準備）

例えば平成２８年度に福岡市が営業許可した飲食店のデーターを元に作ってみる


[福岡市　新規飲食店営業等営業許可施設一覧（平成２８年度） ](https://ckan.open-governmentdata.org/dataset/401307_28insyokuteneigyoukyoka)

でこのままエクセルで読み込んで加工してもいいのですが

それだと練習にならないので、それはなしでwww


（手順その０）
適当な月の`操作ボタン`を押して`CSVデーター`をダウンロードする

![image.png](https://qiita-image-store.s3.amazonaws.com/0/149269/1330f2bc-c7e5-79f2-24ae-b8aea3df877c.png)


（手順その１）
エクセルで一旦ファイルを読み込んで、どういうデーターが必要か考える

```
今回は

屋号（お店の名前）
住所

を業態（バー）

で絞り込んだデーターが欲しいです
```

（手順その２）
文字コードを確認、UTF-8に変換する

```
Downloads$ nkf -g insyokuteneigyoukyoka201609.csv 
CP932
Downloads$ nkf -w --overwrite insyokuteneigyoukyoka201609.csv 
Downloads$ nkf -g insyokuteneigyoukyoka201609.csv 
UTF-8
```

（手順その３）
ヘッダーの確認

```
Downloads$ cat insyokuteneigyoukyoka201609.csv | head -1 | tr ',' '\n'
営業者氏名
営業者法人代表者役肩書
営業者法人代表者氏名
郵便番号
営業所所在地
営業所所在地ビル名
営業所電話番号
屋号
業種
業態
許可終了日
許可・交付日
初年度許可・交付日
```

（手順その４）
`CSVデーター`を`業態がバー`でフィルタリングする（行末にバーという文字の分だけ抽出）

```
Downloads$ cut -d ',' -f 5,8,10 insyokuteneigyoukyoka201609.csv | grep -e 'バー$'
福岡市中央区警固一丁目１番２４号,ＢＡＲ　柳瀬,バー
福岡市博多区博多駅前三丁目２６番５号,ライブ喫茶バー　ゲリラハウス,バー
福岡市中央区渡辺通五丁目５番３号　２Ｆ,フゼラフ　春吉店,バー
福岡市中央区大名一丁目８番５号,エヌ,バー
福岡市博多区住吉四丁目１３番１４号,Ｃａｒａｔｓ,バー
福岡市中央区舞鶴一丁目８番３０号,ｂａｄ　ｍｏｏｎ,バー
福岡市中央区白金一丁目３番５号,Ｂａｒ　ＫＵＭＡＧＡＩ,バー
福岡市早良区飯倉六丁目３５番２５−１号,Ｌａｄｉｅｓ　Ｂａｒ　８,バー
福岡市博多区銀天町一丁目６番８号,未来,バー
福岡市中央区赤坂三丁目１２番１６号,ＢＡＲ　ＲＩＶＥＲ,バー
福岡市中央区西中洲３番２０号,５０フィフティ,バー
福岡市中央区薬院三丁目６番４号,洋酒家　和,バー
福岡市中央区西中洲２番１４号,冗談倶楽部,バー
福岡市早良区荒江二丁目１２番２１−Ｃ−２号,ＢＡＲ荒江ＢＡＳＥ,バー
福岡市博多区中洲四丁目３番１号,Ｍｒ，Ｇ,バー
福岡市博多区中洲四丁目１番１５号,Ｂａｒ　Ａｑｕａｖｉｔａｅ,バー
福岡市博多区冷泉町６番５−１号,香,バー
福岡市中央区大名一丁目２番２８号,ＯＺ　ＲＯＯ,バー
福岡市博多区中洲二丁目３番５号,ｇｌｏｂｅ,バー
福岡市博多区中洲二丁目５番５号,プチ　スリーエー,バー
福岡市城南区友丘二丁目２番４１号,スナック　Ｇｅｅ,バー
```
うんうん。いい感じ。このファイルを`foo.csv`として保存する

```
Downloads$ cut -d ',' -f 5,8,10 insyokuteneigyoukyoka201609.csv | grep -e 'バー$' > foo.csv
```

ヘッダーをつけて保存
```
Downloads$ echo -e "住所,屋号,業態\n$(cat foo.csv)" > foo.csv
```

（手順その５）
先程加工した`CSV`データーを`Python`で読み込みこんで`Excel`に貼り付ける

```python
import csv
import xlwings as xw

wb = xw.Book('/Users/callmekohei/Desktop/Foo/foo.xlsx')
sht = wb.sheets['Sheet1']

csv_file = open("./foo.csv", "r", encoding="utf-8", errors="", newline="" )
f = csv.DictReader(csv_file, delimiter=",", doublequote=True, lineterminator="\r\n", quotechar='"', skipinitialspace=True)

i = 1
for row in f:
    sht.range('A' + str(i) ).value = row["屋号"]
    sht.range('B' + str(i) ).value = row["住所"]
    i = i + 1
```

できたー

![image.png](https://qiita-image-store.s3.amazonaws.com/0/149269/9939c528-82a5-5a5e-95f9-67654e2ae6e8.png)


## Todo

あとは、住所を`住所１（都道府県）、住所２（市区町村）、住所３（その他）`に`python`で分けたい。


### 参考


[Python(Xlwings)を使ってExcelを操作してみる](https://qiita.com/katzhide/items/8e37f4077950f7d6e7e2)




[pythonでのcsvファイルの読み込み](https://qiita.com/motoki1990/items/0274d8bcf1a97fe4a869)