Excelの文字列から整数&小数を抜き出す(Python OpenPyXL)

Excelってピボットテーブル使った分析でお世話になっているけど、その前にデータクレンジングが必要。

そして、手抜きしてExcelの関数でやろうとすると非常に面倒くさい。

 

B2にある「文字」と「数字」が混じった文字列(空の場合あり)から「数字」だけを抽出したい

例)「文字123文字」→「123」

 

ネットで調べると検索には沢山ひっかかる。

 

で上から順に見ていくと

  • どうでも良いSEO対策向けの長々とした文章
  • 最後まで見ても意図とは異なる文章

「Excel関数」って言ってるだろ!糞検索エンジン!

 

で、何度か検索ワードを変えて、ようやく期待するサイトに辿り着きExcel関数が出来上がり。

 

 

でも、期待結果と異なる文字列もあった。

見てみると「16.6kcal」から「16.6」のように小数点は残してもらいたいけど「166」となってしまった。

そのような場合は、再度検索を継続するんだけど、残念ながら欲しい結果は全く見つからず……

 

 

このように2000年頃から20年間は検索に多くの時間を費やした。

2000年前はExcel書籍で調査するぐらいしか方法無かったけどね。

2023年からはGPTによる検索の時代よ。

Bing GPT先生!お願いします!

Excel関数で「小数点と数字」だけを取り出すには、以下のような関数を使うことができます。

=LEFT(RIGHT(D5,LEN(D5)-FIND(“.”,D5)),FIND(” “,RIGHT(D5,LEN(D5)-FIND(“.”,D5))))

この楽さ!

夢描いていた自動コード生成の世界より2つぐらい前進しちゃった感じがする。

でも、Bing BPT先生、上手く動作しませんぜ?

申し訳ありません。先ほどの関数に誤りがありました。正しい関数は以下の通りです。

=IFERROR(LEFT(D5,FIND(” “,D5)-1)+0,””)

 

いや違うだろ糞ww

 

そもそもExcel関数でやろうと思ったのが間違いだった。

そもそもやりたいこと

成人男性の栄養成分摂取量に対し、普段食べている栄養成分を「引く」ことで、不足している栄養素を把握したい。

 

例)摂るべきタンパク質 = 65g – (2.1g + 8.7g + 6.6g + 3.9g) = 43.7g

「kcal」「g以上」「μg」「小数点」「値無し」など色々とあって計算が簡単にはできない。

Excel関数で簡単に対応できるかな……と思ったけど、Pythonでやる方が早そうだ。

Pythonを使ってExcel上で文字列から整数・小数を抜き出す

エクセルファイルを読み込むには、外部ライブラリのOpenPyXL を利用する。

 

そして文字列から小数点や数字を抜き出すには、不要な文字の対象に「 . 」は含まれないと仮定して次のような書き方ができる。

Python の正規表現で . (ドット) を含む数値のみを抽出したい
文字列から、値部分のみを抽出したいのですが、実現するための正規表現が上手く書けず困っています。 ※とあるデータのなかに、本来は【数値】のカラムがあるのですが、場合によっては「#」や「)」といった文字列が一緒に含まれているレコードがあるため、csv読み込み時に文字列と読み込まれてしまうので、数値部分のみを抽出したいと考え...

 

そしてPythonは「条件式(三項演算子)」「ラムダ式」などが使えるので便利。

で、計算させてできたExcelは次のとおり。

Pythonを使うほうが早かったね。

おわりに

ソースコードと使ってExcel関数は、SEO対策しまくったサイトに簡単なのが少し載っている程度なので、GPTの学習データが足りないのか提案が良くない……のかな?

PythonだとExcelファイルが変わっても再利用が容易だし、今後はPythonでのExcel利用を覚えていこう。

【ソースコード】

タイトルとURLをコピーしました