itB!HatenaCopyどうも、Econです。Pythonプログラミング初心者の私ですが、がエクセル操作をVBAではなくPythonでやってみた記録を残してみました。私はエクセルで家計簿をつけており、色々な関数を設定したり、VBAでコードを書いてカスタマイズしてきたのですが、最近これをシンプルにしたいと思っています。収支や資産額の入力は今でもそんなに負担ではありませんが、「もっと楽に、もっとシンプルに」が合言葉です。そのためにはVBAでコードを書いて作業を自動化すればいいのですが、今回はPythonでコードを書いてみました。最近プログラミングが人気ですね。中でもPythonは特に人気が高く、大きな本屋ならPCコーナーにPythonの本が平積みされています。オライリーの『退屈なことはPythonにやらせよう』という本*が売れているようで、全ホワイトカラーはこの本を読むべき、と言った人がいるとかいないとか。故ジョブズもアメリカの全国民はプログラミングを学ぶべき、と言っていたようですね。私はプログラマーではありませんが、Pythonでコードを書く経験を積んでおけばそれがいずれ役に立つだろう、という淡い期待を持ちつつ、今回はVBAではなくPythonで書いてみた次第です。*サイトで本の内容が公開されています。英語を読むのが苦でなければ必要に応じてこのサイトを参照すればいいかも。私も本は買わずにこのサイトをちょくちょく見ています。Python”で検索すれば出てくるかと。振り返り今回やったこと私のエクセル家計簿では、入力シートに日付、費目、金額などを入力していて、一か月ごとの収支や予算配分のために日付セルから年月日情報を引き出しています。Month関数を設定していたのですが、1万行を超えてくると少し挙動が悪くなってきます。プログラムで日付セルから年月日情報を取り出し、それを値として入力するというプログラムを組みました。下の図がコードの全容です。情報が入力されている最終行を取得。年月日情報を抽出し転記1行ずつ上にずれて、年月日の抽出が終わっている行まで2を繰り返すという内容です。ポイントは、上から順に見るのではなく、下から見て行って年月日の抽出が終わっていない行のみに処理をするというところです。年月日の抽出が終わっていないものは多くても最後の十数行ですが、プログラムを回すたびに1万行のデータを上から全て見ていくのは負担ですからね。この手法はVBAではEnd(xlDown)やEnd(xlUp)などでよく使われますが、このプロパティはPythonにはありません。似たmax_rowを変数に使っています。Day関数が1万行に入っていたのですが、それが全て値に変わったことで、ファイル容量が400kbほど縮小化されました。完全に自己満レベルですが、僅かでもスリム化したのは嬉しいです。今後改善したいこと本当はclassなどを使えばもっとシンプルに書けるのかもしれませんが、それを組み込もうとするとコードの実装に時間がかかりそうなので、必要に応じてコードをアップデートしていきます。将来的には現在VBAで書かれているマクロを全てPythonで外出ししてマクロ有効ファイルから通常のエクセルファイルにしたいです(拡張子をxlsmからxlslへ)。振り返りこれまで写経でPythonプログラムはいくつか作ってきましたが、恥ずかしながら、実用で作ったのはこれが記念すべき第一号です。学習したことをアウトプットして実生活や仕事を改善しなきゃ意味がないですからね、インプットしたことはこれからもどんどんアウトプットしていきたいと思います。行ってるけど、Pythonって何ができるの?」という感じでしたが、今はPythonでできることのイメージは持てるようになりました。これからは一つでも多くコードを書いて頭にあるイメージをどうやって実現していくかというフェーズです。機械学習で自分のポートフォリオの期待パフォーマンスとか計算してくれないかなー。プログラムが止まったぞ。デバッグが必要かな、ちょっと見てみよう。人気ブログランキング最後まで読んで下さりありがとうございます。面白かったらフォローしてもらえると励みになります。