ALL EXCEL Program Selenium VBA

【VBA】Seleniumリファレンス(逆引き)【まとめ】

VBA×Seleniumのリファレンス(逆引き)まとめ
 
 

初めまして。NakamuraBlog運営者の nkmrです。

selenium×VBAについてGoogle検索しても 的外れなサイトが多かったので、
自分用のメモとして本記事を作成するに至りました。

ぜひブックマークをして利活用 下さいませ。

 
あと、新PC購入時に Seleniumのセットアップについて忘れていたので、
せっかくだから、そこから網羅的に書いております。
Nakamura

必要な箇所を飛び飛びで ピックアップして ご利用くださいませ。

 

VBAでSeleniumを利用するためのセットアップ

Selenium Basic をインストール

まずは以下の手順で PCに Selenium Basic をインストールしましょう。

 

step
1
SeleniumBasicをダウンロード

GitHubの公式ページから 「SeleniumBasic-2.0.9.0.exe」 をダウンロードしましょう。

 

メモ:SeleniumBasicダウンロードURL

 

 

 
 
 

step
2
SeleniumBasicをインストール

ダウンロードした「SeleniumBasic-2.0.9.0.exe」をインストールしましょう。

 

ここでのポイント

SeleniumBasicインストールされるフォルダURL(ディレクトリ情報)をメモっときましょう。

後ほど、すぐに利用します。
Nakamura
 

SeleniumBasicインストールHowTo

 

 
 
 

step
3
SeleniumBasicがインストールされたフォルダを確認

インストールされた SeleniumBasicフォルダを開いて待機しておきましょう。

あとの工程で ChromeDriver の更新をしますが、その更新先がこのフォルダなので開いておきましょう。
Nakamura
 

SeleniumBasicフォルダ

 
 
 

ChromeDriverのセットアップ

step
1
まずは利用中のChromeバージョンを確認

利用中のChromeバージョンに対応した ChromeDriver をダウンロードする必要があるため、まずは確認しましょう。

Chromeバージョン確認方法は以下の画像を参考にして下さい。
Nakamura
 

Chromeバージョン確認

 

はてな

◆質問◆
Chromeバージョンが「89.x.xxxx.xx」ってあるけど、xは何ですか?

◆回答◆
xの部分は、マイナーバージョンと呼びます。一方、記事内の89の箇所は メジャーバージョンと呼びます。
Chromeに限らず、EXCELでも、アプリのバージョン構成は「メジャーバージョン+マイナーバージョン」で表現されることが多いです。

で、今回使用するのは メジャーバージョン なので、そこの箇所を記憶しておいてください。

 
 
 

step
2
ChromeDriverをダウンロード

ダウンロートサイトから 「Chrome Driver」 をダウンロードしましょう。

この際の注意点は Chromeのメジャーバージョンに合った ChromeDriverをダウンロードしてください。

 

メモ:ChromeDriverダウンロードURL

 

ChromeDriverダウンロード

 

注意

Windows 64bit版のPCを利用している方も「chromedriver_win32.zip」をダウンロード下さい。

Windows 64bit用のChromeDriverは、現在 存在しません。でも、問題なく動作するので安心してください。

 
 

step
3
ダウンロードしたZipファイルを開き、SeleniumBasicのフォルダへ移す

SeleniumBasicフォルダ内に 既に存在する「chromedriver.exe」を置き換える形で、
先ほど ダウンロードした ChromeDriver を移し替えて下さい。

雑で申し訳ないですが、画像を参考にちゃちゃっとやっちゃいましょう。
Nakamura
 

ChromeDriver移し替え

 
あと少しで終わります。Seleniumのセットアップを完了させちゃいましょう。
Nakamura
 
 
 

VBE側-参照設定

最後に、EXCEL-VBE側の参照設定を更新しておきましょう。

 

ポイント

Selenium Type Library」にチェックを入れて設定を完了させましょう。

 
この辺は、既に知っている人が多いと思いますので、割愛気味に説明しますね。
主に、画像を見てもらえれば 直感的に分かってくれるかなと。
Nakamura
 
 

 

SeleniumのVBE参照設定

 

 
以上でSeleniumの設定は終了です。お疲れ様でした。
次項からは 動作確認をしていきます。
Nakamura
 
 
 

Seleniumの動作検証

Yahooを表示してみる

伝統的な動作確認方法である「Yahoo」のWebページを表示させてみましょう。

ここまででSeleniumをEXCEL-VBAで使用できる環境は整っています。
Nakamura

VBE上に新規プロシージャを作って、以下のコードをコピペしてください。

 
 
実行ボタン(またはF5キー)を押下すれば、Yahooの画面が出て止まっているはず。
Nakamura

この画面が出れば、動作確認はOKです。

 
 

この画面が表示されていればOK

Selenium動作検証_Yahoo画面

 
期待する画面は表示されましたでしょうか?
Nakamura

もし動作しなかったら後述する方法を試して見てください。

 
 
 

エラーが起きたら

実行環境は PCによってバラバラですから、もしかしたらエラーが発生するかもしれません。

PCを買い換えた時などは、僕も発生したりしました。
Nakamura

一応 僕が経験したエラー内容と解決方法について後述しますね。

想定されるエラー内容

  • ChromeDriverのバージョンが、Chromeのメジャーバージョンと合致していない。
  • 「実行時エラー ‘-2146232576(80131700)’ オートメーション エラーです。」 が表示される
 
 
 

エラー対処①:ChromeDriverのバージョンを確認しよう

ChromeDriverのバージョンとChromeブラウザのバージョンと不一致の可能性があります。

その場合、本記事内にある「ChromeDriverのセットアップ」を再度試してください。

Ctrl+F で「ChromeDriverのセットアップ」と入力すれば、直ぐに飛べます。
Nakamura

もしかしたら、読み飛ばしている人もいると思いますので、念のために記載しておきます。

ココに注意

ChromeDriverのバージョンを確認しよう。

 
 
 

エラー対処②:NET Frameworkをインストールしよう

もしかしたら、このような画面が表示されているかもしれません。

 

こんなエラー表示

【VBA】Seleniumのオートメーションエラーの解消方法

エラー文言:実行時エラー ‘-2146232576(80131700)’ オートメーション エラーです。

 

この場合の対処方法は、NET Framework をインストールすれば解決できるかもしれません。

 
僕は NET Frameworkインストールしてエラー解消しました。
Nakamura
 

NET Frameworkインストール方法は以下の記事にまとめてますので、こちらを参照ください。

【VBA】Seleniumのオートメーションエラー解消方法
【VBA】Seleniumのオートメーションエラー解消方法【画像説明】

続きを見る

簡単ですので、ささっとやってしまいましょう。
Nakamura

ココに注意

NET Frameworkが未インストールの可能性が有。

 
 
 
 
 

Seleniumコーディング時の ひな形(★重要)※本記事利用の前提条件でもあり

さて、記事タイトル通りに、Seleniumリファレンス系に突入していきます。

若干、遠回りしましたが お許しくださいorz
筆者自身の備忘止めも兼ねており、ブックマークして利活用する予定で、
ちゃんとしたものを作りたく…。
Nakamura
 

本記事の読者の方は、ほぼ全員VBA開発者だと思うのでコーディング時にひな形を用意する有用性は説明不要かと思います。

 

筆者の場合は、以下の ひな形を最低限 VBE-新規プロシージャに入れてから、コーディングを開始しています。

本記事紹介のリファレンスコードは、紹介する雛形をベースに説明していきます。
Nakamura
 
 

Seleniumコード作成時の雛形

 
 
このコードって、動作検証の時と同じなのでは?
あ、はい。同じです。笑
あとは、後述するリファレンス内容をコピペしながら 繋いでいくイメージですね。
Nakamura
 
 

参考:WindowsAPIも一緒に入れるケースがあります。

WindowsAPIのSleep は使い慣れているので、一緒に入れるケースが多いですね。
Selenium自体にも Sleep機能と同等のwait というのがあるのですが、
慣れている Sleep を使用する方が 多いので、この辺は 好みって感じですね。
Nakamura
 
 
 

Seleniumリファレンス

要素の取得(単一系):FindElementBy

ブラウザ操作を行うには、まずHTML要素を取得する必要があります。

FindElementメソッドを使用すると、HTML要素をWebElement型のインスタンスとして取得し、
取得した要素に対してクリックなどの動作を行うことができます。(もちろん、値の抽出も)

正直、○○型とかインスタンスとか知らなくても大丈夫です。
Seleniumは決まった型を使いまわすケースが大半なので。笑
Nakamura
 

メソッドは以下の通り。

FindElementメソッド

  • FindElementById
  • FindElementByCss
  • FindElementByTag
  • FindElementByName
  • FindElementByClass
  • FindElementByXPath
  • FindElementByLinkText
  • FindElementByPartialLinkText
 

使用例は、以下のイメージ。

 
 

◆◆◆に対応するHTML要素の記載ルールについては、別記事 ↓ にてまとめています。

SeleniumのFindElementが上手く行かない場合の対処法
【VBA×Selenimu】FindElementの記載ルール注意点【動かない人向け】

続きを見る

VBAのコーディングルールに則って記載する必要があるため、躓きポイントの1つです。
迷われたら上記の記事が解決の一助になると思いますので、どうぞ。
Nakamura
 
 
 

要素の取得(複数系):FindElementsBy

HTML要素は1つとは限りません。

その場合は、FindElementsByメソッドを活用します。

基本的に DOM制御の場合、単一系まで 割り切ってあげないといけないので、添え字を忘れないようにしましょう。

 

メソッドは以下の通り。

FindElementsメソッド

  • FindElementsByTag
  • FindElementsByName

※ByIDやByXPathなどについて、複数形はHTML構造上ありえないので除外

 

使用例は、以下のイメージ。

 
大切なのは、Seleniumは 重複するHTML要素を制御できないので、
必ずHTML要素は特定してあげましょう。。
Nakamura
 

この辺を 極めていくと、ページによって増減するWebページ情報抽出にも対応できたりします。

何を言っているか分からない人は、
ひとまず、単一系のFindElementByXPathでSelenium操作する方法を覚えましょう。
というか、単一系のFindElementByXPathを利用する率が 90%以上(体感値)なので、
それだけでほぼ十分だったりします。笑
Nakamura
 
 
 

URL遷移 :get

指定のWebページへ遷移したい場合は、getメソッドを使用します。

 

メソッドは以下の通り。

getメソッド

  • driver.get("[URLを入力]") 
 

使用例は、以下のイメージ。

 
この辺は Selenium動作検証でも利用してましたね。
Nakamura
 
 
 

クリック:Click

Webページの要素を クリックしたい場合、Clickメソッドを使用します。(マウスのクリックと同じです。)

 

メソッドは以下の通り。

Clickメソッド

  • driver.FindElementByXPath("◆◆◆").Click

※◆◆◆:HTML要素(例:検索ボタンのXPathなど)

 
 

使用例は、以下のイメージ。

 
Clickは直感的にも分かりやすいですね。
Nakamura
 
 
 

キー入力:SendKeys 

Webページの要素に情報を入力したい場合、SendKyesメソッドを使用します。

 

メソッド…というより構文は以下の通り。

SendKyesメソッド

  • driver. FindElementByXPath("◆◆◆").SendKeys  文字列

※◆◆◆:HTML要素(例:検索用テキストボックスのXPathなど)

 
 

使用例は、以下のイメージ。

 
VBAのString型変数でしたら、そのまま利用できますので便利ですよね。
Seleniumによる自動化の可能性をグッと広げてくれます。
Nakamura
 
 
 

特殊キー入力:EnterやTabなど

キーボード独自の「Enter」や 「Tab」を使用したいケースが・・・きっとあるはず。

 

その場合、Selenium側に Keysクラスを用意してくれていますので、SendKeysメソッドに掛け合わせて利用します。

 

使用例は以下の形。

 
 

ココがポイント

Dim ky As New Keys の宣言をしないと クラスを利用できないので、必ず宣言しましょう。

 
 

ちなみに、確認できる Keysクラス内のメンバー情報は以下の通り。
理論上、SendKeys (ky.メンバー)の記載形式で使えるはず。
 ※使えなかったらすみません。

Keysクラス(メンバー一覧)

Add
Alt
ArrowDown
ArrowLeft
ArrowRight
ArrowUp
Backspace
Cancel
clear
Command
Control
Decimal
Delete
Divide
Down
End
Enter
Equal
Escape
F1
F2
F3
F4
F5
F6
F7
F8
F9
F10
F11
F12
Help
Home
Insert
Left
LeftAlt
LeftControl
LeftShift
Meta
Multiply
Null
NumPad0
NumPad1
NumPad2
NumPad3
NumPad4
NumPad5
NumPad6
NumPad7
NumPad8
NumPad9
PageDown
PageUp
Pause
Return
Right
Semicolon
Separator
Shift
Space
Subtract
Tab
Up

Selenium作った人 大変だったろうなぁ・・・。
Nakamura
 
 
 

入力情報消去:Clear

Webページの要素内で 削除したい文字列がある場合、Clearメソッドを使用します。(既入力の検索情報など)

 

メソッドは以下の通り。

Clearメソッド

  • driver.FindElementByXPath("◆◆◆").Clear

※◆◆◆:HTML要素(例:検索ボックス欄のXPathなど)

 
 

使用例は、以下のイメージ。

 
Clear の意味通りなので、イメージ付きやすいですね。
Nakamura
 
 

ラジオボタンの選択:Click 

Webページの要素で ラジオボタンを選択したい場合、Clickメソッドを使用します。

 

メソッドは以下の通り。

Clickメソッド

  • driver.FindElementByXPath("◆◆◆").Click

※◆◆◆:HTML要素(例:ラジオボックスでクリックしたい箇所のXPath)

 
 

使用例は 以下の通り。

 
 
Clickメソッド≒マウスのクリックとなりますので、
先ほどもClickメソッドは登場しましたが、
ラジオボタンの選択だったので再登場となります。
Nakamura
 

メモ

ちなみに、試してない(必要性を感じてない)ので未確認情報ですが、Clickメソッド以外でも ラジオボタンの選択は出来ると思います。
HTMLでラジオボタン側にValue値が設定されていた場合、そのValue値をSendKeys だったりで送ってあげれば 選択されるかなーと想像したり。。。

もし 質問などあれば、Twitterやってますので、そこから 気軽に聞いて下さい(ブログネタにもなるため歓迎)。

 
 
 

プルダウンの選択:AsSelect.SelectBy系

Webページの要素で プルダウンを選択したい場合、AsSelect.SelectBy系のメソッドを使用します。

 

メソッドは以下の通り。

AsSelect.SelectByメソッド

  • driver.FindElementByXPath("◆◆◆").AsSelect.SelectByValue ("★★★")
  • driver.FindElementByXPath("◆◆◆").AsSelect.SelectByIndex ("★★★")
  • driver.FindElementByXPath("◆◆◆").AsSelect.SelectByText ("★★★")

※◆◆◆:HTML要素(例:プルダウンのXPath)
※★★★:後述の使用例を参照してね。

 

使用例ですが、さすがにHTMLのダミー例を用意しないと説明が難儀になります。

HTML例

<select name="test">
 <option value="test1">テスト1</option>
 <option value="test2">テスト2</option>
 <option value="test3">テスト3</option>
</select>

 

こちら↑のHTML例をベースに説明した、使用例が以下の通り。

 

例:プルダウンで"テスト3"を選択したい場合

 
使用例の方が分かりやすいと思いますので、
実際のコーディング例を見て理解を深めると良いと思います。
Nakamura
 
 
 
 

任意の時間-処理を止める:wait

Seleniumの動作が安定しない…などの理由で、任意の時間 処理を停止させたい場合、waitメソッドを利用します。

 

メソッドは以下の通り。

waitメソッド

  • driver.wait 任意の時間(1000 で 1秒の意味となります)
 

使用例は以下の通り。

直感的に利用できるのが良いですね。個人的にはWindowAPIのSleepと併用しています。
Nakamura
 
 
 
 

ブラウザ情報の取得:window.title

ブラウザの ウィンドウタイトルを取得する時に使用します。

 
 

使用例は以下の通り。

 
 

driver.Window.Title文字列(String型)なので、VBAのMsgboxも利用可能です。

 
 
個人的には Seleniumで複数ウィンドウを操作する際に driver.Window.Title を使用します。
複数ウィンドウをスイッチする際に、スイッチ前のウィンドウに戻りたい時に WindowTitleで指定して戻ったりするので。

これについては、後述してますので「SwitchToWindowByTitle」のメモ欄を参照ください。

Nakamura
 
 
 
 

新規のウィンドウを制御対象にする:SwitchToNextWindow

Webページによっては、クリックした後に 新規ウィンドウが出現します。

Seleniumは便利なもので「SwitchToNextWindow」を利用すれば、制御ウィンドウに切替を簡単に出来ます。

 
 

メソッドは以下の通り。

SwitchToNextWindowメソッド

  • driver.SwitchToNextWindow
 
 

使用例は以下の通り。

元々制御していた旧ウィンドウに戻りたい時は、次項の「SwitchToWindowByTitle」を参考にして下さい。
Nakamura
 
 

 

任意のウィンドウを制御対象にする:SwitchToWindowByTitle

Webページによっては、クリックした後に 新規ウィンドウが出現します。

その場合、driverオブジェクトで制御するウィンドウを指定し直す必要があります。

SwitchToWindowByTitle」を使用すれば、任意のウィンドウに制御をスイッチすることが可能

 
 

メソッドは以下の通り。

SwitchToWindowByTitleメソッド

  • driver.SwitchToWindowByTitle("◆◆◆")

※◆◆◆:ウィンドウタイトル(※完全一致が必要)

 

注意点を先に述べると、スイッチ先のウィンドウタイトル完全一致であることが必要です。

注意

スイッチ先のウィンドウタイトルは完全一致であることが必要。

 

例)Webページが「Yahoo! JAPAN」のウィンドウタイトルの場合

OK例driver.SwitchToWindowByTitle("Yahoo! JAPAN")
NG例driver.SwitchToWindowByTitle("Yahoo")

 
 

それを踏まえた上で、使用例を確認ください。

ウィンドウタイトルは完全一致であることが必要ですので、気をつけてください。
Nakamura
 

ご参考までに

ウィンドウAウィンドウBがあったとして、
それぞれを横断的に制御したい時、僕は 以下の感じで やりくりしています。

解説は コード内のインラインコメントに入れてますので、よろしければどうぞ。

もっと良い方法があれば、そちらでも良いと思いますが、思いつかない・・・。
Nakamura
 
 
 

Webページ内-要素の存在確認:IsElementPresent 

制御しているChromeブラウザ内で要素の存在確認をしたい場合は、IsElementPresent メソッドを使用します。

 

メソッドは以下の通り。

IsElementPresent メソッド

Boolean型(True/False)が戻り値

  • driver.IsElementPresent(myBy.XPath("◆◆◆"))
  • driver.IsElementPresent(myBy.ID("◆◆◆"))  

※◆◆◆:HTML要素(XPathやIDなどで使い分ける)

 

IsElementPresentの戻り値は Boolean型です。

ポイント

対象の要素があればTrue 、要素がなければ False が返ります。

 
 

それを踏まえた使用例が以下の通り。

 

①Webロード待ち で使用するパターン

 
 

②If分岐 で使用するパターン

 
 

③Function化して要素確認 (応用)するパターン

 

 
 
 
 

ウィンドウを閉じる:Close

制御しているChromeブラウザを閉じたい場合は、Closeメソッドを使用します。

メソッドは以下の通り。

Closeメソッド

  • driver.Close
  • driver.Quit (※Closeで閉じれない時は、Quitでもいける)
 

そもそも、Seleniumは、動作が終了すれば、自動でブラウザを閉じてくれる仕様です。

なので、ライトな感じでSelenium自動化を狙う人にとっては知らなくても良い情報ですが、
一応 使用例を紹介します。(Webエンジニアが自動テストする際は使用すると思いますし。)

driverの制御対象がCloseされますので、SwitchToWindowByTitleを併用すれば 任意のウィンドウもCloseすることが可能です。
Nakamura
 
 
 
 

参考:Web読込待ちの方法(Seleniumエラー時の約90%は解決できるはず)

seleniumの動作スピードが 早すぎてエラーになることがあります。

大体の原因が「Web読込待ちを待たずに、Seleniumが次の動作を行い、該当の要素が表示されておらず、処理が実行できずにエラーに落ちる」というのが、体感値としては多いです。

そのような時は、Web読込待ちのコードを都度入れると良いです。
Nakamura
 

本記事内の IsElementPresent を利用したものとなり、以下の記事でも紹介しています。

【Selenium×VBA】Webブラウザをロード待ちする方法【コード有】
【Selenium×VBA】Webブラウザをロード待ちする方法【コード有】

続きを見る

よろしければ、どうぞ。3分くらいで読めると思います。
Nakamura
 

ちなみに、selenium利用時のエラーは、90%くらい Web読込待ちに起因するものだと思っとります。

残りの10%は、適切なHTML要素が記載できないケースや、そもそものVBAコーディングが間違っているケースです。

エラー発生時の問題の切り分けをスムーズにするためにも、Web読込待ちのコーディングは忘れずにやっておくと、結果として効率的なツール開発ができます。
Nakamura

 

 
 
 
 

Selenium ←→ EXCELで情報を行き来させる方法

EXCEL→Seleniumへの情報入力

EXCELの情報を Selenium経由で Chromeブラウザに送る方法を紹介します。

  • 【方法①:一回Clickメソッドを経由してSendkeyで、EXCELのA1セルの文字列を送る方法】
    driver.FindElementByXPath("◆◆◆").Click
    driver.SendKeys Range("A1")
  • 【方法②:直にSendkeyで、EXCELのA1セルの文字列を送る方法】
    driver.FindElementByXPath("◆◆◆").SendKeys Range("A1")
  • 【方法③:変数(String型)を送る方法】
    Dim moji As String
    moji = "hogehoge"
    driver.FindElementByXPath("◆◆◆").SendKeys moji

 
※◆◆◆:HTML要素(例:検索用テキストボックスのXPathなど)

 
 

具体的な使用例は以下の通り。

この辺の情報が、Google検索しても正しい情報が出てこなかったりしたので、メモ書きを残しておきます。
Nakamura

 

 
 
 

Selenium→ EXCLE への情報入力

Seleniumから EXCELへ情報入力する方法も紹介します。

  • 【方法①:直接EXCELへ情報抽出する方法】
    Range("A1") = driver.FindElementByXPath("◆◆◆").Text
  • 【方法②:変数(String型)を経由してEXCELへ情報入力する方法】
    Dim moji As String
    moji = driver.FindElementByXPath("◆◆◆").Text
    Range("A1") = moji
  • 参考:Value値なども抽出可能
    Range("A1") = driver.FindElementByXPath("◆◆◆").value

 
※◆◆◆:HTML要素(例:抽出したいXPathなど)

 
 

使用例を紹介しますね。

VBAでDOM制御したことがある人にとっては、馴染みのなる形なのかな?と思います。
Nakamura
 
 

ちなみに、今回 Text 情報を抽出しておりますが、innerTextやinnerHTML、outerTextやouterHTMLの情報も取得できます。

こちらについては、別記事に まとめてますので、必要に応じて 確認してみて下さい。

【VBA×Selenium】innerTextの使い方【注意点あり】
【VBA×Selenium】innerTextの使い方【注意点あり】

続きを見る

【VBA×Selenium】innerHTMLの使い方【注意点あり】
【VBA×Selenium】innerHTMLの使い方【注意点あり】

続きを見る

VBA×SeleniumのouterHTMLの使い方(注意点あり)
【VBA×Selenium】outerHTMLの使い方【注意点あり】

続きを見る

1回読めば、その後は 感覚でやっていけますので、どうぞ。
Nakamura

 

 
 
 
 

終わりに

さて、今回はここまでとなります。

全てを紹介しきれてませんが、本記事の内容で 90%以上は やりたいことは実現できると思っとります。

残りの10%は、HTMLのTable要素や、JavaScriptのアラート表示の対処方法だったり。
頻度は そこまで多くないと思いますので、またの機会ということで。
Nakamura
 
 

本記事を ブックマークしておくと、中々に便利ですので、よろしければ活用ください。
(リファレンス追加することもあると思いますので。)

もし記載内容に間違いがあったら、Twitter(@nkmr_dai)で教えてくれると助かります・・・。
一応 検証しながらやっていますので、大丈夫だと思いますが。
Nakamura
 
 

はい。

ということで、本当にこれにて終わりとなります。

皆様のVBA×Seleniumライフがより良いものになれば、筆者としてはハッピーです。
(こんなことやってる人は、希少種だと思いますので 勝手に仲間意識を持っていたりします。(笑)

ここまでお読みいただきありがとうございました。

おわり。

 




  • この記事を書いた人

Nakamura(nkmr)

ブロガー│NakamuraBlog(ナカログ)運営 [月1.5万PV]│ 【経歴】IT会社に新卒入社 ▶︎ 通用しない ▶︎ プログラミングに出会う ▶︎ 年間1億円以上のコスト削減プログラムを開発 ▶︎ 会社賞受賞 ▶︎ 少しでも世の中の苦しんでる私と似た人に役に立てればと思いブログを開設。 ● 文系がプログラムと出会って会社員人生が変わった人。 ● 2020年より「嫁を置いて1人旅」の旅動画を投稿開始。

-ALL, EXCEL, Program, Selenium, VBA
-, , ,