VBAでシコシコ自動化しているやつ、Pythonを覚えろ! Pythonで「脱VBA」する方法

■ このスレッドは過去ログ倉庫に格納されています
0001エアロモナス(宮城県) [US]2020/02/09(日) 12:28:46.70ID:uhkBIXIL0●?PLT(13121)

Pythonで「脱VBA」、Excelの行番号を記述せずにセルを指定する方法

Excelデータをプログラムで扱うのなら、プログラミング言語はVBA(Visual Basic for Applications)が定番です。
しかし必ずしもVBAを使う必要はありません。筆者はPythonを使ってExcelデータの操作を自動化することを
お勧めします。Pythonを使えば「脱VBA」を進められます。

PythonでExcelデータを操作するには、前回までに解説してきたように、行/列を指定してワークシートのセルに
アクセスするのが基本です。ワークシートはイテラブル・オブジェクトとして行を返しますし、行も同様にセルを返します。
イテラブル・オブジェクトを活用すれば、直接行番号、列番号を記述せずに読み込むセルを指定することができます。

sample.xlsxというExcelファイルを作って、動作を確かめてみましょう。Excelファイルは「.¥data」フォルダーに入っているとします。

https://tech.nikkeibp.co.jp/atcl/nxt/column/18/01174/011700003/3_25.jpg

このファイルのワークシートには、データはA1からF5まで整然と入力されています。

次のプログラムを使うと、sample.xlsxを読み込んでworkbookのsheetからrow(行)を取得し、rowからcell(セル)を
取得して順に出力していくことができます。

https://imgur.com/BO5ZQ51.jpg

■対象のワークシートから、データ範囲を自動で取得するプログラム

このコードを、Pythonの開発環境、ここでは「Visual Studio Code」で入力し、動かしてみます。処理結果を、
画面下部の「ターミナル」で確認してみましょう。

https://tech.nikkeibp.co.jp/atcl/nxt/column/18/01174/011700003/3_26.jpg

ワークシート上の各行のセル内容が、列順の通りに1行ずつ出力されていることがわかります。
このようにデータが1つの範囲(Range)に規則的に入力されている場合は、for row in sheet:でデータ範囲の
各行での繰り返しを指示し、for cell in row:で処理対象の行のセルに順にアクセスすることができます。
異なるファイルから読み出す時でも、いちいち「どこからどこまで」をプログラムで記述し直す必要はありません。便利ですね。

でも、データが整然と並んでいなかったり、データのないセルが範囲内にあったりする場合はどうなっているのでしょうか。
列の終わり、行の終わりをどうやって判断しているのか、調べてみましょう。

続きはソースで

https://tech.nikkeibp.co.jp/atcl/nxt/column/18/01174/011700003/

0468シネルギステス(埼玉県) [US]2020/02/11(火) 11:21:50.87ID:o065ZKzR0
>>93
悪いけどお前の言ってること頭からお尻まで間違ってるぞ

0469テルムス(新日本) [FR]2020/02/11(火) 11:42:26.71ID:xCNKDwsk0
>>287
ファイル共有ソフトとかで内部情報流出とかはライセンス料くらいでどうこうならない事態になるけどな

0470エアロモナス(東京都) [US]2020/02/11(火) 11:49:34.08ID:Fhw2ddIl0
開発用の端末はセキュリティー関係でネットに繋がらないから
Pythonは入っててもパッケージがダウンロードできないからExcelは操作できない
てかわざわざPythonで作るメリットが何もないじゃん

AI関係で人気があるのかもしれんが、案件自体はほとんどないって聞いたぞ>Python

0471デスルフロモナス(新潟・東北) [KR]2020/02/11(火) 12:01:46.18ID:t7th26Vi0
エクセルのvbaはもともと完成している
エクセルを操作するだけだから、
何をやるにも簡単なんだよな

やりたいこともその程度のことだし

0472スフィンゴバクテリウム(東京都) [DE]2020/02/11(火) 12:49:48.02ID:Sn8obJNA0
>>470
今時開発用PCがネットに繋げられないなんて特殊な環境か原始時代だと思った方がいいぞ

0473メチロフィルス(光) [ニダ]2020/02/11(火) 12:52:44.12ID:h9bPy8pt0
最近、VBAが他のファイルから実行出来る事を知った(´・ω・`)

0474ディクチオグロムス(大阪府) [US]2020/02/11(火) 12:56:00.62ID:/My9aEQL0
>>438
ブロック内で定義された変数がブロック外でも使用できるって話か?
よう分からんがifは新たなスコープを作らないとかルールがあるんかな

0475カテヌリスポラ(東京都) [ニダ]2020/02/11(火) 12:56:30.27ID:ClScKKxH0
>>473
意外と気づきにくいんだよな

0476クロロフレクサス(東京都) [CN]2020/02/11(火) 13:00:01.87ID:wy/WWpDt0
代える理由がない

0477エルシミクロビウム(東京都) [US]2020/02/11(火) 13:57:11.56ID:obbqNpJ20
>>451
列番号をマジックナンバーにするな、ってことでは

0478エルシミクロビウム(茸) [PL]2020/02/11(火) 17:54:40.11ID:YGz8p7xW0
>>203
マージするときは、エクスポートして、マージして、インポートか?

0479シュードノカルディア(福岡県) [US]2020/02/11(火) 18:31:50.93ID:e1kPwU6k0
>>478
VCSにはテキスト形式で入れるに決まってるだろ

0480ヴィクティヴァリス(神奈川県) [ニダ]2020/02/11(火) 18:44:17.10ID:f/IbjkPG0
>>478
まぁそうすることになるな。
そんなことをしているうちに、VBAごときをソース管理しようということが間違っていたと気づく。

0481シュードアナベナ(空) [FR]2020/02/11(火) 19:28:22.35ID:OfRlWhYM0
VBAで出来なくてPythonじゃないと出来ない事ってあるの?
管理が煩雑になるくらいならVBAの方が良くね?

0482テルムス(新日本) [FR]2020/02/11(火) 19:33:55.55ID:xCNKDwsk0
>>481
AIとか機械学習とか統計とか
データ分析の難しいのは
VBAでやると面倒くさいかもしれない

画像処理とかも

0483アコレプラズマ(光) [FR]2020/02/11(火) 20:39:23.27ID:hCtFK2Zi0
じゃVBAで良いじゃん。意味が分からん。

0484ヴェルコミクロビウム(奈良県) [EU]2020/02/11(火) 20:52:00.97ID:K4oQYAtf0
パイソンでエクセルファイルをいらうのって、
エクセルアプリ越しにいらうの?
それともファイル形式を把握していて直接
ファイルをいらってるの?

もし直接なら、エクセルの代わりにキング
オフィスでよくね?
画期的じゃね?

0485エアロモナス(茸) [US]2020/02/11(火) 21:06:21.32ID:nUkSWl1g0
>>482
ExcelVBAにそんな難しいことをやらせようとは思ってない。
ふだんの仕事でめんどくさいと思ってることをちょっと楽したいって程度で使ってる。

0486テルムス(新日本) [FR]2020/02/11(火) 21:10:39.41ID:xCNKDwsk0
ファイルのフォーマットを壊さないように保存できればなんで処理したって問題ない
読み取るだけなら壊れることはない
別ファイルに保存するのも

結果ファイルを他の人と共有して
見た目も同じにするにはPDFにするのが一つの方法

他の人も編集できるようにするには
Googleスプレットシートとかでも良いんじゃね

編集とかの作業のし易さ、学習コスト、機能とか、ライセンス価格とかが考慮要因かな

0487テルムス(新日本) [FR]2020/02/11(火) 21:12:27.34ID:xCNKDwsk0
>>485
VBAにできなくてPythonでやり易いことの例を挙げただけだが?
何に使っているかなんて人それぞれだからな
あなたは使っていないかもしれないけど
世の中にはVBAでゲーム作る人もいたりする

0488ナトロアナエロビウス(東京都) [ヌコ]2020/02/11(火) 21:20:07.14ID:1CwOUfwk0
>>451
いや、恐らくはrowに値を格納する処理は別途記載されてるんだろう

問題は275という、いわゆるマジックナンバーだと思う
何だこれ?ってなるし、誰かが元のシートの列を弄ったらこのコード自体が即死ぬからな

0489ナトロアナエロビウス(東京都) [ヌコ]2020/02/11(火) 21:23:32.97ID:1CwOUfwk0
>>481
ExcelやAccessのファイルの操作に関しては、Pythonでないと実現できない機能ってのはほぼ無い

0490シュードアナベナ(庭) [EU]2020/02/11(火) 21:44:02.82ID:TAX22Md40
>>466
今は良くても
今後入ってくる若い子に
メンテとか改善とか任せられるかと言われりゃ
NOでしょ

もう会社終わって
家でプログラム勉強したりする子はいないし
俺らがすんなり習得できたのも
大学から似たようなことしてたから
このままじゃ俺ら
「解読できないプログラムを残した老害」
と若者に言われるぜ

0491シントロフォバクター(神奈川県) [US]2020/02/11(火) 21:46:48.02ID:L1JCjX1H0
>>490
そういうことじゃないんじゃね。
それは単に、脱する必要が無いVBAを使える人が少なくなったってだけで。
最近の人がスマホばっかいじってPCに慣れてないのと同じで。

0492シュードアナベナ(庭) [EU]2020/02/11(火) 21:57:46.18ID:TAX22Md40
>>491
少なくなったんだから
若者でもすんなり学べるシステムに移行した方がいいってだけよ
便利だから!自分達はこれに慣れてるから!
のままだと本当に老害になっちまう

0493ロドスピリルム(千葉県) [CA]2020/02/11(火) 22:35:19.29ID:mNy2JpnB0
>>287
rowと言うプロパティが有るのに、変数として使ってるのかw
ちゃんと動くのかな?

0494フランキア(千葉県) [US]2020/02/11(火) 22:47:48.67ID:GMPZVRp+0
>>55
配列のルールは良かれと思って導入した割に混乱のみを発生させたよな。

0495シントロフォバクター(神奈川県) [US]2020/02/11(火) 23:14:03.51ID:L1JCjX1H0
>>492
>>490は若者はプログラムを学ばないという前提だろうw

0496アルテロモナス(神奈川県) [US]2020/02/11(火) 23:21:43.35ID:ozgPnVvD0
officeが正式にpythonを採用するまででVBAは現役じゃないかな
まだ当分先の話

0497グリコミセス(千葉県) [US]2020/02/12(水) 00:28:08.51ID:WnRVqVvK0
>>299
だよなあ。こんなところでクソコメ連投してないで修正すればいいのにな。

0498ストレプトミセス(福岡県) [US]2020/02/12(水) 03:29:14.16ID:xp23HMcA0
>>482
> AIとか機械学習とか統計とか
> データ分析の難しいのは
> VBAでやると面倒くさいかもしれない

やりたいことが違ってるんだわ


やりたいこと・・・いつもやってることをVBAで自動化したい
>>1のPythonとか言ってるやつ・・・Excelをデータ入力 or 出力のフォーマットとして利用したい

VBAで作業を自動化したいと言ってる人に対して、
Pythonでエクセルファイルを読み書きしたいんだなと
勘違いして別の話をしてる。

0499クロマチウム(埼玉県) [DE]2020/02/12(水) 07:34:11.37ID:EdG9m0la0
>>186
LibreOfficeかOpenOffice使えば使えるのに>VBA

0500クテドノバクター(ジパング) [ニダ]2020/02/12(水) 07:43:09.42ID:p72DidXu0
今VBAでできる事をPythonでやる事にどんだけ需要あんの?
VBAは知らんがPythonは知ってるから、だとか、ドヤァしたいだけ?

0501テルモリトバクター(茸) [ニダ]2020/02/12(水) 08:30:51.71ID:4avXDNMQ0
わざわざpython使わないでもdll経由でc#やpsh使えばすぐ出来るじゃん。

0502テルモリトバクター(茸) [ニダ]2020/02/12(水) 08:33:09.30ID:4avXDNMQ0
>>500
VBAはOfficeのプログラム内で動くもの
pythonやc#の場合、PC内で使えるライブラリを経由してexcelを開かず文書操作
JavaScriptの場合はoffce online 上に保存された文章をweb経由で編集

0503クロマチウム(ジパング) [US]2020/02/12(水) 08:59:44.77ID:XO+P/UJ30
>>502
ならVBAとJavaScriptを知ってれば完璧だは

0504テルモミクロビウム(日本) [ニダ]2020/02/12(水) 09:52:00.91ID:NqSNNGri0
Webページ、具体的にはメルカリの売上履歴
を取り込んで、それを会計ソフトに取り込みできるCSV形式にして
保存するにはどうしたらいいんだ?
可能ならば、出力する行を選べたり、1月〜3月の間だけ出力するように設定を行うUIも作りたい

VBAがええんか?Pythonがええんか?

0505アナエロリネア(新日本) [FR]2020/02/12(水) 10:01:58.61ID:jrZoNomc0
>>498
VBAで自動化できることは大体Pythonでも自動化できるんじゃないかな
さらにVBAではやりにくい事もPythonで出来るようになる

0506アナエロリネア(新日本) [FR]2020/02/12(水) 10:03:07.85ID:jrZoNomc0
>>500
Pythonのライブラリを使える

0507アナエロリネア(新日本) [FR]2020/02/12(水) 10:06:14.06ID:jrZoNomc0
>>504
どっちでもできるんじゃね?
自分の得意不得意とか、他の人も修正するかとか、他にやりたい事とか、考えて選択

0508メチロフィルス(京都府) [ニダ]2020/02/12(水) 10:07:06.05ID:t0qhDHTK0
俺ものこの前会社の同僚と似たような話ししてたからタイムリーなスレだわw

0509テルモミクロビウム(日本) [ニダ]2020/02/12(水) 10:19:15.33ID:NqSNNGri0
最近発売されたけど、この今更感がいいよね
名書と評価の高いパーフェクトPHPと同じシリーズ

パーフェクトExcel VBA
https://gihyo.jp/book/2019/978-4-297-10875-5
http://image.gihyo.co.jp/assets/images/cover/2019/9784297108755.jpg

0510スフィンゴモナス(神奈川県) [US]2020/02/12(水) 10:23:18.23ID:XWgwTgxr0
>>19
今や英米の高偏差値大学卒業してるやつなら
エンジニア専攻じゃなくてもふつうにpython
つかえるから。
そいつらを取り込むためにMSが対応させた。

エクセルが業務で必須スキルになってる遅れた日本とは違うんだよ

0511クロロフレクサス(新潟県) [ニダ]2020/02/12(水) 10:29:26.54ID:iVIx3VSQ0
VBAはあくまでもEXCELを便利に使う道具だから
他の言語で処理したほうがいいとかいうのは
単にEXCELの全否定じゃないの

0512アクチノポリスポラ(東京都) [DE]2020/02/12(水) 10:30:27.40ID:kCRlJW5M0
>>504
言語で言うならJavaScript(Node.js)。
Headless Chrome で HTML 上の解析や
会員制業務サイトへのログインは自動化
できる。

出力のcsvなんてのはどんな実装からでも
問題なく作れる。

振る舞いを変える部分を画面にしたいなら、
設定ファイルをini形式にして、c#で編集
画面を作るのが簡単。

0513スフィンゴモナス(神奈川県) [US]2020/02/12(水) 10:30:36.96ID:XWgwTgxr0
>>412

これ日本の悪いところだよな。
改善すればするほど仕事が増えるってやつ。
外資だと、仕事の割当は一緒で増加量も一定だから
効率化すればするほど楽になって
それができないやつが落ちこぼれてクビになる。
こっちが正しいよな

0514アクチノポリスポラ(東京都) [DE]2020/02/12(水) 10:32:12.91ID:kCRlJW5M0
>>505
アプリ内にマクロエンジンがあるのと
ライブラリ経由で独立した実装から
操作するのはできることが全く違う。

0515スフィンゴモナス(神奈川県) [US]2020/02/12(水) 10:32:31.40ID:XWgwTgxr0
>>511
エクセルもVBAも海外では見放されつつあって
わざわざエクセル使うためにVBA覚えてくれる人がいなくなってんだよ。
だから将来的にはVBA自体が脇に追いやられてJSになるし

0516ユレモ(空) [CN]2020/02/12(水) 10:56:12.95ID:gY1VBaCb0
JavaScript最強伝説

0517カルディオバクテリウム(東京都) [US]2020/02/12(水) 11:15:18.01ID:9qeCCXT20
>>515
図はvisioで作った方がいいしスケジュール管理はproject使えばいいしグラフ化分析ならpowerbi使った方がいいし

0518グリコミセス(東京都) [US]2020/02/12(水) 11:23:52.53ID:QFb2UmKF0
前からあるものは悪、新しければ新しいほど善
IT業界にはびこる謎の風潮(そして大体新しいものの方が先に消えていく)

■ このスレッドは過去ログ倉庫に格納されています