はーい。
さいきんクラウドソーシングで遊んでいます。
Excelの案件が結構あって、VBAの案件がそこそこあります。
スプレッドシートであれば、GASの案件がまあまあと言う感じです。
一般事務とITエンジニアの境目にあるツール、それがExcelだなと思います。
それで、ざっと案件を眺めてみると、「それ、Pythonでやったら一発で済むんじゃないか???」というものも多いです(偏見)。
目的地にたどり着けさえすれば手段は何でもいい場合、Pythonでやれば話が早いかもしれません。
「いやだ! 絶対にVBAでやるんだ!」とか「会社/上司の監視が合ってなかなか自分のツールにPythonとか入れられない」みたいな事情がない場合は、Pythonを頼ってみるのも悪くない選択肢だと思います。
CSVを読み込んでフィルタ+列追加
VBAのイメージ
Sub FilterAndCalc()
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("Sheet1")
Dim lastRow As Long
lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
Dim i As Long
For i = 2 To lastRow
If ws.Cells(i, 3).Value = "有効" Then
ws.Cells(i, 5).Value = ws.Cells(i, 3).Value * ws.Cells(i, 4).Value
Else
ws.Cells(i, 5).Value = ""
End If
Next i
End Sub
Pythonのイメージ
import pandas as pd
df = pd.read_csv("input.csv")
df = df[df["状態"] == "有効"].copy()
df["売上合計"] = df["単価"] * df["数量"]
df.to_csv("output.csv", index=False)
読めない? 実は、読めなくても結構問題ありません。
ChatGPTが大体読めるからです。
そりゃあ、ちょっと、要件を読み落としてデータがぶっ壊れるとすごい困りが発生するわけですが、このVBAが読める人はこのPythonも読めてしかるべきですし、元コードがあるなら結果を比較しながらちゃっちゃとやることもできると思います。
まあ、注意は必要で、ソート順が思ってたのと違ったり、空白文字の扱いが違ったり、結構大規模なものを移植しようとすると罠が潜んでいることもあります。
また、コピペで動かそうとするとそうはいかず、Pythonの環境を作ってから、
pip install pandas
とか、
pip install openpyxl
とかして、必要なモジュールをpip installしていかなくてはならないですね。
(コンソール画面がしんどいひとには難しいです。)
Excelの作業にPythonを使用すると、びっくりするほどコトが簡単に済みます。
しかしExcelを事務作業でのみ使っている層はなかなかPython(プログラミング言語)までリーチしていません。せっせと難易度の高いVBAを弄っている印象があります。
なんでなのか、というと、実際の難易度というよりは、アクセスの良さなんじゃないかと思っています。VBAはExcelから開けるけど、Pythonはちょっとね。Python本体を入れたり、VSCodeを入れたりしないとだめだからね。
Pythonを使うとちょ~ちょ~ちょ~早いのです。
例として、Excelファイル(実際にはシート1枚のCSVファイル)をドンして最終的にHTMLのテーブルにガッするお仕事があったのですが、Pythonなら秒とは言わないまでも数分+手直しで済むなあ、と思いました。ただ、Pythonのない人にも使えるようにしなくてはならなかったのと、もともとExcelだったので、VBAでやりました。
しかし、私自身がITエンジニアだからそう思うのかもしれませんが、VBAよりもPythonのほうがはるかに簡単です。
AIの登場によってだいぶこの差(Pythonわからない)も縮まるようになってきたので、ChatGPTでドンッできる人はドンッしても良いと思います。
あるいは、ツールを提供する側の人は、PythonをPyinstallerでexeにしてやるのもいいですね。まあ、ちょっとブラックボックスになっちゃって、弄れないんですが。
一回やれば簡単だから。みんなやってるから。