木戸めぐるの巡回動機

~副題はまだない~

Python初心者が「Excelのデータを読み込むプログラム」を作成する

プログラム開発言語をマスターするとはどういうことか(哲学)。

ãå²å­¦ã®æ¨å²å­¦ã®æ¨ãã®ããªã¼åçç´ æãæ¡å¤§

私はExcelVBAでマクロ作りを始めてから10年以上経ちますが、未だにマスターしたような気分になれません。

 

マスターする=極めるという意味なら、個人的に「開発言語を極めることはできない」と思うのです。「極めるとはこういうことだ」と言ってみたいですが。

いくら上達しても上には上がいるはずなんです。

しかし、誰かより下だからと言って、自信を無くすことはないはず。

複雑な要件のプログラムであっても作れるという自信が芽生えた時、ようやく「○○言語でプログラムが作れます」と言っても許されると個人的に考えます。

 

閑話休題

 

今回は、「保存済みExcelから値を取得する」という要件のプログラム作りに挑みます。

以前の記事では「PythonExcelブックへの書き込み」を行うプログラムを作りました。

kidomeguru.hatenablog.com

今回はその逆で、「ExcelブックのデータをPythonプログラムに取り込む」をやってみます。

それでは、始めましょう。

 

前準備 pipでOpenPyXLをインストールする

(以前の記事でも書いた手順ですが、再度記載します)

 

以下、Pythonがインストールされている状態でのpip利用手順です。 

手順① コマンドプロンプトを起動する (WindowsOSの場合)

Winキー+Rキー → 「cmd」と入力してEnter

f:id:kidomeguru:20181101130138p:plain

スタートメニューから起動してもOKです。

 

手順② 「pip install openpyxl」と入力してEnter

f:id:kidomeguru:20181101131204p:plain

自動的にOpenPyXLのインストールが始まります。

『>』マークの後ろでカーソルが点滅するようになったら、インストール終了です。

 

 手順③ 「pip freeze」と入力してEnter

これでインストールされているPythonライブラリが確認できます。

「openpyxl」が表示されていれば問題ありません。

f:id:kidomeguru:20181101131442p:plain

これにて「OpenPyXL」ライブラリのインストールが終わりました。

 

データを保存したExcelファイルを用意する

以下のような値の入力されたExcelブックを用意します。

f:id:kidomeguru:20181111224435p:plain(data.xlsxのSheets1シートの中身)

保存場所はパブリックユーザーのドキュメントフォルダです。

f:id:kidomeguru:20181111231658p:plain

 

pyファイルを用意する

拡張子pyのファイルにPythonソースコードを記述しますので、そのファイルを作成しましょう。

 

エクスプローラの表示タブで、「ファイル名拡張子」の項目にチェックを入れてください。すると、エクスプローラでファイルの拡張子が表示されます。

f:id:kidomeguru:20181111232048p:plain

エクスプローラで右クリック→新規作成→テキストドキュメントを選択します。

ファイル名を「read_xlsx.py」という名前にします(test.pyなどでも可)。

f:id:kidomeguru:20181111232315p:plain

警告メッセージが表示されますが、「はい」を選択します。

f:id:kidomeguru:20181111232353p:plain

すると、ファイル種類が「Python File」のファイルが出来上がります。

f:id:kidomeguru:20181111232433p:plain

 

pyファイルにソースコードを記述する

作成した「read_xlsx.py」ファイルにソースコードを記述するには、

右クリック→「Edit with IDLE」→「Edit with IDLE x.x(xx-bit)」を選択します(xは数字に読みかえてください)。

f:id:kidomeguru:20181111233449p:plain

何も書かれていないエディタが表示されます。

f:id:kidomeguru:20181111233554p:plain

そこに、以下のようなソースコードを入力します。

f:id:kidomeguru:20181111234138p:plain

 ソースコードの入力が終わったら、pyファイルはCtrlキー+Sキーで上書き保存して閉じます。

 

Pythonプログラムを実行する

プログラムを実行する場合には、エクスプローラでpyファイルを開きます。

f:id:kidomeguru:20181111234559p:plain

結果、上記のように表示されます。Excelブックの2行目以降の値を2次元リストに取り込むことができました。

Excelと比較してみましょう。

f:id:kidomeguru:20181111224435p:plain

 PythonプログラムはEnterキーを押下すると終了します(Press Any Keyと表示されていますが、気にしないでください)。

 

これにてプログラム完成です。

OpenPyXLは他にもいろんな機能を持っていますし、上記コードももっとスマートな書き方があるようですが、とりあえず今回はこんなところで。

上記のプログラムを、何も参考にせずに書けたら私も自信がつくんですが、まだまだこれからですね。

 

現場ですぐに使える! Pythonプログラミング逆引き大全 313の極意

現場ですぐに使える! Pythonプログラミング逆引き大全 313の極意

 

 

Python初心者が「結月ゆかりにブログ記事を喋らせるプログラム」を作ったので紹介する

先日、長らくお蔵入りにしていた「VOICEROID+ 結月ゆかり EX」のインストールを行いました。

どうしてかというと、Pythonで「結月ゆかりに喋らせるプログラム」を作ることができるという記事を読んで、「自分でも作ってみよう」と思ったから。

blog.sky-net.pw

 

紆余曲折ありましたが、どうにか作ることができました。以下の動画で動かしている様子を見られます。


【ブログ掲載用】結月ゆかりにブログ記事を喋らせるPythonプログラム

 

副産物として、Softalk(通称ゆっくり霊夢)に喋らせるプログラムも作りました。


【ブログ掲載用】ゆっくりにブログ記事を喋らせるPythonプログラム

 

練習用ではなくて、実際に役に立つプログラムを作るとなると、集中力が段違いです。着実にレベルアップしているというか、自己肯定感につながると言うか。

f:id:kidomeguru:20181107202103p:plain

(青空ドヤ顔ボーイ|ぱくたそ)

 

今後は、ブログ記事を書いたら音声も一緒に掲載するつもりです。

基本的に、私の記事は長文です。たぶん、読んでいたら疲れます。

耳で聞ければ、目で追わなくても済むようになります。再生ボタンポチ、は楽です。

 

これを機に、いろいろとブログ運営に役立てられるプログラムをつくっていきたいですね。

 

以下の書籍を、Webスクレイピング(ブログ記事の読み込みなどできる機能) づくりの参考にしました。

 

 

Python初心者がPythonで「読みにくいソースコードのプログラム」が作れるか挑戦する

PythonVBAを比較してみる記事第2弾です。

第1弾はこちら↓。

kidomeguru.hatenablog.com

 

【目次】

Pythonプログラミングの面白いところ

Pythonというプログラム開発言語は、

「誰が書いてもほぼ同じようなプログラムソースコードになる」

という面白い特徴を持ちます。

(プログラムソースコードとは「特定のプログラム開発言語で記述された命令文の集まり」)

ãæ©ã¿ãé ­ããããããç·æ§æ©ã¿ãé ­ããããããç·æ§ãï¼»ã¢ãã«ï¼å¤§å·ç«å¼¥ï¼½ã®ããªã¼åçç´ æãæ¡å¤§

プログラム開発言語に詳しい方ならご存知でしょうが、その界隈では「VBA」は好かれていない、というか嫌われている言語の代表格として挙げられることが多いのです。

理由は多々あると思いますが、そのうちの1つが「読みにくいプログラムが量産されやすい」というものです。

 

読みにくいコード、読みやすいコード

実際に、VBAで「西暦の年を入力したら平成の年を求める」というプログラムを書いてみます。

f:id:kidomeguru:20181104060942p:plain

プログラムを実行すると、入力画面が現れます。

「2018」と入力してEnterを押すと・・・

f:id:kidomeguru:20181104062830p:plain

以下のように平成の年を求めることができました。

f:id:kidomeguru:20181104062928p:plain

 

続いて、上記のプログラムを読みにくく書いてみましょう。

f:id:kidomeguru:20181104061404p:plain

これ以上読みにくくすることもできますが、私の精神にあくえいきょうがでそうなのでこれぐらいで……うごごご。

 

VBAの場合、上記2つのプログラムは、どちらの書き方であってもプログラムに求められる要件(西暦から平成の年を求める)は満たします。

読みやすくても読みにくくても動作するゆえ、「読みやすく書かなくても動けばいい」という考えで作られることがあります。

 

Pythonで読みにくいソースコードのプログラムは作れるか?

結論から言うと、無理でした

f:id:kidomeguru:20181104064523p:plain

Pythonの上級者なら読みにくくする方法も知っているかもしれませんが、初心者の私ではなるべく読みにくくしても上記のようにすっきりしたソースコードに。

f:id:kidomeguru:20181104065039p:plain

 

Pythonはコーディングに関する制限がVBAより多いのに、書きやすくなるように設計されているという、「そりゃあ好かれるわな」という凄い言語でした。

 

VBAで読みやすいソースコードを書く方法は、以下の書籍がわかりやすくてオススメです。この本↓は別ですが、なんでプログラミング関連書籍って論理的だけど冗長的な文体で書かれているんでしょうか……

ExcelVBAを実務で使い倒す技術

ExcelVBAを実務で使い倒す技術

 

 

Python初心者が「PythonでExcel操作するプログラム作り」に挑む

Python学習が本業のように思えてきた、Python初心者です。

本業の方がマンネリ化してきたせいもあるかもしれませんが……

 

もし、「副業禁止」を定めている会社に勤めている人が、

「ここでの仕事が副業です」って言ったらどうなるんでしょう?

面白そうではありますが、試す気にはなりません。

説æãåãããªã人ã®ã¤ã©ã¹ãï¼ç·æ§ä¼ç¤¾å¡ï¼

「ここでの仕事が副業です」

「お前は何を言っているんだ」

 

閑話休題

 

本日は私が日々使っている「Microsoft Excel」を、Pythonから操作するプログラムを作ろうと思います。

「やってみたい」とは思っていたのですが、Pythonの条件分岐と繰り返しを学習するまではやらないでおこう、というこだわりにより、これまで取りかかれませんでした。

 

「AI Academy」で条件分岐と繰り返しは学習してきたので、ようやく本日やってみようという運びになりました。

aiacademy.jp

それでは、始めましょう。

 

どうやってPythonExcelを操作するの?

Pythonのライブラリを使用して、Excelを操作します。

 

コンピュータ・プログラミングの話で「ライブラリ」と言った場合、リアルに置き換えて表現すると

DIY用のいろんな道具が入っているツールボックス

みたいなものです(例えは大体合ってます、たぶん)。

f:id:kidomeguru:20181101124351p:plain

ハンマーやノコギリを駆使して、カットした木材を釘で固定してやれば、(見た目はともかくとして)椅子が出来上がります。

 

Pythonという開発言語では(他の言語でもそうですが)、このライブラリを利用して色んな機能を実現するプログラムを作ることができます。

 

今回Pythonで使用するライブラリは「OpenPyXL」です。

以下のサイトを参考にして、ライブラリをインストールしていきます。

tonari-it.com

 

pipでOpenPyXLをインストールする

pip(ピップ)とは、Python公式のパッケージ管理ツールで、こいつを使えばライブラリを使用可能になります。

インストールと同時にそんな便利なものを付けてくれるなんて、Pythonは初心者に優しいですね。

 

ただし、pipはPythonをコンピュータにインストールしないと動作しないので、注意です。

Pythonのインストールから始めたい方は以下のサイトを御覧ください。

techacademy.jp

 

以下、Pythonがインストールされている状態でのpip利用手順です。

 

手順① コマンドプロンプトを起動する (WindowsOSの場合)

Winキー+Rキー → 「cmd」と入力してEnter

f:id:kidomeguru:20181101130138p:plain

スタートメニューから起動してもOKです。

 

手順② 「pip install openpyxl」と入力してEnter

f:id:kidomeguru:20181101131204p:plain

シークバーが100%になり・・・

f:id:kidomeguru:20181101130658p:plain

なにやら英語で話しかけられました。

f:id:kidomeguru:20181101130828p:plain

詳しくはわかりませんが、「Successfully」の文字があるからインストール成功だと思います。

 

 手順③ 「pip freeze」と入力してEnter

これでインストールされているPythonライブラリが確認できます。

「openpyxl」が表示されているから大丈夫そうです。

f:id:kidomeguru:20181101131442p:plain

 

[余談] ライブラリをアンインストールするには「pip uninstall ライブラリ名」と入力します。今回はやりませんが。

 

これにて「OpenPyXL」ライブラリのインストール終わりました。

続いてPythonプログラムを作ります。

 

Excelファイルを名前を付けて保存する

excel_control01.py」というプログラムを書いて・・・

f:id:kidomeguru:20181101133611p:plain

 実行すると、プログラムと同じフォルダに「test」というexcelファイルが作られました。成功です!

f:id:kidomeguru:20181101133730p:plain

 

ちなみに、ファイルの保存先を絶対パス指定するなら、以下のようにします。

f:id:kidomeguru:20181101134935p:plain

 

Excelシートを追加して値を書き出すプログラムを作る

Excelブックを作成→文字をセルに入力→シート追加→文字をセルに入力→上書き保存」するプログラムを作りました。以下はソースコード

f:id:kidomeguru:20181101152729p:plain

実行すると、「test」というExcelファイルが作成されます。

 

「test」を開くと、Sheetシートに文字列が縦方向に一文字ずつ入力され、

f:id:kidomeguru:20181101152915p:plain

Sheet1シート(追加したシート)には文字列が横方向に一文字ずつ入力されていることを確認できました。

f:id:kidomeguru:20181101153027p:plain

 

PythonExcel操作するプログラムを作った感想

調べることに疲れました。

プログラム自体は作れましたけど、普段ExcelVBAでやっていることを他の言語でやるのって大変です。

調べたいことは中々見つからないし……

ええ、まだまだ勉強が足りませんね!

 

現場ですぐに使える! Pythonプログラミング逆引き大全 313の極意

現場ですぐに使える! Pythonプログラミング逆引き大全 313の極意

 

 

脱力しきったPython初心者が「乱数」を用いたプログラムを作る

今日は夕食を食べすぎました。お腹いっぱいで頭が弛緩しています。

長文が書けそうにないので、今回は「乱数」「繰り返し処理」で簡単なPythonプログラムを作ります。

 

「乱数」とは

ランダムな数のことで、次に何がでるか予測のつかないものです。

ゲームプログラミングではこれが頻繁に使われるそうです(ゲームを作ったことがないので聞いただけです)。

 

で、Pythonでこの乱数を使用する場合、以下のようにコーディングします。

f:id:kidomeguru:20181019203016p:plain

1行目でrandomモジュールをプログラムで使用できるようにします(インポート)。

 

2行目ではrandom.randintメソッドを呼び出します。

(1,99999)は、random.randintメソッドの引数で、1が乱数の最小値、99999が乱数の最大値です。つまり、1~99999の範囲の値をランダムで生成することができます。生成された値は変数「r」に格納されます。

 

「繰り返し処理」とは

プログラムの処理を決められた回数、もしくは条件を満たしている(または満たさない)間、同じ処理を繰り返し行うものです。前者の場合は以下のようにコーディングします。

f:id:kidomeguru:20181019204114p:plain

Pythonではfor文と呼ぶらしいです。VBAではForステートメントと呼びます。

上記のコードでは変数「cnt」が0~9の間同じ処理を繰り返します。

(1~10で繰り返したければ、range(10)→range(1,11)と書き換えます)

 

今回作るプログラムの内容は?

「これまで食べたパンの数」をたずねられたら「○○枚だ」と返します。

私はジョジョガンダムWも好きです。

 

出来上がったソースコードはこちら。

f:id:kidomeguru:20181019210546p:plain

10回繰り返す中で、生成した乱数を加算してゆき、繰り返しが終わったら集計した乱数の平均値を求めています。

自動的にカラフルになってすごく見やすい。

 

実行した結果

こうなります。

f:id:kidomeguru:20181019210102p:plain

ちなみに枚数ですが、1~99999の乱数なので、実行するたびに変わります。

2回めはこう。

f:id:kidomeguru:20181019210740p:plain

3回めは……と、もういいですね。

 

しかし、コーディングしていてなんだか違和感あるな、と思ったら変数定義していないからですね。

 

今回使用した教科書はこちらです。小難しい解説が少なくて初心者に向いています。その代り、初心者脱出した人にはレベルが低いと感じられるかも。

 

木戸めぐるのツイッターはこちら。

木戸めぐる (@kidoumawari) | Twitter

Python初心者がはじめてのプログラムづくり&はじめてのデバッグ、そして完成

Pythonの教科書を読みながらプログラムづくりします。

教科書はこちら(↓)。  

 

 

氏名と文字列を入力してセリフ形式にして喋らせるプログラムを作る

プログラムを作るために、ソースコードエディターを開きます。

IDLEを起動して、メニュー→File→New Fileを選択。

f:id:kidomeguru:20181015181449p:plain

起動したエディターにコードを入力していきます。

f:id:kidomeguru:20181015190112p:plain

入力が終わったら、ソースコードを保存します。

メニュー→File→Saveを選択。

f:id:kidomeguru:20181015182804p:plain

ダイアログで「Serifu1」という名前をつけて保存します。

f:id:kidomeguru:20181015183020p:plain起動しているPythonのアプリを閉じて、保存したファイルを開きます。

 

保存して実行! が、駄目……っ

やってみたら一瞬だけ黒いウインドウが開くだけで、氏名を聞いてきません。

なんでだろう、と思って再度エディターを開き、F5を押下すると、こんなポップアップが。

f:id:kidomeguru:20181015183919p:plain

・・・よくわかりません、先生。

OKを押すと、なにやら赤く点灯する箇所がありました。

f:id:kidomeguru:20181015184121p:plain

ああ、こうやって間違ったソースを教えてくれるのね。親切。

ただ、ExcelVBAのエディタに慣れていると、全角スペースが挿入されていても無視してくれるので、やりがちなミスです。

 

修正して再実行する

指摘された箇所を直し、ついでに入力待ちのマーク「>」を挿入し、保存し、再度実行します。

f:id:kidomeguru:20181015184652p:plain

やったぜ。

 

そして、3つの入力要求にすべて回答すると・・・

f:id:kidomeguru:20181015184844p:plain

こういう結果(↓)になりました。

f:id:kidomeguru:20181015184942p:plain

 

感想

ExcelVBAと同じような感覚でコーディングすると、今回のようなエラーを繰り返すので、切り替えが必要ですね。

そしてデバッグソースコードエディターでやるとよいとわかりました。

 

f:id:kidomeguru:20181015185643p:plain

Python初心者がVBAとPythonで「Hello」する

Pythonの場合 → Print(‘‘Hello’’)

VBAの場合      → Debug.Print ‘’Hello‘’

 

共通点としては、

・ダブルクォーテーションで囲む

・どちらのPrintも関数である

 

その程度しか浮かばないが、これだけで評価してもPythonが身に付けやすいとわかる。

むしろ短い分、VBAよりその点優れている……?

 

いや、まだ判断するには早計だ。