tag:crieit.net,2005:https://crieit.net/tags/Excel/feed 「Excel」の記事 - Crieit Crieitでタグ「Excel」に投稿された最近の記事 2023-01-27T01:48:51+09:00 https://crieit.net/tags/Excel/feed tag:crieit.net,2005:PublicArticle/18377 2023-01-25T20:40:52+09:00 2023-01-27T01:48:51+09:00 https://crieit.net/posts/Excel-VBA-63d11544ba099 【実況ブログ】 Excel VBAで初めてのプログラミングを覚えようぜ(^~^)? <h1 id="📅2023-01-25 mon 19:15 start"><a href="#%F0%9F%93%852023-01-25+mon+19%3A15+start">📅2023-01-25 mon 19:15 start</a></h1> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 Excel を購入しろだぜ」</p> <p><a href="https://crieit.now.sh/upload_images/beaf94b260ae2602ca8cf7f5bbc769c261daf8686dbda.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/beaf94b260ae2602ca8cf7f5bbc769c261daf8686dbda.png?mw=700" alt="kifuwarabe-futsu.png" /></a><br /> 「 してるぜ」</p> <p><a href="https://crieit.now.sh/upload_images/7d2e6ce5359b68c2fbfc93128857ccd863d102e696019.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/7d2e6ce5359b68c2fbfc93128857ccd863d102e696019.png?mw=700" alt="202301_excel_25-1920--sheet.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 👆 これを使って、プログラミングを覚えてもらう」</p> <p><a href="https://crieit.now.sh/upload_images/96fb09724c3ce40ee0861a0fd1da563d61daf8a09d9bc.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/96fb09724c3ce40ee0861a0fd1da563d61daf8a09d9bc.png?mw=700" alt="ohkina-hiyoko-futsu2.png" /></a><br /> 「 現代の Excel は チューリング完全らしいですしね」</p> <p><a href="https://crieit.now.sh/upload_images/beaf94b260ae2602ca8cf7f5bbc769c261daf8686dbda.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/beaf94b260ae2602ca8cf7f5bbc769c261daf8686dbda.png?mw=700" alt="kifuwarabe-futsu.png" /></a><br /> 「 じゃあ Excel で チューリング・マシンを作るのか?<br /> 無限のテープをどう表現する?」</p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 テープが足りなくなったら 強制終了すればいいだろ」</p> <p>📖 <a target="_blank" rel="nofollow noopener" href="https://en.wikipedia.org/wiki/Turing_machine">Turing machine</a></p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 👆 例題は Wikipedia を参考にしようぜ?」</p> <p><a href="https://crieit.now.sh/upload_images/a7bee6a2939b3d27802fa74666966e4e63d10ccb8eaa1.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/a7bee6a2939b3d27802fa74666966e4e63d10ccb8eaa1.png?mw=700" alt="202301_excel_25-2002--StateTable.png" /></a></p> <p><code>[TuringMachineByExcelVBA.xlsm] file - [StateTable] sheet</code>:</p> <pre><code class="csv">State,Read,Write,Move,Transition A,White,Orange,>,B A,Orange,Orange,<,C B,White,Orange,<,A B,Orange,Orange,>,B C,White,Orange,<,B C,Orange,Orange,>,HALT </code></pre> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 👆 とりあえず <code>StateMachine</code> シートを作れだぜ。<br /> セルに色も塗れだぜ」</p> <p><a href="https://crieit.now.sh/upload_images/96fb09724c3ce40ee0861a0fd1da563d61daf8a09d9bc.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/96fb09724c3ce40ee0861a0fd1da563d61daf8a09d9bc.png?mw=700" alt="ohkina-hiyoko-futsu2.png" /></a><br /> 「 このシートが何かの説明はしないの?」</p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 手を動かせば あとで分かる」</p> <p><a href="https://crieit.now.sh/upload_images/2bd8e45ab2cf441bd6fbd64b9fb1440863d10dc15985e.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/2bd8e45ab2cf441bd6fbd64b9fb1440863d10dc15985e.png?mw=700" alt="202301_excel_25-2008--Tape.png" /></a></p> <p><code>[TuringMachineByExcelVBA.xlsm] file - [Tape] sheet</code>:</p> <pre><code class="csv">A </code></pre> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 👆 もう1つ、 <code>Tape</code> シートを作れだぜ。<br /> <code>A</code> の1文字だけ入っている」</p> <p><a href="https://crieit.now.sh/upload_images/beaf94b260ae2602ca8cf7f5bbc769c261daf8686dbda.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/beaf94b260ae2602ca8cf7f5bbc769c261daf8686dbda.png?mw=700" alt="kifuwarabe-futsu.png" /></a><br /> 「 これは何なんだぜ?」</p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 あとで分かる」</p> <p><a href="https://crieit.now.sh/upload_images/5be4add46fc7c8f5a3ff33285bc455d163d10f482920b.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5be4add46fc7c8f5a3ff33285bc455d163d10f482920b.png?mw=700" alt="202301_excel_25-2014--OpenCode-1.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 空っぽの <code>GUI</code> というシートを作って、<br /> メインメニューから <code>[開発] - [コードの表示]</code> を選べだぜ」</p> <p><a href="https://crieit.now.sh/upload_images/8e5c6787ff6884ae25742bf5316c659b63d10fc7a71bd.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/8e5c6787ff6884ae25742bf5316c659b63d10fc7a71bd.png?mw=700" alt="202301_excel_25-2017--VBAEditor.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 👆 VBA のエディターが出てくるな」</p> <p><a href="https://crieit.now.sh/upload_images/96fb09724c3ce40ee0861a0fd1da563d61daf8a09d9bc.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/96fb09724c3ce40ee0861a0fd1da563d61daf8a09d9bc.png?mw=700" alt="ohkina-hiyoko-futsu2.png" /></a><br /> 「 あの 不便なやつね」</p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 ほんと 不便だな。 シートに戻るぜ」</p> <p><a href="https://crieit.now.sh/upload_images/e8e85792d662411ad13e424c8571f5b763d11114d4f20.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e8e85792d662411ad13e424c8571f5b763d11114d4f20.png?mw=700" alt="202301_excel_25-2021--Button-1.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 👆 先に ボタンを置こうぜ?」</p> <p><a href="https://crieit.now.sh/upload_images/43e7f5d13408af482856786fd1e9570b63d111bad4d9e.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/43e7f5d13408af482856786fd1e9570b63d111bad4d9e.png?mw=700" alt="202301_excel_25-2024--PutButton-1.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 👆 何だか よくわからないが <code>ボタン1_Click</code> という名前はそのまんまで<br /> マクロの保存先を 今作業中のファイルに変えて、 <code>[新規作成(N)]</code> ボタンを押そうぜ?」</p> <p><a href="https://crieit.now.sh/upload_images/beaf94b260ae2602ca8cf7f5bbc769c261daf8686dbda.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/beaf94b260ae2602ca8cf7f5bbc769c261daf8686dbda.png?mw=700" alt="kifuwarabe-futsu.png" /></a><br /> 「 Excel の使い方を記憶してないの わらう」</p> <p><a href="https://crieit.now.sh/upload_images/96fb09724c3ce40ee0861a0fd1da563d61daf8a09d9bc.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/96fb09724c3ce40ee0861a0fd1da563d61daf8a09d9bc.png?mw=700" alt="ohkina-hiyoko-futsu2.png" /></a><br /> 「 プログラマーは 記憶 ではなく、 <strong>読み</strong> で進むのよ。<br /> その方が 応用が利くから」</p> <p><a href="https://crieit.now.sh/upload_images/7fc9f87fe1c8e6ad26d268f24fc9812f63d112c4a2e30.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/7fc9f87fe1c8e6ad26d268f24fc9812f63d112c4a2e30.png?mw=700" alt="202301_excel_25-2029--CreateButton-1.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 👆 ボタンがでけてる。<br /> 当たった」</p> <p><a href="https://crieit.now.sh/upload_images/beaf94b260ae2602ca8cf7f5bbc769c261daf8686dbda.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/beaf94b260ae2602ca8cf7f5bbc769c261daf8686dbda.png?mw=700" alt="kifuwarabe-futsu.png" /></a><br /> 「 当たった とか 講師から出てきたらおかしい言葉 わらう」</p> <p><a href="https://crieit.now.sh/upload_images/a9682e7b76b5ec11dd96a83993301a8b63d11393ae7ea.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/a9682e7b76b5ec11dd96a83993301a8b63d11393ae7ea.png?mw=700" alt="202301_excel_25-2032--RegisterMacro-1.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 👆 ボタンを右クリックして コンテキスト・メニューの <code>[マクロの登録(N)]</code> を<br /> クリックしてみようぜ?」</p> <p><a href="https://crieit.now.sh/upload_images/ff5836d7acb5395226ed608bce8df05a63d114270be35.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/ff5836d7acb5395226ed608bce8df05a63d114270be35.png?mw=700" alt="202301_excel_25-2035--Ok-1.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 👆 何をすればいいのか分からん。 <code>[OK]</code> ボタンを押してみようぜ?」</p> <p><a href="https://crieit.now.sh/upload_images/995318528394eec0b95b7eac406e1ace63d1149283db7.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/995318528394eec0b95b7eac406e1ace63d1149283db7.png?mw=700" alt="202301_excel_25-2037--Code.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 👆 ?<br /> 何が起こった?」</p> <p><a href="https://crieit.now.sh/upload_images/4127845072bc324880940de1cf50593763d114ef2b8ba.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/4127845072bc324880940de1cf50593763d114ef2b8ba.png?mw=700" alt="202301_excel_25-2038--Skeleton-1.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/beaf94b260ae2602ca8cf7f5bbc769c261daf8686dbda.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/beaf94b260ae2602ca8cf7f5bbc769c261daf8686dbda.png?mw=700" alt="kifuwarabe-futsu.png" /></a><br /> 「 👆 なんか コードが増えてるのでは?」</p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 よっしゃ!<br /> じゃあ そこに VBA Script (ぶい・びー・えー・すくりぷと)を書けばいいんだぜ」</p> <p>📅 2023-01-25 wed 20:41</p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 🔍 <code>VBA セルに値を入れる</code> で検索」</p> <p>📖 <a target="_blank" rel="nofollow noopener" href="http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/prog/prog_atai.html">セルに値を入れる:Excel VBA プログラミング入門</a></p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 👆 よし 分かったぜ」</p> <p><a href="https://crieit.now.sh/upload_images/8bedf851dc72c6806bd384e10b70508e63d116df021a7.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/8bedf851dc72c6806bd384e10b70508e63d116df021a7.png?mw=700" alt="202301_excel_25-2046--HelloWorld-1.png" /></a></p> <pre><code class="vba">Worksheets("GUI").Range("A1").Value = "Hello, world!!" </code></pre> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 👆 こんな感じに書けば <code>GUI</code> シートの <code>A1</code> セルに <code>Hello, world!!</code> という文字を<br /> 入れてくれそうだな」</p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 ボタンを押そうぜ?」</p> <p><a href="https://crieit.now.sh/upload_images/ea960374c712c2d05121e25ea27ea9cc63d11794cb716.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/ea960374c712c2d05121e25ea27ea9cc63d11794cb716.png?mw=700" alt="202301_excel_25-2049--ShowHelloWorld-1.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 👆 ほら 出た」</p> <p><a href="https://crieit.now.sh/upload_images/beaf94b260ae2602ca8cf7f5bbc769c261daf8686dbda.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/beaf94b260ae2602ca8cf7f5bbc769c261daf8686dbda.png?mw=700" alt="kifuwarabe-futsu.png" /></a><br /> 「 <code>Excelでハローワールドを出力する</code> の実績を解除したな」</p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 じゃあ次。<br /> 🔍 <code>VBA セルに色を付ける</code> で検索」</p> <p>📖 <a target="_blank" rel="nofollow noopener" href="https://www.tipsfound.com/vba/07006">セルに色を設定する</a></p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 👆 よし 分かったぜ」</p> <p><a href="https://crieit.now.sh/upload_images/ab3f6398046ba32df211de0534339eb163d1190f3e6d6.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/ab3f6398046ba32df211de0534339eb163d1190f3e6d6.png?mw=700" alt="202301_excel_25-2056--BackgroundColor-1.png" /></a></p> <pre><code class="vba">Worksheets("GUI").Range("A1").Interior.ColorIndex = 45 ' オレンジ </code></pre> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 👆 こんな感じに書けば <code>GUI</code> シートの <code>A1</code> セルの背景色をオレンジ色に<br /> してくれそうだな」</p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 ボタンを押そうぜ?」</p> <p><a href="https://crieit.now.sh/upload_images/ed751568c624bbe3c65a037eb56fccf663d11972c76a3.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/ed751568c624bbe3c65a037eb56fccf663d11972c76a3.png?mw=700" alt="202301_excel_25-2057--ShowBackgroundColor-1.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 👆 A1 セルに色が付いたな」</p> <p><a href="https://crieit.now.sh/upload_images/96fb09724c3ce40ee0861a0fd1da563d61daf8a09d9bc.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/96fb09724c3ce40ee0861a0fd1da563d61daf8a09d9bc.png?mw=700" alt="ohkina-hiyoko-futsu2.png" /></a><br /> 「 着色の自動化に使えそうねえ」</p> <p><a href="https://crieit.now.sh/upload_images/d3954444815536359e16f3966743a8c963d11c0290ab2.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d3954444815536359e16f3966743a8c963d11c0290ab2.png?mw=700" alt="202301_excel_25-2108--GetColor-1.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 👆 じゃあ、 <code>StateTable</code> シートの C2 セルの背景色が何色かとか、取得することはできるのかだぜ?」</p> <p><a href="https://crieit.now.sh/upload_images/96fb09724c3ce40ee0861a0fd1da563d61daf8a09d9bc.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/96fb09724c3ce40ee0861a0fd1da563d61daf8a09d9bc.png?mw=700" alt="ohkina-hiyoko-futsu2.png" /></a><br /> 「 ググりゃいいんじゃないの?」</p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 🔍 <code>VBA セルの色を取得</code> で検索」</p> <p>📖 <a target="_blank" rel="nofollow noopener" href="https://www.tipsfound.com/vba/07005">VBA セルの色を取得する (Interior.Color, ColorIndex)</a></p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 👆 よし 分かったぜ」</p> <p><a href="https://crieit.now.sh/upload_images/54dd3efed1a31e73d04c267e53e17dac63d11e1182115.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/54dd3efed1a31e73d04c267e53e17dac63d11e1182115.png?mw=700" alt="202301_excel_25-2117--CopyColor-1.png" /></a></p> <pre><code class="vba"> Dim backgroundColor As Long backgroundColor = Worksheets("StateTable").Range("C2").Interior.color ' 背景色 Debug.Print (backgroundColor) Worksheets("GUI").Range("A1").Interior.color = backgroundColor </code></pre> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 👆 こう書けば <code>StateTable</code> シートの <code>C2</code> セルの背景色を、 <code>GUI</code> シートの <code>A1</code> セルへ コピーできるはずだぜ!」</p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 ボタンを押そうぜ?」</p> <p><a href="https://crieit.now.sh/upload_images/1568e0c8ce0e64297f4f75d776947c2963d11eb23fb6a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/1568e0c8ce0e64297f4f75d776947c2963d11eb23fb6a.png?mw=700" alt="202301_excel_25-2120--ExecuteCopyColor-1.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 👆 背景色は コピーでけたが……。<br /> <code>Debug.Print( ... )</code> って何だぜ?」</p> <p><a href="https://crieit.now.sh/upload_images/96fb09724c3ce40ee0861a0fd1da563d61daf8a09d9bc.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/96fb09724c3ce40ee0861a0fd1da563d61daf8a09d9bc.png?mw=700" alt="ohkina-hiyoko-futsu2.png" /></a><br /> 「 ググりゃいいんじゃないの?」</p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 🔍 <code>VBA デバッグプリント</code> で検索」</p> <p>📖 <a target="_blank" rel="nofollow noopener" href="https://tonari-it.com/excel-vba-debug-print/">【エクセルVBA】初心者のうちから知っておくべきDebug.Printの使い方</a></p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 👆 <strong>イミディエイト・ウィンドウ</strong> に値を表示するらしいぜ」</p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 イミディエイト・ウィンドウ って何だぜ?」</p> <p><a href="https://crieit.now.sh/upload_images/96fb09724c3ce40ee0861a0fd1da563d61daf8a09d9bc.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/96fb09724c3ce40ee0861a0fd1da563d61daf8a09d9bc.png?mw=700" alt="ohkina-hiyoko-futsu2.png" /></a><br /> 「 ググりゃいいんじゃないの?」</p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 🔍 <code>VBA イミディエイトウィンドウ</code> で検索」</p> <p>📖 <a target="_blank" rel="nofollow noopener" href="https://www.kenschool.jp/blog/?p=3430">イミディエイトウィンドウの使い方</a></p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 👆 よし 分かったぜ」</p> <p><a href="https://crieit.now.sh/upload_images/e6b3acf6e5aca1fc55867d968f4f342d63d120141a3d7.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e6b3acf6e5aca1fc55867d968f4f342d63d120141a3d7.png?mw=700" alt="202301_excel_25-2125--Immediate-1.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 <code>[Ctrl] + [G]</code> キーを打鍵すると 出てくるウィンドウだぜ」</p> <p><a href="https://crieit.now.sh/upload_images/beaf94b260ae2602ca8cf7f5bbc769c261daf8686dbda.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/beaf94b260ae2602ca8cf7f5bbc769c261daf8686dbda.png?mw=700" alt="kifuwarabe-futsu.png" /></a><br /> 「 そんなウィンドウの出し方、 画面のどこを探しても 無くね?」</p> <p><a href="https://crieit.now.sh/upload_images/96fb09724c3ce40ee0861a0fd1da563d61daf8a09d9bc.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/96fb09724c3ce40ee0861a0fd1da563d61daf8a09d9bc.png?mw=700" alt="ohkina-hiyoko-futsu2.png" /></a><br /> 「 コンピューター開発者は <code>私には分かる。だからお前も分かるだろ</code> という脳をしてる人 多いのよ。<br /> 伝え、継承する精神を持っている人は リタイア組ぐらいよ」</p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 天才が 技術を継承するの 損だしな。<br /> ネット上で 記事書いてるの リタイア組か、 業界が滅ぶ一歩手前で しかたなく 天才のケツ掃除してる人たちの どっちかだよな」</p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 しかし <code>49407</code> なんて数字出てきても 嬉しくないな」</p> <p>📅 2023-01-25 wed 21:36</p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 じゃあ 次は長めの コンボ(Combo;連続技) やるから よく聴けだぜ」</p> <p><a href="https://crieit.now.sh/upload_images/10533ade231776b7c34ab00bb9c960e063d12359726bf.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/10533ade231776b7c34ab00bb9c960e063d12359726bf.png?mw=700" alt="202301_excel_25-2140--a1-1.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 👆 <code>Tape</code> シートの <code>A1</code> セルに入っている値 <code>A</code> と、その背景色 白色 を取得して……」</p> <p><a href="https://crieit.now.sh/upload_images/21fadc22632f5e65a9da1a98a748e35563d123daa45b8.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/21fadc22632f5e65a9da1a98a748e35563d123daa45b8.png?mw=700" alt="202301_excel_25-2142--seek-1.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 👆 <code>StateTable</code> シートの <code>State</code> 列に <code>A</code> が、<br /> <code>Read</code> 列に 背景色が白色のセルが<br /> 無いかなと探し……」</p> <p><a href="https://crieit.now.sh/upload_images/4f19e8287c402995d82464e71220ebe463d12458a2c1d.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/4f19e8287c402995d82464e71220ebe463d12458a2c1d.png?mw=700" alt="202301_excel_25-2142--seek-2.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 👆 見つけたら……」</p> <p><a href="https://crieit.now.sh/upload_images/55977720b323939598c8a932fa58ba7763d124a97cfd2.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/55977720b323939598c8a932fa58ba7763d124a97cfd2.png?mw=700" alt="202301_excel_25-2142--seek-3.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 👆 そのまま 横へスライドし、<br /> Write列 の背景色は オレンジ色、<br /> Move列 は <code>></code> 、<br /> Transition列 は <code>B</code><br /> と いったん覚え……」</p> <p><a href="https://crieit.now.sh/upload_images/9e508dc25de95f97970c4606d32134a463d1260a86ee0.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/9e508dc25de95f97970c4606d32134a463d1260a86ee0.png?mw=700" alt="202301_excel_25-2149--output-1.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 👆 <code>Tape</code> シートを開き、<br /> A1 セルから 1行下にいったところを、 Write 列にあるように オレンジ色 に塗り、<br /> Move列が <code>></code> とあるように その右側に対して、<br /> Transition列があるように <code>B</code> を書き込もうぜ?」</p> <p><a href="https://crieit.now.sh/upload_images/beaf94b260ae2602ca8cf7f5bbc769c261daf8686dbda.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/beaf94b260ae2602ca8cf7f5bbc769c261daf8686dbda.png?mw=700" alt="kifuwarabe-futsu.png" /></a><br /> 「 長い」</p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 いったん <code>TuringMachineByExcelVBA.xlsm</code> ファイルを保存して閉じるぜ。<br /> 休憩だぜ」</p> <p>📅 2023-01-25 wed 22:10 stop</p> <p>📅 2023-01-25 wed 22:21 restart</p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 よっしゃ 再開だぜ!<br /> <code>TuringMachineByExcelVBA.xlsm</code> ファイルを開けて、っと」</p> <p><a href="https://crieit.now.sh/upload_images/a5986e9999f216f44cf41643061082f963d12d3d41e93.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/a5986e9999f216f44cf41643061082f963d12d3d41e93.png?mw=700" alt="202301_excel_25-2222--clear.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 👆 消えてる!」</p> <p><a href="https://crieit.now.sh/upload_images/beaf94b260ae2602ca8cf7f5bbc769c261daf8686dbda.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/beaf94b260ae2602ca8cf7f5bbc769c261daf8686dbda.png?mw=700" alt="kifuwarabe-futsu.png" /></a><br /> 「 よく探せだぜ!」</p> <p><a href="https://crieit.now.sh/upload_images/911081e91fc626fedc3222f61a52f6b063d12db90ab2f.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/911081e91fc626fedc3222f61a52f6b063d12db90ab2f.png?mw=700" alt="202301_excel_25-2224--project-window-1.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 👆 無い、無い、無い、<br /> どこにも 無~い!」</p> <p><a href="https://crieit.now.sh/upload_images/96fb09724c3ce40ee0861a0fd1da563d61daf8a09d9bc.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/96fb09724c3ce40ee0861a0fd1da563d61daf8a09d9bc.png?mw=700" alt="ohkina-hiyoko-futsu2.png" /></a><br /> 「 ファイルを開けるには、ダブル・クリック するんじゃないの?」</p> <p><a href="https://crieit.now.sh/upload_images/51fb39e17099b3f9fea0320e7586266d63d12e1966994.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/51fb39e17099b3f9fea0320e7586266d63d12e1966994.png?mw=700" alt="202301_excel_25-2226--double-click.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 👆 あ、 有った」</p> <p><a href="https://crieit.now.sh/upload_images/96fb09724c3ce40ee0861a0fd1da563d61daf8a09d9bc.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/96fb09724c3ce40ee0861a0fd1da563d61daf8a09d9bc.png?mw=700" alt="ohkina-hiyoko-futsu2.png" /></a><br /> 「 じゃあ <code>Tape</code> シートの <code>A1</code> セルの値 <code>A</code> と背景色 白色 を取得して、<br /> そのタプル(Tuple;組み)が <code>StateTable</code> シートの何行目にあるか探し出して<br /> イミディエイト・ウィンドウに デバッグプリント するところまで やりましょう!」</p> <p><a href="https://crieit.now.sh/upload_images/aa9fb664e006bfd66d5afdddfecf45c063d12f44ec29c.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/aa9fb664e006bfd66d5afdddfecf45c063d12f44ec29c.png?mw=700" alt="202301_excel_25-2230--getValue-1.png" /></a></p> <pre><code class="vba">Sub ボタン1_Click() Dim text As String Dim backgroundColor As Long text = Worksheets("Tape").Range("A1").Value ' セルの値 backgroundColor = Worksheets("Tape").Range("A1").Interior.color ' 背景色 Debug.Print (text) Debug.Print (backgroundColor) Worksheets("GUI").Range("A1").Value = text Worksheets("GUI").Range("A1").Interior.color = backgroundColor End Sub </code></pre> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 👆 値と 背景色のコピーは できるようになったが、<br /> 次は 探すというやつだな」</p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 🔍 <code>VBA For文</code> で検索」</p> <p>📖 <a target="_blank" rel="nofollow noopener" href="https://brain.cc.kogakuin.ac.jp/~kanamaru/lecture/vba2013/04-for01.html">[Excel で VBA] For 文による繰り返し</a></p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 👆 よし 分かったぜ」</p> <p><a href="https://crieit.now.sh/upload_images/96fb09724c3ce40ee0861a0fd1da563d61daf8a09d9bc.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/96fb09724c3ce40ee0861a0fd1da563d61daf8a09d9bc.png?mw=700" alt="ohkina-hiyoko-futsu2.png" /></a><br /> 「 <code>For文</code> が何かの説明は しないのね」</p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 手を動かせば 分かるぜ」</p> <p><a href="https://crieit.now.sh/upload_images/5608b24b4b67d86711a4619d515748f563d1317277ca9.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5608b24b4b67d86711a4619d515748f563d1317277ca9.png?mw=700" alt="202301_excel_25-2240--loop-1.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 👆 多分 <code>StateTable</code> シートを 1行目から 7行目まで読むのは こんな雰囲気だろ。<br /> VBA の if 文ってどうやって書くんだったかな?」</p> <p><a href="https://crieit.now.sh/upload_images/beaf94b260ae2602ca8cf7f5bbc769c261daf8686dbda.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/beaf94b260ae2602ca8cf7f5bbc769c261daf8686dbda.png?mw=700" alt="kifuwarabe-futsu.png" /></a><br /> 「 記憶してないの わらう」</p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 🔍 <code>VBA if文</code> で検索」</p> <p>📖 <a target="_blank" rel="nofollow noopener" href="https://office-hack.com/excel/if-vba/">ExcelのVBA(マクロ)でIf~Then~Elseを使って条件分岐する方法</a></p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 👆 よし 分かったぜ」</p> <p><a href="https://crieit.now.sh/upload_images/55c377d1e72e453ee5954f4471aa3a9a63d133aea4cb7.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/55c377d1e72e453ee5954f4471aa3a9a63d133aea4cb7.png?mw=700" alt="202301_excel_25-2249--if-then-else-1.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 👆 多分 if文は こんな雰囲気だろ。<br /> Forループを途中で抜けるの VBAで どうやって書くんだったかな?」</p> <p><a href="https://crieit.now.sh/upload_images/96fb09724c3ce40ee0861a0fd1da563d61daf8a09d9bc.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/96fb09724c3ce40ee0861a0fd1da563d61daf8a09d9bc.png?mw=700" alt="ohkina-hiyoko-futsu2.png" /></a><br /> 「 ググりゃいいんじゃないの?」</p> <p><a href="https://crieit.now.sh/upload_images/beaf94b260ae2602ca8cf7f5bbc769c261daf8686dbda.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/beaf94b260ae2602ca8cf7f5bbc769c261daf8686dbda.png?mw=700" alt="kifuwarabe-futsu.png" /></a><br /> 「 なんにも覚えてないんだな」</p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 🔍 <code>VBA break文</code> で検索」</p> <p>📖 <a target="_blank" rel="nofollow noopener" href="https://uxmilk.jp/48591">Excel VBAでFor文を途中で抜ける:Exit</a></p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 👆 よし 分かったぜ」</p> <pre><code class="vba">Sub ボタン1_Click() Dim text As String Dim backgroundColor As Long text = Worksheets("Tape").Range("A1").Value ' セルの値 backgroundColor = Worksheets("Tape").Range("A1").Interior.color ' 背景色 Debug.Print (text) Debug.Print (backgroundColor) Worksheets("GUI").Range("A1").Value = text Worksheets("GUI").Range("A1").Interior.color = backgroundColor Dim i As Long Dim stateText As String Dim readBackgroundColor As Long Dim writeBackgroundColor As Long Dim moveText As String Dim transitionText As String For i = 2 To 7 stateText = Worksheets("StateTable").Range("A" & i).Value ' セルの値 readBackgroundColor = Worksheets("StateTable").Range("B" & i).Interior.color ' 背景色 ' 一致するか? If text = stateText And backgroundColor = readBackgroundColor Then writeBackgroundColor = Worksheets("StateTable").Range("C" & i).Interior.color ' 背景色 moveText = Worksheets("StateTable").Range("D" & i).Value ' セルの値 transitionText = Worksheets("StateTable").Range("E" & i).Value ' セルの値 Debug.Print (writeBackgroundColor) Debug.Print (moveText) Debug.Print (transitionText) ' TODO 次の処理へ Exit For End If Next i End Sub </code></pre> <p><a href="https://crieit.now.sh/upload_images/055ad87739413e7ce40cde35dc7e9bc363d135e9993df.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/055ad87739413e7ce40cde35dc7e9bc363d135e9993df.png?mw=700" alt="202301_excel_25-2257--find-1.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 👆 取れてるぜ」</p> <p>📅 2023-01-25 wed 23:00</p> <p><a href="https://crieit.now.sh/upload_images/96fb09724c3ce40ee0861a0fd1da563d61daf8a09d9bc.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/96fb09724c3ce40ee0861a0fd1da563d61daf8a09d9bc.png?mw=700" alt="ohkina-hiyoko-futsu2.png" /></a><br /> 「 次は、<br /> <code>Tape</code> シートの A1 セルを スタート地点として、<br /> 1行 下りたセルの背景色を Write列のいう色に塗って、そこから<br /> Move 列が <code>></code> だったら その右のセルへ、 Transition 列のいうテキストを入れましょう」</p> <p><a href="https://crieit.now.sh/upload_images/6d424c48b1e3b97a5bdd13889698200363d1391f18557.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/6d424c48b1e3b97a5bdd13889698200363d1391f18557.png?mw=700" alt="202301_excel_25-2310--write-1.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 👆 こんな感じだろ」</p> <p><a href="https://crieit.now.sh/upload_images/c1ded23ca69e31848ab042beebc7d81a63d1395c1c5c8.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/c1ded23ca69e31848ab042beebc7d81a63d1395c1c5c8.png?mw=700" alt="202301_excel_25-2314--tape.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 👆 <code>Tape</code> シートの2行目を クリアーしておくぜ。<br /> そして <code>GUI</code> シートのボタンを押すぜ」</p> <p><a href="https://crieit.now.sh/upload_images/e1df2e8107ce252e9c3a3120d8fa8df663d139f139a7d.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e1df2e8107ce252e9c3a3120d8fa8df663d139f139a7d.png?mw=700" alt="202301_excel_25-2316--result-1.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 👆 色も文字もコピーされたぜ」</p> <p><a href="https://crieit.now.sh/upload_images/beaf94b260ae2602ca8cf7f5bbc769c261daf8686dbda.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/beaf94b260ae2602ca8cf7f5bbc769c261daf8686dbda.png?mw=700" alt="kifuwarabe-futsu.png" /></a><br /> 「 おつ。<br /> 長いコンボが決まったな」</p> <p><a href="https://crieit.now.sh/upload_images/96fb09724c3ce40ee0861a0fd1da563d61daf8a09d9bc.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/96fb09724c3ce40ee0861a0fd1da563d61daf8a09d9bc.png?mw=700" alt="ohkina-hiyoko-futsu2.png" /></a><br /> 「 これで 1クロック よね」</p> <p><a href="https://crieit.now.sh/upload_images/beaf94b260ae2602ca8cf7f5bbc769c261daf8686dbda.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/beaf94b260ae2602ca8cf7f5bbc769c261daf8686dbda.png?mw=700" alt="kifuwarabe-futsu.png" /></a><br /> 「 何だぜ それ」</p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 次は 2クロック目に 行ってみようぜ?」</p> <p>📅 2023-01-25 wed 23:21</p> <p><a href="https://crieit.now.sh/upload_images/4a20812bd5c1a3fc61525e8d4e1e598463d13b29bab9f.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/4a20812bd5c1a3fc61525e8d4e1e598463d13b29bab9f.png?mw=700" alt="202301_excel_25-2321--2th-clock-1.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 👆 B2 セルをスタート地点として、 同様に さっきと同じことを やればいいんだぜ」</p> <p><a href="https://crieit.now.sh/upload_images/beaf94b260ae2602ca8cf7f5bbc769c261daf8686dbda.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/beaf94b260ae2602ca8cf7f5bbc769c261daf8686dbda.png?mw=700" alt="kifuwarabe-futsu.png" /></a><br /> 「 嫌だぜ なんでそんなことをするんだぜ?」</p> <p><a href="https://crieit.now.sh/upload_images/96fb09724c3ce40ee0861a0fd1da563d61daf8a09d9bc.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/96fb09724c3ce40ee0861a0fd1da563d61daf8a09d9bc.png?mw=700" alt="ohkina-hiyoko-futsu2.png" /></a><br /> 「 ラジオ体操 みたいなもんよ。 頭を ほぐしてんのよ」</p> <p><a href="https://crieit.now.sh/upload_images/f21bba2889296010e5e957b6cd6612a863d13c296c3bc.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/f21bba2889296010e5e957b6cd6612a863d13c296c3bc.png?mw=700" alt="202301_excel_25-2325--b-white-1.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 👆 文字が <code>B</code> で、背景色が 白色 なのは 4行目だな。<br /> 下にオレンジ塗って 左へ A を書けばよさそうだな」</p> <p><a href="https://crieit.now.sh/upload_images/78e64f2f57b3fec52bb5592a96eff7c963d13eff66930.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/78e64f2f57b3fec52bb5592a96eff7c963d13eff66930.png?mw=700" alt="202301_excel_25-2337--time-1.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 👆 説明するのを忘れていたが、上の行の背景色を、下の行へ 引き継ぐぜ」</p> <p><a href="https://crieit.now.sh/upload_images/beaf94b260ae2602ca8cf7f5bbc769c261daf8686dbda.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/beaf94b260ae2602ca8cf7f5bbc769c261daf8686dbda.png?mw=700" alt="kifuwarabe-futsu.png" /></a><br /> 「 忘れないでくれだぜ」</p> <p><a href="https://crieit.now.sh/upload_images/75687cd8dc9973fb5a9d1c9436f4002263d13f9b620f9.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/75687cd8dc9973fb5a9d1c9436f4002263d13f9b620f9.png?mw=700" alt="202301_excel_25-2340--time-b-1.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 👆 下にオレンジ塗るぜ」</p> <p><a href="https://crieit.now.sh/upload_images/0190cff67c269feba781ed9ff9d4c4b563d140e08a2db.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/0190cff67c269feba781ed9ff9d4c4b563d140e08a2db.png?mw=700" alt="202301_excel_25-2346--time-c-1.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 👆 左に A を書いたら こんな感じだな」</p> <p><a href="https://crieit.now.sh/upload_images/e2e349677ccb4abecf4a080e9c770deb63d14154d23b7.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e2e349677ccb4abecf4a080e9c770deb63d14154d23b7.png?mw=700" alt="202301_excel_25-2348--Code.png" /></a></p> <pre><code class="vba">Sub ボタン1_Click() Dim text As String Dim backgroundColor As Long Dim i As Long Dim stateText As String Dim readBackgroundColor As Long Dim writeBackgroundColor As Long Dim moveText As String Dim transitionText As String ' 1回目の処理 text = Worksheets("Tape").Range("A1").Value ' セルの値 backgroundColor = Worksheets("Tape").Range("A1").Interior.color ' 背景色 For i = 2 To 7 stateText = Worksheets("StateTable").Range("A" & i).Value ' セルの値 readBackgroundColor = Worksheets("StateTable").Range("B" & i).Interior.color ' 背景色 ' 一致するか? If text = stateText And backgroundColor = readBackgroundColor Then writeBackgroundColor = Worksheets("StateTable").Range("C" & i).Interior.color ' 背景色 moveText = Worksheets("StateTable").Range("D" & i).Value ' セルの値 transitionText = Worksheets("StateTable").Range("E" & i).Value ' セルの値 ' `Tape` シートの A1 セルの下のセルの背景色を Write列のいう色に塗る Worksheets("Tape").Range("A2").Interior.color = writeBackgroundColor ' Move 列が `>` だったら その右のセルへ、 Transition 列のいうテキストを入れる If moveText = ">" Then Worksheets("Tape").Range("B2").Value = transitionText End If Exit For End If Next i ' TODO ★ 同様の2回目の処理 text = Worksheets("Tape").Range("B2").Value ' セルの値 backgroundColor = Worksheets("Tape").Range("B2").Interior.color ' 背景色 ' ★ 上の行の背景色は引き継ぐ Worksheets("Tape").Range("A3").Interior.color = Worksheets("Tape").Range("A2").Interior.color Worksheets("Tape").Range("B3").Interior.color = Worksheets("Tape").Range("B3").Interior.color For i = 2 To 7 stateText = Worksheets("StateTable").Range("A" & i).Value ' セルの値 readBackgroundColor = Worksheets("StateTable").Range("B" & i).Interior.color ' 背景色 ' 一致するか? If text = stateText And backgroundColor = readBackgroundColor Then writeBackgroundColor = Worksheets("StateTable").Range("C" & i).Interior.color ' 背景色 moveText = Worksheets("StateTable").Range("D" & i).Value ' セルの値 transitionText = Worksheets("StateTable").Range("E" & i).Value ' セルの値 ' `Tape` シートの A1 セルの下のセルの背景色を Write列のいう色に塗る Worksheets("Tape").Range("B3").Interior.color = writeBackgroundColor ' ★ Move 列が `<` だったら その左のセルへ、 Transition 列のいうテキストを入れる If moveText = "<" Then Worksheets("Tape").Range("A3").Value = transitionText End If Exit For End If Next i End Sub </code></pre> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 👆 それを コードにしたら こんな感じだぜ」</p> <p><a href="https://crieit.now.sh/upload_images/beaf94b260ae2602ca8cf7f5bbc769c261daf8686dbda.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/beaf94b260ae2602ca8cf7f5bbc769c261daf8686dbda.png?mw=700" alt="kifuwarabe-futsu.png" /></a><br /> 「 長い」</p> <p><a href="https://crieit.now.sh/upload_images/96fb09724c3ce40ee0861a0fd1da563d61daf8a09d9bc.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/96fb09724c3ce40ee0861a0fd1da563d61daf8a09d9bc.png?mw=700" alt="ohkina-hiyoko-futsu2.png" /></a><br /> 「 これで 2クロック よね」</p> <p><a href="https://crieit.now.sh/upload_images/beaf94b260ae2602ca8cf7f5bbc769c261daf8686dbda.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/beaf94b260ae2602ca8cf7f5bbc769c261daf8686dbda.png?mw=700" alt="kifuwarabe-futsu.png" /></a><br /> 「 何だぜ それ」</p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 次は 3クロック目に 行ってみようぜ?」</p> <p><a href="https://crieit.now.sh/upload_images/beaf94b260ae2602ca8cf7f5bbc769c261daf8686dbda.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/beaf94b260ae2602ca8cf7f5bbc769c261daf8686dbda.png?mw=700" alt="kifuwarabe-futsu.png" /></a><br /> 「 嫌だぜ」</p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 今日は ここまでとするが、 3クロック目 行くからな」</p> <p>📅 2023-01-25 wed 23:51 end</p> <h1 id="📅2023-01-26 thu 18:53 start"><a href="#%F0%9F%93%852023-01-26+thu+18%3A53+start">📅2023-01-26 thu 18:53 start</a></h1> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 VBA でサブルーチンは どうやって書いたらいいんだぜ?」</p> <p><a href="https://crieit.now.sh/upload_images/96fb09724c3ce40ee0861a0fd1da563d61daf8a09d9bc.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/96fb09724c3ce40ee0861a0fd1da563d61daf8a09d9bc.png?mw=700" alt="ohkina-hiyoko-futsu2.png" /></a><br /> 「 ググりゃいいんじゃないの?」</p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 🔍 <code>VBA サブルーチン</code> で検索」</p> <p>📖 <a target="_blank" rel="nofollow noopener" href="https://kosapi.com/post-5008/">Excel VBA 処理の一部をサブルーチン化するCallステートメント</a></p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 👆 よし 分かったぜ」</p> <p><a href="https://crieit.now.sh/upload_images/bd596f09e3b962c6b9f6b5e2603dca2263d24fb97805b.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/bd596f09e3b962c6b9f6b5e2603dca2263d24fb97805b.png?mw=700" alt="202301_excel_26-1901--Subroutine-1.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 👆 スケルトン(Skeleton;穴埋めの穴じゃない方)を書こうぜ」</p> <p><a href="https://crieit.now.sh/upload_images/aeed27da28a1e2e6fb9834509983fad163d2514d6e3aa.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/aeed27da28a1e2e6fb9834509983fad163d2514d6e3aa.png?mw=700" alt="202301_excel_26-1906--MoveCode-1.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 👆 スケルトンの中へ コードを こうやって 入れたらいいんじゃないかだぜ?」</p> <p><a href="https://crieit.now.sh/upload_images/9b465017915b949d3a4152c38134c39863d251d1a8f17.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/9b465017915b949d3a4152c38134c39863d251d1a8f17.png?mw=700" alt="202301_excel_26-1911--MovedCode.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 👆 つまり こう」</p> <p><a href="https://crieit.now.sh/upload_images/7f3a7089c2ea734bbb3f14dbe451e7d163d2523bbff86.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/7f3a7089c2ea734bbb3f14dbe451e7d163d2523bbff86.png?mw=700" alt="202301_excel_26-1912--Call-1.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 👆 移動した跡の所には コール文(Call Statement)を置いておこうぜ?」</p> <pre><code class="vba">Sub ボタン1_Click() ' 1回目の処理 Call On1stClock ' 同様の2回目の処理 Call On2ndClock End Sub Private Sub On1stClock() ' 1回目のクロック Dim text As String Dim backgroundColor As Long Dim i As Long Dim stateText As String Dim readBackgroundColor As Long Dim writeBackgroundColor As Long Dim moveText As String Dim transitionText As String text = Worksheets("Tape").Range("A1").Value ' セルの値 backgroundColor = Worksheets("Tape").Range("A1").Interior.color ' 背景色 For i = 2 To 7 stateText = Worksheets("StateTable").Range("A" & i).Value ' セルの値 readBackgroundColor = Worksheets("StateTable").Range("B" & i).Interior.color ' 背景色 ' 一致するか? If text = stateText And backgroundColor = readBackgroundColor Then writeBackgroundColor = Worksheets("StateTable").Range("C" & i).Interior.color ' 背景色 moveText = Worksheets("StateTable").Range("D" & i).Value ' セルの値 transitionText = Worksheets("StateTable").Range("E" & i).Value ' セルの値 ' `Tape` シートの A1 セルの下のセルの背景色を Write列のいう色に塗る Worksheets("Tape").Range("A2").Interior.color = writeBackgroundColor ' Move 列が `>` だったら その右のセルへ、 Transition 列のいうテキストを入れる If moveText = ">" Then Worksheets("Tape").Range("B2").Value = transitionText End If Exit For End If Next i End Sub Private Sub On2ndClock() ' 2回目のクロック Dim text As String Dim backgroundColor As Long Dim i As Long Dim stateText As String Dim readBackgroundColor As Long Dim writeBackgroundColor As Long Dim moveText As String Dim transitionText As String text = Worksheets("Tape").Range("B2").Value ' セルの値 backgroundColor = Worksheets("Tape").Range("B2").Interior.color ' 背景色 ' ★ 上の行の背景色は引き継ぐ Worksheets("Tape").Range("A3").Interior.color = Worksheets("Tape").Range("A2").Interior.color Worksheets("Tape").Range("B3").Interior.color = Worksheets("Tape").Range("B3").Interior.color For i = 2 To 7 stateText = Worksheets("StateTable").Range("A" & i).Value ' セルの値 readBackgroundColor = Worksheets("StateTable").Range("B" & i).Interior.color ' 背景色 ' 一致するか? If text = stateText And backgroundColor = readBackgroundColor Then writeBackgroundColor = Worksheets("StateTable").Range("C" & i).Interior.color ' 背景色 moveText = Worksheets("StateTable").Range("D" & i).Value ' セルの値 transitionText = Worksheets("StateTable").Range("E" & i).Value ' セルの値 ' `Tape` シートの A1 セルの下のセルの背景色を Write列のいう色に塗る Worksheets("Tape").Range("B3").Interior.color = writeBackgroundColor ' ★ Move 列が `<` だったら その左のセルへ、 Transition 列のいうテキストを入れる If moveText = "<" Then Worksheets("Tape").Range("A3").Value = transitionText End If Exit For End If Next i End Sub </code></pre> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 じゃあ <code>GUI</code> シートのボタンを押そうぜ?」</p> <p><a href="https://crieit.now.sh/upload_images/60d46eddc740de260994cbc83f82edc463d252c114f71.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/60d46eddc740de260994cbc83f82edc463d252c114f71.png?mw=700" alt="202301_excel_26-1915--Check.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 👆 ちゃんと動いてるな」</p> <p><a href="https://crieit.now.sh/upload_images/beaf94b260ae2602ca8cf7f5bbc769c261daf8686dbda.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/beaf94b260ae2602ca8cf7f5bbc769c261daf8686dbda.png?mw=700" alt="kifuwarabe-futsu.png" /></a><br /> 「 場所を移しただけだしな」</p> <p>📅2023-01-26 thu 19:16</p> <p><a href="https://crieit.now.sh/upload_images/96fb09724c3ce40ee0861a0fd1da563d61daf8a09d9bc.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/96fb09724c3ce40ee0861a0fd1da563d61daf8a09d9bc.png?mw=700" alt="ohkina-hiyoko-futsu2.png" /></a><br /> 「 3クロック目も コピー貼り付けして作んの?」</p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 嫌になるだろ」</p> <p><a href="https://crieit.now.sh/upload_images/3ef93b3d925a27efdeb7ebe3aa75cd5d63d253cfe6a02.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3ef93b3d925a27efdeb7ebe3aa75cd5d63d253cfe6a02.png?mw=700" alt="202301_excel_26-1919--OnClock-1.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 👆 何回目のクロックでも使えるジェネラル(General)なサブルーチンを作ろうぜ?」</p> <p><a href="https://crieit.now.sh/upload_images/5b0a749e37816dd597d3d8c6ca75b62763d255a98666e.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b0a749e37816dd597d3d8c6ca75b62763d255a98666e.png?mw=700" alt="202301_excel_26-1911--MovedCode-diff.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 👆 違うところは5か所ぐらいなんだから、ここを違わないようにすればいいわけだぜ」</p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 A列の右隣は B列 だが、<br /> <code>A</code> の右は何か尋ねたら <code>B</code> が返ってくるような方法って VBA にあるのかだぜ?」</p> <p><a href="https://crieit.now.sh/upload_images/96fb09724c3ce40ee0861a0fd1da563d61daf8a09d9bc.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/96fb09724c3ce40ee0861a0fd1da563d61daf8a09d9bc.png?mw=700" alt="ohkina-hiyoko-futsu2.png" /></a><br /> 「 ググりゃいいんじゃないの?」</p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 🔍 <code>VBA 列アルファベット変換</code> で検索」</p> <p>📖 <a target="_blank" rel="nofollow noopener" href="https://qiita.com/11295/items/c26017eb21cb319fd29d">【ExcelVBA】列名のアルファベットと列番号の数字を相互変換する</a></p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 👆 よし 分かったぜ」</p> <p><a href="https://crieit.now.sh/upload_images/692b189f8ba2c55c3ffb94fda73ba9b963d26dd08ec89.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/692b189f8ba2c55c3ffb94fda73ba9b963d26dd08ec89.png?mw=700" alt="202301_excel_26-2110--General.png" /></a></p> <pre><code class="vba">Sub ボタン1_Click() ' 1回目の処理 Call OnClock("A", 1) ' 同様の2回目の処理 Call OnClock("B", 2) End Sub Private Sub OnClock(previousFileAlphabet As String, previousRank As Long) ' TODO 毎クロック(n回目のクロック) Dim previousText As String Dim previousBackgroundColor As Long Dim previousCell As String Dim currentRank As Long Dim currentCell As String Dim stateText As String Dim readBackgroundColor As Long Dim writeBackgroundColor As Long Dim moveText As String Dim transitionText As String Dim i As Long previousCell = previousFileAlphabet & previousRank currentRank = previousRank + 1 currentCell = previousFileAlphabet & currentRank Debug.Print ("--------") Debug.Print ("previousFileAlphabet:" & previousFileAlphabet) Debug.Print ("previousRank :" & previousRank) Debug.Print ("previousCell :" & previousCell) Debug.Print ("currentRank :" & currentRank) Debug.Print ("currentCell :" & currentCell) ' 開始行の背景色は、次行に引き継ぐ If 2 <= previousRank Then Dim aBackgroundColor As Long Dim bBackgroundColor As Long aBackgroundColor = Worksheets("Tape").Range("A" & previousRank).Interior.color bBackgroundColor = Worksheets("Tape").Range("B" & previousRank).Interior.color Worksheets("Tape").Range("A" & currentRank).Interior.color = aBackgroundColor Worksheets("Tape").Range("B" & currentRank).Interior.color = bBackgroundColor Debug.Print ("aBackgroundColor:" & aBackgroundColor) Debug.Print ("bBackgroundColor:" & bBackgroundColor) End If previousText = Worksheets("Tape").Range(previousCell).Value ' 開始セルの値 previousBackgroundColor = Worksheets("Tape").Range(previousCell).Interior.color ' 開始セルの背景色 Debug.Print ("previousText :" & previousText) Debug.Print ("previousBackgroundColor:" & previousBackgroundColor) For i = 2 To 7 stateText = Worksheets("StateTable").Range("A" & i).Value ' 状態テーブルのState値 readBackgroundColor = Worksheets("StateTable").Range("B" & i).Interior.color ' 状態テーブルのRead列の背景色 Debug.Print ("stateText :" & stateText) Debug.Print ("readBackgroundColor :" & readBackgroundColor) ' 一致するか? If previousText = stateText And previousBackgroundColor = readBackgroundColor Then writeBackgroundColor = Worksheets("StateTable").Range("C" & i).Interior.color ' 状態テーブルのWrite列の背景色 moveText = Worksheets("StateTable").Range("D" & i).Value ' 状態テーブルのMove列の値 transitionText = Worksheets("StateTable").Range("E" & i).Value ' 状態テーブルのTransition列の値 Debug.Print ("writeBackgroundColor:" & writeBackgroundColor) Debug.Print ("moveText :" & moveText) Debug.Print ("transitionText :" & transitionText) ' `Tape` シートの A1 セルの下のセルの背景色を Write列のいう色に塗る Worksheets("Tape").Range(currentCell).Interior.color = writeBackgroundColor Dim horizontal As Long ' 水平方向 If moveText = ">" Then ' Move 列が `>` だったら その右のセルへ horizontal = 1 ElseIf moveText = "<" Then ' Move 列が `<` だったら その左のセルへ horizontal = -1 End If Debug.Print ("horizontal:" & horizontal) ' Transition 列のいうテキストを入れる Dim startFileNumber As Integer Dim nextFileAlphabet As String startFileNumber = Columns(previousFileAlphabet).Column nextFileAlphabet = Split(Cells(1, startFileNumber + horizontal).Address, "$")(1) Debug.Print ("startFileNumber :" & startFileNumber) Debug.Print ("nextFileAlphabet:" & nextFileAlphabet) Worksheets("Tape").Range(nextFileAlphabet & currentRank).Value = transitionText Exit For End If Next i End Sub </code></pre> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 👆 けっこう 大がかりに 変えることになってしまったぜ」</p> <p>📅2023-01-26 thu 21:12</p> <p><a href="https://crieit.now.sh/upload_images/beaf94b260ae2602ca8cf7f5bbc769c261daf8686dbda.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/beaf94b260ae2602ca8cf7f5bbc769c261daf8686dbda.png?mw=700" alt="kifuwarabe-futsu.png" /></a><br /> 「 こんなん 何がどう変わったのか 読者 分からんだろ」</p> <p><a href="https://crieit.now.sh/upload_images/fdfc0cf2fdc2fb0f0adac6ef4e59d0a863d26ebbbdd65.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/fdfc0cf2fdc2fb0f0adac6ef4e59d0a863d26ebbbdd65.png?mw=700" alt="202301_excel_26-2114--3rdClock-1.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 👆 1クロック目と 2クロック目で違うところは、 スタート地点の列番号と、行番号だけだったということだぜ」</p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 このように 2つのサブルーチンの差異が サブルーチンの外に押し出されたものを <strong>アーギュメント</strong>(Argument;実引数)と呼ぶ」</p> <p><a href="https://crieit.now.sh/upload_images/96fb09724c3ce40ee0861a0fd1da563d61daf8a09d9bc.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/96fb09724c3ce40ee0861a0fd1da563d61daf8a09d9bc.png?mw=700" alt="ohkina-hiyoko-futsu2.png" /></a><br /> 「 ふーん」</p> <p><a href="https://crieit.now.sh/upload_images/96fb09724c3ce40ee0861a0fd1da563d61daf8a09d9bc.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/96fb09724c3ce40ee0861a0fd1da563d61daf8a09d9bc.png?mw=700" alt="ohkina-hiyoko-futsu2.png" /></a><br /> 「 3クロック目は どう書くの?」</p> <p><a href="https://crieit.now.sh/upload_images/0a6c4a73d2935ca90b25ac2e8473e95563d2709e4c167.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/0a6c4a73d2935ca90b25ac2e8473e95563d2709e4c167.png?mw=700" alt="202301_excel_26-2121--argument-1.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 👆 <code>A1</code> とか <code>B2</code> というのは、1クロック前に居たセルだぜ。<br /> だから 前の計算結果を もらうといい。<br /> 書き直そう」</p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 VBA でファンクションは どうやって書いたらいいんだぜ?」</p> <p><a href="https://crieit.now.sh/upload_images/96fb09724c3ce40ee0861a0fd1da563d61daf8a09d9bc.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/96fb09724c3ce40ee0861a0fd1da563d61daf8a09d9bc.png?mw=700" alt="ohkina-hiyoko-futsu2.png" /></a><br /> 「 ググりゃいいんじゃないの?」</p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 🔍 <code>VBA ファンクション</code> で検索」</p> <p>📖 <a target="_blank" rel="nofollow noopener" href="https://www.bold.ne.jp/engineer-club/vba-function">VBA Functionプロシージャについて ~関数の解説と使用例~</a></p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 👆 よし 分かったぜ」</p> <p><a href="https://crieit.now.sh/upload_images/b537b697560f1fb0aeeaadc57a17f15b63d2751076122.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/b537b697560f1fb0aeeaadc57a17f15b63d2751076122.png?mw=700" alt="202301_excel_26-2141--function.png" /></a></p> <pre><code class="vba">Sub ボタン1_Click() Dim resultCell As String ' 1回目の処理 resultCell = OnClock("A1") ' 同様の2回目の処理 resultCell = OnClock(resultCell) End Sub Private Function OnClock(previousCell As String) As String ' 毎クロック(n回目のクロック) Dim previousText As String Dim previousBackgroundColor As Long Dim currentRank As Long Dim currentCell As String Dim stateText As String Dim readBackgroundColor As Long Dim writeBackgroundColor As Long Dim moveText As String Dim transitionText As String Dim i As Long previousFileAlphabet = Split(Cells(1, Range(previousCell).Column).Address, "$")(1) previousRank = Range(previousCell).Row currentRank = previousRank + 1 currentCell = previousFileAlphabet & currentRank Debug.Print ("--------") Debug.Print ("previousCell :" & previousCell) Debug.Print ("previousFileAlphabet:" & previousFileAlphabet) Debug.Print ("previousRank :" & previousRank) Debug.Print ("currentRank :" & currentRank) Debug.Print ("currentCell :" & currentCell) ' 開始行の背景色は、次行に引き継ぐ If 2 <= previousRank Then Dim aBackgroundColor As Long Dim bBackgroundColor As Long aBackgroundColor = Worksheets("Tape").Range("A" & previousRank).Interior.color bBackgroundColor = Worksheets("Tape").Range("B" & previousRank).Interior.color Worksheets("Tape").Range("A" & currentRank).Interior.color = aBackgroundColor Worksheets("Tape").Range("B" & currentRank).Interior.color = bBackgroundColor Debug.Print ("aBackgroundColor:" & aBackgroundColor) Debug.Print ("bBackgroundColor:" & bBackgroundColor) End If previousText = Worksheets("Tape").Range(previousCell).Value ' 開始セルの値 previousBackgroundColor = Worksheets("Tape").Range(previousCell).Interior.color ' 開始セルの背景色 Debug.Print ("previousText :" & previousText) Debug.Print ("previousBackgroundColor:" & previousBackgroundColor) For i = 2 To 7 stateText = Worksheets("StateTable").Range("A" & i).Value ' 状態テーブルのState値 readBackgroundColor = Worksheets("StateTable").Range("B" & i).Interior.color ' 状態テーブルのRead列の背景色 Debug.Print ("stateText :" & stateText) Debug.Print ("readBackgroundColor :" & readBackgroundColor) ' 一致するか? If previousText = stateText And previousBackgroundColor = readBackgroundColor Then writeBackgroundColor = Worksheets("StateTable").Range("C" & i).Interior.color ' 状態テーブルのWrite列の背景色 moveText = Worksheets("StateTable").Range("D" & i).Value ' 状態テーブルのMove列の値 transitionText = Worksheets("StateTable").Range("E" & i).Value ' 状態テーブルのTransition列の値 Debug.Print ("writeBackgroundColor:" & writeBackgroundColor) Debug.Print ("moveText :" & moveText) Debug.Print ("transitionText :" & transitionText) ' `Tape` シートの A1 セルの下のセルの背景色を Write列のいう色に塗る Worksheets("Tape").Range(currentCell).Interior.color = writeBackgroundColor Dim horizontal As Long ' 水平方向 If moveText = ">" Then ' Move 列が `>` だったら その右のセルへ horizontal = 1 ElseIf moveText = "<" Then ' Move 列が `<` だったら その左のセルへ horizontal = -1 End If Debug.Print ("horizontal:" & horizontal) ' Transition 列のいうテキストを入れる Dim previousFileNumber As Integer Dim nextFileAlphabet As String Dim nextCell As String previousFileNumber = Columns(previousFileAlphabet).Column nextFileAlphabet = Split(Cells(1, previousFileNumber + horizontal).Address, "$")(1) nextCell = nextFileAlphabet & currentRank Debug.Print ("previousFileNumber :" & previousFileNumber) Debug.Print ("nextFileAlphabet :" & nextFileAlphabet) Debug.Print ("nextCell :" & nextCell) Worksheets("Tape").Range(nextCell).Value = transitionText ' 関数から抜ける OnClock = nextCell Exit Function End If Next i End Function </code></pre> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 👆 さらに 改造してしまったぜ」</p> <p>📅2023-01-26 thu 21:43</p> <p><a href="https://crieit.now.sh/upload_images/beaf94b260ae2602ca8cf7f5bbc769c261daf8686dbda.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/beaf94b260ae2602ca8cf7f5bbc769c261daf8686dbda.png?mw=700" alt="kifuwarabe-futsu.png" /></a><br /> 「 こんなん 何がどう変わったのか 読者 分からんだろ」</p> <p><a href="https://crieit.now.sh/upload_images/96464638d29440e381b1a1a8848dbbec63d27668d882a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/96464638d29440e381b1a1a8848dbbec63d27668d882a.png?mw=700" alt="202301_excel_26-2146--main-1.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 👆 このように 前の計算結果を使って また同様に計算するように作るのは よくあるテクニックだぜ。<br /> <strong>漸化式</strong>(ぜんかしき) とか これだな」</p> <p><a href="https://crieit.now.sh/upload_images/96fb09724c3ce40ee0861a0fd1da563d61daf8a09d9bc.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/96fb09724c3ce40ee0861a0fd1da563d61daf8a09d9bc.png?mw=700" alt="ohkina-hiyoko-futsu2.png" /></a><br /> 「 さっさと 3クロック目を書きなさいよ」</p> <p><a href="https://crieit.now.sh/upload_images/fb4fbbb839b9dbe36e947cc566b9f0bd63d2773c25cbc.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/fb4fbbb839b9dbe36e947cc566b9f0bd63d2773c25cbc.png?mw=700" alt="202301_excel_26-2150--3rdClock-1.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 👆 3クロック目は、2クロック目と同じコードで いいはずなんだぜ。<br /> 動かしてみよう」</p> <p><a href="https://crieit.now.sh/upload_images/66f641f330add453cbf13187a107f99a63d277b62b870.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/66f641f330add453cbf13187a107f99a63d277b62b870.png?mw=700" alt="202301_excel_26-2152--error-1.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 👆 エラーが出たぜ」</p> <p><a href="https://crieit.now.sh/upload_images/beaf94b260ae2602ca8cf7f5bbc769c261daf8686dbda.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/beaf94b260ae2602ca8cf7f5bbc769c261daf8686dbda.png?mw=700" alt="kifuwarabe-futsu.png" /></a><br /> 「 直せ!」</p> <p><a href="https://crieit.now.sh/upload_images/0f024dcbc6526f5a4dcbcdef822d799d63d27800a2056.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/0f024dcbc6526f5a4dcbcdef822d799d63d27800a2056.png?mw=700" alt="202301_excel_26-2153--debug-1.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 👆 <code>[デバッグ(D)]</code> ボタンを押してみようぜ?」</p> <p><a href="https://crieit.now.sh/upload_images/e034203acef8d1e6ea39d674be15a19663d278556be61.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e034203acef8d1e6ea39d674be15a19663d278556be61.png?mw=700" alt="202301_excel_26-2155--highlight.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/96fb09724c3ce40ee0861a0fd1da563d61daf8a09d9bc.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/96fb09724c3ce40ee0861a0fd1da563d61daf8a09d9bc.png?mw=700" alt="ohkina-hiyoko-futsu2.png" /></a><br /> 「 エラーがあった行をハイライト(Highlight)してくれてるのかもしれないけど 説明がないから分かんないわねぇ」</p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 また ショートカットを打鍵すれば ウィンドウが出てくるのかだぜ?」</p> <p><a href="https://crieit.now.sh/upload_images/96fb09724c3ce40ee0861a0fd1da563d61daf8a09d9bc.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/96fb09724c3ce40ee0861a0fd1da563d61daf8a09d9bc.png?mw=700" alt="ohkina-hiyoko-futsu2.png" /></a><br /> 「 ググりゃいいんじゃないの?」</p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 🔍 <code>VBA スタックトレース</code> で検索」</p> <p>📖 <a target="_blank" rel="nofollow noopener" href="https://speakerdeck.com/narazaka/vbanameteta?slide=116">VBAナメてた</a></p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 👆 行番号とエラーコードしか 分かんないらしいぜ」</p> <p><a href="https://crieit.now.sh/upload_images/96fb09724c3ce40ee0861a0fd1da563d61daf8a09d9bc.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/96fb09724c3ce40ee0861a0fd1da563d61daf8a09d9bc.png?mw=700" alt="ohkina-hiyoko-futsu2.png" /></a><br /> 「 1994年の環境ねえ」</p> <p>📅2023-01-26 thu 22:01</p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 🔍 <code>VBA 1004 Error</code> で検索」</p> <p>📖 <a target="_blank" rel="nofollow noopener" href="https://www.wallstreetmojo.com/vba-1004-error/#:~:text=This%20error%20occurs%20when%20you,name%20with%20the%20excel%20extension">VBA Error 1004 in Excel</a></p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 👆 無いシート名や、無いアドレスを指定したら 出てくるエラーかも知らん」</p> <p><a href="https://crieit.now.sh/upload_images/3265aec10a1e7becdb64caf901d1eb1763d27b13390ff.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3265aec10a1e7becdb64caf901d1eb1763d27b13390ff.png?mw=700" alt="202301_excel_26-2207--error.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 👆 A列より 左に進もうとして 0列目は無いので エラーになったんだな」</p> <p><a href="https://crieit.now.sh/upload_images/beaf94b260ae2602ca8cf7f5bbc769c261daf8686dbda.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/beaf94b260ae2602ca8cf7f5bbc769c261daf8686dbda.png?mw=700" alt="kifuwarabe-futsu.png" /></a><br /> 「 A列の左に 列を挿入しろだぜ」</p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 🔍 <code>VBA 列の挿入</code> で検索」</p> <p>📖 <a target="_blank" rel="nofollow noopener" href="https://www.tipsfound.com/vba/09005">VBA 列を挿入する</a></p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 👆 よし 分かったぜ」</p> <p><a href="https://crieit.now.sh/upload_images/9c1455ad9824e532e31e7a03b5cf779363d27d2c21916.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/9c1455ad9824e532e31e7a03b5cf779363d27d2c21916.png?mw=700" alt="202301_excel_26-2215--bugfix-1.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 👆 0列にアクセスしようとしたら、<br /> A列の左に 列挿入して、 列番地も左に 1つずらして 1列にアクセスするように変更しよう」</p> <p><a href="https://crieit.now.sh/upload_images/6e7a3a2dcf4463fa7169bed325e8f84163d27da7bd035.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/6e7a3a2dcf4463fa7169bed325e8f84163d27da7bd035.png?mw=700" alt="202301_excel_26-2218--3rdClockDone.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 👆 3クロック目も 動いたようだな」</p> <p>📅2023-01-26 thu 22:18</p> <p><a href="https://crieit.now.sh/upload_images/96fb09724c3ce40ee0861a0fd1da563d61daf8a09d9bc.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/96fb09724c3ce40ee0861a0fd1da563d61daf8a09d9bc.png?mw=700" alt="ohkina-hiyoko-futsu2.png" /></a><br /> 「 じゃあ あと 100クロックぐらい 動かしましょう」</p> <p><a href="https://crieit.now.sh/upload_images/fb04bbd9f19fbc722de48dff01546cd663d27fa2132bb.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/fb04bbd9f19fbc722de48dff01546cd663d27fa2132bb.png?mw=700" alt="202301_excel_26-2226--For-1.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 👆 <code>For</code> 文を使えば 100行書かずに済むから楽だよな。<br /> 漸化式の形に作っておけば 繰り返しの回数を指定するだけでいいから 手間要らずだぜ」</p> <p><a href="https://crieit.now.sh/upload_images/a1471049d3f876f18e31d667018db7ba63d2805d6d23d.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/a1471049d3f876f18e31d667018db7ba63d2805d6d23d.png?mw=700" alt="202301_excel_26-2229--Error-1.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 👆 エラーが出た」</p> <p><a href="https://crieit.now.sh/upload_images/beaf94b260ae2602ca8cf7f5bbc769c261daf8686dbda.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/beaf94b260ae2602ca8cf7f5bbc769c261daf8686dbda.png?mw=700" alt="kifuwarabe-futsu.png" /></a><br /> 「 🔍 <code>VBA 1004 Error</code> で検索しろだぜ」</p> <p><a href="https://crieit.now.sh/upload_images/96fb09724c3ce40ee0861a0fd1da563d61daf8a09d9bc.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/96fb09724c3ce40ee0861a0fd1da563d61daf8a09d9bc.png?mw=700" alt="ohkina-hiyoko-futsu2.png" /></a><br /> 「 さっきと同じ 1004 番よ」</p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 今度は何が無かったんだろな?」</p> <p><a href="https://crieit.now.sh/upload_images/e12e7323f7bb4b8c004c359ac49f51f463d282597704d.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e12e7323f7bb4b8c004c359ac49f51f463d282597704d.png?mw=700" alt="202301_excel_26-2237--empty-previous-cell-1.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 👆 <code>previousCell</code> 変数の中身が空文字列だぜ。」</p> <p><a href="https://crieit.now.sh/upload_images/96fb09724c3ce40ee0861a0fd1da563d61daf8a09d9bc.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/96fb09724c3ce40ee0861a0fd1da563d61daf8a09d9bc.png?mw=700" alt="ohkina-hiyoko-futsu2.png" /></a><br /> 「 <code>A1</code> とか、何か番地が入っているはずじゃない」</p> <p><a href="https://crieit.now.sh/upload_images/8e8dc3028f75bf93b711ed6b1dc4afeb63d2817a7f5e3.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/8e8dc3028f75bf93b711ed6b1dc4afeb63d2817a7f5e3.png?mw=700" alt="202301_excel_26-2234--reset-button-1.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 👆 <code>リセット</code> ボタンを押すと デバッグは止まるぜ」</p> <p><a href="https://crieit.now.sh/upload_images/1d653278fa64d4c114346024b8a8d96563d282f95697e.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/1d653278fa64d4c114346024b8a8d96563d282f95697e.png?mw=700" alt="202301_excel_26-2240--Halt-1.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 👆 多分、 <code>HALT</code> (ハルト)が出たら 終了しないといけないんだぜ」</p> <p><a href="https://crieit.now.sh/upload_images/841a4e08b5050abfa210923ba8fae31463d28497a867f.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/841a4e08b5050abfa210923ba8fae31463d28497a867f.png?mw=700" alt="202301_excel_26-2246--success-1.png" /></a></p> <pre><code class="vba"> If transitionText = "HALT" Then ' 関数から抜ける OnClock = "SUCCESS" Exit Function End If </code></pre> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 👆 じゃあ <code>HALT</code> (ハルト)が出たときは セル番地ではなく <code>SUCCESS</code> を返すという取り決めにしておこうぜ」</p> <p><a href="https://crieit.now.sh/upload_images/c564d0d7d0a67a74807f51a08fe8c7e063d285d9d674a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/c564d0d7d0a67a74807f51a08fe8c7e063d285d9d674a.png?mw=700" alt="202301_excel_26-2252--exitFor-1.png" /></a></p> <pre><code class="vba"> ' 正常終了時はループから抜ける If resultCell = "SUCCESS" Then Exit For End If </code></pre> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 👆 関数の呼び出し元でも 前判定で <code>resultCell</code> 変数の内容が <code>SUCCESS</code> だったら、ループから抜けるようにすれば コードも短いぜ」</p> <p><a href="https://crieit.now.sh/upload_images/fb5cfeec04b8547813467f8277e03b0363d2866e64c44.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/fb5cfeec04b8547813467f8277e03b0363d2866e64c44.png?mw=700" alt="202301_excel_26-2255--play.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 👆 なんか 動いた跡があるな」</p> <p><a href="https://crieit.now.sh/upload_images/fcddc59f9b69d6982a3cfa1957cb583463d286dede709.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/fcddc59f9b69d6982a3cfa1957cb583463d286dede709.png?mw=700" alt="202301_excel_26-2257--QUOTE-Wikipedia.png" /></a></p> <p>📖 <a target="_blank" rel="nofollow noopener" href="https://en.wikipedia.org/wiki/Turing_machine">Turing machine</a></p> <p><a href="https://crieit.now.sh/upload_images/96fb09724c3ce40ee0861a0fd1da563d61daf8a09d9bc.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/96fb09724c3ce40ee0861a0fd1da563d61daf8a09d9bc.png?mw=700" alt="ohkina-hiyoko-futsu2.png" /></a><br /> 「 👆 Wikipedia のサンプルと違くない?」</p> <p><a href="https://crieit.now.sh/upload_images/28e374907e108dedeadc637e6038f08c63d2896c1f1a6.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/28e374907e108dedeadc637e6038f08c63d2896c1f1a6.png?mw=700" alt="202301_excel_26-2308--copy-paint-1.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 👆 A列と B列しか 背景色をコピーしてないからな」</p> <p><a href="https://crieit.now.sh/upload_images/beaf94b260ae2602ca8cf7f5bbc769c261daf8686dbda.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/beaf94b260ae2602ca8cf7f5bbc769c261daf8686dbda.png?mw=700" alt="kifuwarabe-futsu.png" /></a><br /> 「 テープの長さと同じ幅だけ コピーしてくれだぜ」</p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 じゃあ テープの長さも 数えておかないといけないな」</p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 VBA で、自由変数の使い方、または 引数の参照渡しのやり方は どう書くんだろうな?」</p> <p><a href="https://crieit.now.sh/upload_images/96fb09724c3ce40ee0861a0fd1da563d61daf8a09d9bc.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/96fb09724c3ce40ee0861a0fd1da563d61daf8a09d9bc.png?mw=700" alt="ohkina-hiyoko-futsu2.png" /></a><br /> 「 ググりゃいいんじゃないの?」</p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 🔍 <code>VBA 引数の参照渡し</code> で検索」</p> <p>📖 <a target="_blank" rel="nofollow noopener" href="https://excel-ubara.com/excelvba4/EXCEL218.html">値渡し(ByVal)、参照渡し(ByRef)について</a></p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 👆 よし 分かったぜ」</p> <p><a href="https://crieit.now.sh/upload_images/beaf94b260ae2602ca8cf7f5bbc769c261daf8686dbda.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/beaf94b260ae2602ca8cf7f5bbc769c261daf8686dbda.png?mw=700" alt="kifuwarabe-futsu.png" /></a><br /> 「 ぜったい そんな記事を ちらっと読んでも 何も分からないけどな」</p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 プログラムの組み方は分かってるが VBA での書き方が分からないだけなんで、ちら見で 充分だぜ」</p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 あれっ? <code>ByRef tapeWidth As Long</code> と書いても 参照渡しになって無(ね)。<br /> 調べても分からないことはある。<br /> 自由変数にするか」</p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 🔍 <code>VBA グローバル変数</code> で検索」</p> <p>📖 <a target="_blank" rel="nofollow noopener" href="http://officetanaka.net/excel/vba/variable/05.htm">変数の適用範囲</a></p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 👆 よし 分かったぜ」</p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 でも 書いているうちに <code>tapeWith</code> というスペルミスを見つけて <code>tapeWidth</code> 直したら動くようになった」</p> <p><a href="https://crieit.now.sh/upload_images/af1d389778a107a54445f1e0442c878963d294a4512f6.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/af1d389778a107a54445f1e0442c878963d294a4512f6.png?mw=700" alt="202301_excel_26-2354--codeA-1.png" /></a><br /> <a href="https://crieit.now.sh/upload_images/b55aa54001335ce25c06ca45f7c876a263d294fddbcb3.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/b55aa54001335ce25c06ca45f7c876a263d294fddbcb3.png?mw=700" alt="202301_excel_26-2357--codeB-1.png" /></a></p> <pre><code class="vba">Sub ボタン1_Click() Dim resultCell As String Dim tapeWidth As Long tapeWidth = 1 ' "A1" セル1つ分 ' 1回目の処理 resultCell = OnClock("A1", tapeWidth) ' 同様の i 回目の処理 Dim i As Long For i = 2 To 100 ' 正常終了時はループから抜ける If resultCell = "SUCCESS" Then Exit For End If resultCell = OnClock(resultCell, tapeWidth) Next i End Sub Private Function OnClock(previousCell As String, ByRef tapeWidth) As String ' 毎クロック(n回目のクロック) Dim previousFileAlphabet As String Dim previousRank As Long Dim previousText As String Dim previousBackgroundColor As Long Dim currentRank As Long Dim currentCell As String Dim stateText As String Dim readBackgroundColor As Long Dim writeBackgroundColor As Long Dim moveText As String Dim transitionText As String Dim i As Long previousFileAlphabet = Split(Cells(1, Range(previousCell).Column).Address, "$")(1) previousRank = Range(previousCell).Row currentRank = previousRank + 1 currentCell = previousFileAlphabet & currentRank Debug.Print ("--------") Debug.Print ("previousCell :" & previousCell) Debug.Print ("previousFileAlphabet:" & previousFileAlphabet) Debug.Print ("previousRank :" & previousRank) Debug.Print ("currentRank :" & currentRank) Debug.Print ("currentCell :" & currentCell) Debug.Print ("tapeWidth :" & tapeWidth) ' 開始行の背景色は、次行に引き継ぐ If 2 <= previousRank Then For i = 1 To (tapeWidth + 1) Dim tempFileAlphabet As String Dim tempBackgroundColor As Long tempFileAlphabet = Split(Cells(1, i).Address, "$")(1) tempBackgroundColor = Worksheets("Tape").Range(tempFileAlphabet & previousRank).Interior.color Debug.Print ("i :" & i) Debug.Print ("tempFileAlphabet :" & tempFileAlphabet) Debug.Print ("tempBackgroundColor:" & tempBackgroundColor) Worksheets("Tape").Range(tempFileAlphabet & currentRank).Interior.color = tempBackgroundColor Next i End If previousText = Worksheets("Tape").Range(previousCell).Value ' 開始セルの値 previousBackgroundColor = Worksheets("Tape").Range(previousCell).Interior.color ' 開始セルの背景色 Debug.Print ("previousText :" & previousText) Debug.Print ("previousBackgroundColor:" & previousBackgroundColor) For i = 2 To 7 stateText = Worksheets("StateTable").Range("A" & i).Value ' 状態テーブルのState値 readBackgroundColor = Worksheets("StateTable").Range("B" & i).Interior.color ' 状態テーブルのRead列の背景色 Debug.Print ("stateText :" & stateText) Debug.Print ("readBackgroundColor :" & readBackgroundColor) ' 一致するか? If previousText = stateText And previousBackgroundColor = readBackgroundColor Then writeBackgroundColor = Worksheets("StateTable").Range("C" & i).Interior.color ' 状態テーブルのWrite列の背景色 moveText = Worksheets("StateTable").Range("D" & i).Value ' 状態テーブルのMove列の値 transitionText = Worksheets("StateTable").Range("E" & i).Value ' 状態テーブルのTransition列の値 Debug.Print ("writeBackgroundColor:" & writeBackgroundColor) Debug.Print ("moveText :" & moveText) Debug.Print ("transitionText :" & transitionText) ' `Tape` シートの A1 セルの下のセルの背景色を Write列のいう色に塗る Worksheets("Tape").Range(currentCell).Interior.color = writeBackgroundColor Dim horizontal As Long ' 水平方向 If moveText = ">" Then ' Move 列が `>` だったら その右のセルへ horizontal = 1 ElseIf moveText = "<" Then ' Move 列が `<` だったら その左のセルへ horizontal = -1 End If Debug.Print ("horizontal:" & horizontal) ' Transition 列のいうテキストを入れる Dim previousFileNumber As Integer Dim nextFileAlphabet As String Dim nextFileNumber As Integer Dim nextCell As String previousFileNumber = Columns(previousFileAlphabet).Column nextFileNumber = previousFileNumber + horizontal Debug.Print ("previousFileNumber :" & previousFileNumber) Debug.Print ("nextFileNumber :" & nextFileNumber) If nextFileNumber = 0 Then Worksheets("Tape").Columns("A").Insert ' A 列の左に列挿入 nextFileNumber = nextFileNumber + 1 ' 列番号を 1 つ左へずらす tapeWidth = tapeWidth + 1 ' Update ElseIf tapeWidth < nextFileNumber Then tapeWidth = nextFileNumber ' Update End If nextFileAlphabet = Split(Cells(1, nextFileNumber).Address, "$")(1) nextCell = nextFileAlphabet & currentRank Debug.Print ("nextFileAlphabet :" & nextFileAlphabet) Debug.Print ("nextCell :" & nextCell) Worksheets("Tape").Range(nextCell).Value = transitionText If transitionText = "HALT" Then ' 関数から抜ける OnClock = "SUCCESS" Exit Function End If ' 関数から抜ける OnClock = nextCell Exit Function End If Next i End Function </code></pre> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 👆 よし <code>tapeWidth</code> も付けたぜ」</p> <p><a href="https://crieit.now.sh/upload_images/91ed806503af3b04a8d5394f6273ba2863d29593358bd.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/91ed806503af3b04a8d5394f6273ba2863d29593358bd.png?mw=700" alt="202301_excel_27-0000--play.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 👆 チューリング・マシンが でけたぜ」</p> <p>📅2023-01-27 thu 00:01</p> <p><a href="https://crieit.now.sh/upload_images/96fb09724c3ce40ee0861a0fd1da563d61daf8a09d9bc.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/96fb09724c3ce40ee0861a0fd1da563d61daf8a09d9bc.png?mw=700" alt="ohkina-hiyoko-futsu2.png" /></a><br /> 「 <code>HALT</code> は出力しないのが チューリング・マシンみたいよ?」</p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 じゃあ <code>StateTable</code> の <code>Transition</code> 列で <code>HALT</code> を見つけたところで 止めた方がいいのか」</p> <p><a href="https://crieit.now.sh/upload_images/abf090d159ec50ccbce29faabf09177763d297118951f.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/abf090d159ec50ccbce29faabf09177763d297118951f.png?mw=700" alt="202301_excel_27-0005--moveCode-1.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 👆 判定部を 上に持っていけば いいんじゃないかだぜ?」</p> <p><a href="https://crieit.now.sh/upload_images/399be2584be9b9b2bba3b35100bb8eea63d29777bbde4.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/399be2584be9b9b2bba3b35100bb8eea63d29777bbde4.png?mw=700" alt="202301_excel_27-0008--copy-1.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/96fb09724c3ce40ee0861a0fd1da563d61daf8a09d9bc.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/96fb09724c3ce40ee0861a0fd1da563d61daf8a09d9bc.png?mw=700" alt="ohkina-hiyoko-futsu2.png" /></a><br /> 「 👆 1行 余分に背景色をコピーしてるわよ?」</p> <p><a href="https://crieit.now.sh/upload_images/a8099b2405cf0ef7b4787895939535d763d29816eaaea.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/a8099b2405cf0ef7b4787895939535d763d29816eaaea.png?mw=700" alt="202301_excel_27-0010--copyB-1.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 👆 背景色のコピーを、判定部の後ろに持っていけば いいんじゃないかだぜ?」</p> <p><a href="https://crieit.now.sh/upload_images/12497135a2ffdac5dce45202516e999e63d2987639a62.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/12497135a2ffdac5dce45202516e999e63d2987639a62.png?mw=700" alt="202301_excel_27-0012--error.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 👆 おっと」</p> <p><a href="https://crieit.now.sh/upload_images/4eaad7541e0323d5f67ce285389749c163d298cfdb63f.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/4eaad7541e0323d5f67ce285389749c163d298cfdb63f.png?mw=700" alt="202301_excel_27-0013--define-1.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 👆 変数 <code>i</code> は、外側のループの ループ・カウンターとして使ってたか」</p> <p><a href="https://crieit.now.sh/upload_images/6c2e941fdc56048c2fc58049fa4bec4963d2997f8510f.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/6c2e941fdc56048c2fc58049fa4bec4963d2997f8510f.png?mw=700" alt="202301_excel_27-0016--J-1.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 👆 じゃあ 変数 <code>j</code> を作ればいいや」</p> <p><a href="https://crieit.now.sh/upload_images/82af7bdc12bd9c36c10effeab11fb3f463d299c572cee.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/82af7bdc12bd9c36c10effeab11fb3f463d299c572cee.png?mw=700" alt="202301_excel_27-0018--ok.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 👆 これで チューリング・マシン は完成だぜ。<br /> 一般化してないのと、不具合が残っているのが 残っているかも知れないが……」</p> <p><a href="https://crieit.now.sh/upload_images/beaf94b260ae2602ca8cf7f5bbc769c261daf8686dbda.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/beaf94b260ae2602ca8cf7f5bbc769c261daf8686dbda.png?mw=700" alt="kifuwarabe-futsu.png" /></a><br /> 「 これは何に使うんだぜ?」</p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 👆 この例だと 長さ6のオレンジ色のテープを作るために使ったんだぜ。<br /> 説明しよう」</p> <p><a href="https://crieit.now.sh/upload_images/93785cda8bce3af90e6039ecb8d2546763d29c38ecc54.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/93785cda8bce3af90e6039ecb8d2546763d29c38ecc54.png?mw=700" alt="202301_excel_27-0028--stateTable.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 👆 この <code>StateTable</code> というのが プログラムの命令セットのようなものだぜ。<br /> この6行があると……」</p> <p><a href="https://crieit.now.sh/upload_images/5c1ac565c7d438d3dd496293174b018163d2abc2d36ba.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5c1ac565c7d438d3dd496293174b018163d2abc2d36ba.png?mw=700" alt="202301_excel_27-0134--A.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 👆 最初は <code>A</code> と書かれているが、<br /> <code>A</code> にあんまり意味は無くて 長さ1つの白いテープがそこにあると思えだぜ」</p> <p><a href="https://crieit.now.sh/upload_images/c3bb725a731a2ac9e1f66ccf4f5d211863d29ca67afc6.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/c3bb725a731a2ac9e1f66ccf4f5d211863d29ca67afc6.png?mw=700" alt="202301_excel_27-0030--tape.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 👆 上の図は テープを伸ばしている過程が描かれたもので、<br /> 最後の 13行目が 作られたテープだぜ」</p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 長さ6つのオレンジ色のテープ が作られて 動作が止まったわけだぜ」</p> <p><a href="https://crieit.now.sh/upload_images/beaf94b260ae2602ca8cf7f5bbc769c261daf8686dbda.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/beaf94b260ae2602ca8cf7f5bbc769c261daf8686dbda.png?mw=700" alt="kifuwarabe-futsu.png" /></a><br /> 「 長さ6つのオレンジ色のテープ なんか 作っても 嬉しくないしなあ」</p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 今回はサンプルで オレンジ色1色しかなかったが、<br /> それが 26色あって アルファベットの26文字に対応するとか、<br /> 最初から色の塗られたテープがあって チューリング・マシンが動いた後には 別の色のテープが残っているとか、<br /> それが 暗号を解読した答え だったりしたら 嬉しいだろ」</p> <p><a href="https://crieit.now.sh/upload_images/beaf94b260ae2602ca8cf7f5bbc769c261daf8686dbda.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/beaf94b260ae2602ca8cf7f5bbc769c261daf8686dbda.png?mw=700" alt="kifuwarabe-futsu.png" /></a><br /> 「 じゃあ <strong>今回の例題</strong> がシンプルすぎて チューリング・マシン が何たるか 嬉しさが 分からないんだ」</p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 <strong>プログラミング言語</strong> が誕生する前の プログラミング 方法だぜ」</p> <p><a href="https://crieit.now.sh/upload_images/beaf94b260ae2602ca8cf7f5bbc769c261daf8686dbda.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/beaf94b260ae2602ca8cf7f5bbc769c261daf8686dbda.png?mw=700" alt="kifuwarabe-futsu.png" /></a><br /> 「 私たちが使うのは プログラミング言語 なのだから、懐古好きでもなければ チューリング・マシン を覚えなくてもいいのでは?」</p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 一生のうちに 何回か <strong>チューリング・マシン</strong> とか <strong>チューリング完全</strong> の名前を聞くことはあるだろ。<br /> 記事を読んで知識として知ってるより 作って知ってる方が 話しに実感がこもるだろ」</p> <p><a href="https://crieit.now.sh/upload_images/beaf94b260ae2602ca8cf7f5bbc769c261daf8686dbda.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/beaf94b260ae2602ca8cf7f5bbc769c261daf8686dbda.png?mw=700" alt="kifuwarabe-futsu.png" /></a><br /> 「 実感 要らないから 実用的で 効率的な練習 無いのかなあ」</p> <p><a href="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d27ea8dcfad541918d9094b9aed83e7d61daf8532bbbe.png?mw=700" alt="ramen-tabero-futsu2.png" /></a><br /> 「 そんな実用的な Webサイト なら、他人が作るしな 」</p> <p><a href="https://crieit.now.sh/upload_images/96fb09724c3ce40ee0861a0fd1da563d61daf8a09d9bc.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/96fb09724c3ce40ee0861a0fd1da563d61daf8a09d9bc.png?mw=700" alt="ohkina-hiyoko-futsu2.png" /></a><br /> 「 プログラムも コンピューターも無い時代に ヒトが考えたプログラムを <strong>体験</strong> するぐらいね」</p> <p><a href="https://crieit.now.sh/upload_images/beaf94b260ae2602ca8cf7f5bbc769c261daf8686dbda.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/beaf94b260ae2602ca8cf7f5bbc769c261daf8686dbda.png?mw=700" alt="kifuwarabe-futsu.png" /></a><br /> 「 もっと面白い例題でやってほしい」</p> <p>参考: 📖 <a target="_blank" rel="nofollow noopener" href="https://github.com/muzudho/TuringMachineByExcelVBA">Git Hub / TuringMachineByExcelVBA</a></p> <p><おわり></p> むずでょ tag:crieit.net,2005:PublicArticle/17364 2021-06-05T13:22:14+09:00 2021-06-05T13:22:14+09:00 https://crieit.net/posts/excel-pichart-20210605 Excel で円グラフを作成する <p>Excel で円グラフを作る方法についてメモ。</p> <h2 id="手順"><a href="#%E6%89%8B%E9%A0%86">手順</a></h2> <p>以下のようにある値が降順でソートされたサンプルデータがあったとします(使い回し)。</p> <p><a href="https://crieit.now.sh/upload_images/dab3c436d3a863c4d9ba1cc63e56605260bafab2a1b33.jpg" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/dab3c436d3a863c4d9ba1cc63e56605260bafab2a1b33.jpg?mw=700" alt="ソート済みのサンプルデータ" /></a></p> <p>このデータから円グラフを作成します。まずはソートと同様にグラフに含めたいセルの範囲を選択します。</p> <p><a href="https://crieit.now.sh/upload_images/0c6931162c9b5f5d6915118654c8276e60bafab7a0676.jpg" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/0c6931162c9b5f5d6915118654c8276e60bafab7a0676.jpg?mw=700" alt="「挿入」タブ→「2-D 円」" /></a></p> <p>リボンの「挿入」タブから「2-D 円」を選択します。</p> <p><a href="https://crieit.now.sh/upload_images/b7b54e6b60dec344e4cd97057b11d7e860bafabb35f6b.jpg" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/b7b54e6b60dec344e4cd97057b11d7e860bafabb35f6b.jpg?mw=700" alt="グラフをクリックして見た目を調整" /></a></p> <p>グラフをクリックして「+」ボタンから「データラベル」に進み、「その他オプション」をクリック。</p> <p><a href="https://crieit.now.sh/upload_images/87347f935f5104b0306e6f73f033b3c360bafabecf1a9.jpg" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/87347f935f5104b0306e6f73f033b3c360bafabecf1a9.jpg?mw=700" alt="グラフの見た目を調整" /></a></p> <p>「ラベルオプション」で「分類名」「パーセンテージ」にチェックを入れて、「区切り文字」を「(改行)」にします。</p> <p>すると、円グラフに項目名とパーセンテージが出るようになるので、どれがどの項目でどのくらいの割合なのか一目で分かるようになるかと思います。</p> <p>また、「ラベルの位置」を「外部」にすることで文字とグラフの塗り潰し色のバッティングを回避します(なお、ラベルテキストの文字色を各項目ごとに変更することはできないようです。濃い色ならば文字色を白、淡い色ならば黒、としたかったのですが……)。</p> <p><a href="https://crieit.now.sh/upload_images/38a79b9895f663f983bf1ef9e514af8060bafac2b6f99.jpg" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/38a79b9895f663f983bf1ef9e514af8060bafac2b6f99.jpg?mw=700" alt="凡例を右へ" /></a></p> <p>「凡例」を右にします。この辺りは好みで。</p> <p><a href="https://crieit.now.sh/upload_images/4470d898201504c4691ab2b874e5b75360bafbd948726.jpg" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/4470d898201504c4691ab2b874e5b75360bafbd948726.jpg?mw=700" alt="塗り潰し色を変更" /></a></p> <p>円グラフ内のパイを選択して右クリック、「塗り潰し」で色を変更します。</p> <p><a href="https://crieit.now.sh/upload_images/39703bf27bf8d70625f359b75a98208060bafac7ad7de.jpg" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/39703bf27bf8d70625f359b75a98208060bafac7ad7de.jpg?mw=700" alt="完成" /></a></p> <p>ラベルの位置や吹き出し線を調整してそこそこ形になりました (色は適当)。</p> <h2 id="参考"><a href="#%E5%8F%82%E8%80%83">参考</a></h2> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://office-hack.com/excel/graph-piechart-percent/">エクセルの円グラフで割合(パーセント)を表示するには?|Office Hack</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://prau-pc.jp/excel/pie-chart-gather/">Excel(エクセル)の円グラフで、値が小さい内訳を「その他」にまとめる方法 | Prau(プラウ)Office学習所</a></li> </ul> arm-band tag:crieit.net,2005:PublicArticle/17363 2021-06-05T13:15:28+09:00 2021-06-05T13:15:28+09:00 https://crieit.net/posts/excel-sort-row-20210605 Excel で行方向の値をソートする <p>表題の通り、 Excel で行方向に並んだ値をソートする方法についてメモ。</p> <h2 id="経緯"><a href="#%E7%B5%8C%E7%B7%AF">経緯</a></h2> <p>例えば、以下のようなサンプルデータがあったとします。</p> <p><a href="https://crieit.now.sh/upload_images/4478a21fd89a40bdb45a6d5fc5a7d5bb60bafa16b1fb3.jpg" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/4478a21fd89a40bdb45a6d5fc5a7d5bb60bafa16b1fb3.jpg?mw=700" alt="サンプルデータ" /></a></p> <p>これを、「カウント」の降順にソートしたい。</p> <h2 id="手順"><a href="#%E6%89%8B%E9%A0%86">手順</a></h2> <p>まずソートしたい項目を範囲選択します(見出し項目と値の双方を含めて)。</p> <p><a href="https://crieit.now.sh/upload_images/0dcd078fc3cf3e69354ef848cab6655260bafa211de68.jpg" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/0dcd078fc3cf3e69354ef848cab6655260bafa211de68.jpg?mw=700" alt="「データ」タブ→「並び変え」!" /></a></p> <p>次に、リボンの中から「データ」タブをクリックし、「並び替え」をクリック。</p> <p><a href="https://crieit.now.sh/upload_images/daaf8b632217bb1454c5f2f0e7b6c63960bafa3739449.jpg" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/daaf8b632217bb1454c5f2f0e7b6c63960bafa3739449.jpg?mw=700" alt="オプションを指定" /></a></p> <p>「オプション」ボタンをクリックして詳細を表示させます。</p> <p><a href="https://crieit.now.sh/upload_images/22558d89ce3e633afd0e3000c1cf692460bafa40e348b.jpg" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/22558d89ce3e633afd0e3000c1cf692460bafa40e348b.jpg?mw=700" alt="「方向」を「列単位」に" /></a></p> <p>「方向」を「列単位」に変更します。</p> <p><a href="https://crieit.now.sh/upload_images/84781d1becd0bd99df609955a73b934b60bafa4988a60.jpg" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/84781d1becd0bd99df609955a73b934b60bafa4988a60.jpg?mw=700" alt="オプション指定" /></a></p> <p>「並べ替え」のダイアログの見出しが「列」から「行」に変わったので、「優先されるキー」を2行目、「順序」を「大きい順」にして「OK」。</p> <p><a href="https://crieit.now.sh/upload_images/555d9a89b7a067cc98b05484eb596adf60bafa530b441.jpg" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/555d9a89b7a067cc98b05484eb596adf60bafa530b441.jpg?mw=700" alt="ソート完了" /></a></p> <p>無事、降順でソートされました。</p> <h2 id="参考"><a href="#%E5%8F%82%E8%80%83">参考</a></h2> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://www.moug.net/tech/exopr/0040006.html">行方向に並べ替えを行う:Excel 一般|即効テクニック|Excel VBAを学ぶならmoug</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://office-hack.com/excel/sort/">エクセルで並び替え(ソート)をする方法(関数で並び替えも)|Office Hack</a></li> </ul> arm-band tag:crieit.net,2005:PublicArticle/16969 2021-04-21T23:09:49+09:00 2021-04-21T23:18:26+09:00 https://crieit.net/posts/DB-02 情報系資格対策兼DB復習の足跡🐈 🐾02 <p>``<br /> 初日から飛ばしてしまい、奇々怪々な投稿してしまったこと、お詫び申し上げます。</p> <p>さて、前回の続きです。今回はわりかし真面目にいきます😢</p> <hr /> <p><strong>v目次にゃv</strong></p> <ol> <li>スクレイピングでWEBからデータを抽出</li> <li>Excelでクエリ作成</li> <li>テーブル作成</li> </ol> <hr /> <p><strong>スクレイピングでWEBからデータを抽出だニャー(=✧ω✧=)</strong><br /> 今回は<a target="_blank" rel="nofollow noopener" href="https://www.ap-siken.com/kakomon/02_aki/">応用情報.com</a>さんのサイトから午前問題の答えを抽出しました。<br /> Pythonを用いてスクレイピングです。<br /> ライブラリをインポートしたら手早く作っちゃいますにゃんこ~🐱<br /> <a href="https://crieit.now.sh/upload_images/0bb758cb98240094b30817f9181bd7716080342f8f957.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/0bb758cb98240094b30817f9181bd7716080342f8f957.png?mw=700" alt="プログラム" /></a><br /> プログラムを組むと作業で楽でいいニャー•v-v•<br /> (下の”エウウウ”が抽出している回答です)</p> <hr /> <p><strong>Excelでクエリ作成</strong><br /> 1文ずつ手入力してしまうと、猫の手も借りたい現象が起きてしまうので、今回はExcelを活用します。<br /> 今回は既にExcelにて材料がテーブルとして用意してあるので、<strong>CONCATENATE関数</strong>を用いてSQL文と結合してクエリを作成するぎょぴよฅ^•ω•^ฅ<br /> <a href="https://crieit.now.sh/upload_images/84e69cb2d3e3bf65b1a8fc1c18180ca760802e8117ef0.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/84e69cb2d3e3bf65b1a8fc1c18180ca760802e8117ef0.png?mw=700" alt="クエリ作成" /></a><br /> 先程、抽出した回答をExcelテーブル”originalans”列にコピペ。<br /> その後、必要なSQL文の文字を空きセルに用意し結合するキツネ~🦊</p> <hr /> <p><strong>テーブル作成</strong><br /> 上の工程で出来たクエリをMySQLにコピペするにゃ~<br /> にゃっ!テーブルを1つ作成完了ねこ!!!<br /> <a href="https://crieit.now.sh/upload_images/bae0ea547af64d5113c540f1532e36b960802fd1747cf.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/bae0ea547af64d5113c540f1532e36b960802fd1747cf.png?mw=700" alt="SQL" /></a><br /> (スペルミス、命名規約、正規化不足、語訳、見づらさについては大目にみていただけると幸いです。)</p> <hr /> <p>今日はここまで🐾<br /> 今回使用したスクレイピング、DB等々、詳しく知りたいとご要望があれば、猫でもわかるように説明するかもです。</p> <p>これからも頑張るきんぎょー<br /> ``</p> keito_woood tag:crieit.net,2005:PublicArticle/16859 2021-04-18T17:11:54+09:00 2021-04-18T17:11:54+09:00 https://crieit.net/posts/wordpress-upload-failed-certain-excel-2-20210418 WordPress で一部の .xlsファイル だけがアップロードできない (解決) <p><a href="https://crieit.net/posts/wordpress-upload-failed-certain-excel-20210417">前回の続き</a>です。プラグインを作成しましたが、挙動が変わらなかったためさらに調査を続行しました。</p> <h2 id="結果"><a href="#%E7%B5%90%E6%9E%9C">結果</a></h2> <p>結果から記すと、プラグインを以下のように改修することで解決できました。</p> <pre><code class="php"><?php /* Plugin Name: MIMEuruwashii Description: PHP の MIME タイプ判定で特定の .xlsファイル が弾かれる現象への対策 Version: 0.0.3 Author: アルム=バンド */ /** * MIMEuruwashii : PHP の MIME タイプ判定で特定の .xlsファイル が弾かれる現象への対策 */ class MIMEuruwashii { /** * __construct : コンストラクタ * */ public function __construct() { add_filter( 'wp_check_filetype_and_ext', [ $this, 'Bibishii', ], 99, 3 ); } /** * Vivid : 追加する MIMEタイプ の定義 * * @return {Object} : 誤判定している MIME タイプを追記する * */ public static function Vivid(){ return [ [ 'xla|xls|xlt|xlw' => 'application/vnd.ms-office' ], [ 'xla|xls|xlt|xlw' => 'application/vnd.ms-excel' ], ]; } /** * Bibishii : フィルター追加 * * @param {Object} $check : MIMEタイプ の一覧のオブジェクト * @param {File} $file : チェック対象ファイル * @param {Object} $filename : チェック対象ファイルの名前 * * @return {Object} : 誤判定している MIME タイプを追記する * */ public function Bibishii ( $check, $file, $filename ) { if ( empty( $check['ext'] ) && empty( $check['type'] ) ) { foreach ( self::Vivid() as $mime ) { remove_filter( 'wp_check_filetype_and_ext', [ $this, 'Bibishii' ], 99 ); $mime_filter = function($mimes) use ($mime) { return array_merge($mimes, $mime); }; add_filter( 'upload_mimes', $mime_filter, 99 ); $check = wp_check_filetype_and_ext( $file, $filename, $mime ); remove_filter( 'upload_mimes', $mime_filter, 99 ); add_filter( 'wp_check_filetype_and_ext', [ $this, 'Bibishii' ], 99, 3 ); if ( ! empty( $check['ext'] ) || ! empty( $check['type'] ) ) { return $check; } } } return $check; } } // instantiate $ab_wp_plugin_mimeuruwashii = new MIMEuruwashii(); </code></pre> <p>元の原型ないですね。引っかけるアクションフックも <code>upload_mimes</code> から <code>wp_check_filetype_and_ext</code> に変わっています。</p> <h2 id="調査"><a href="#%E8%AA%BF%E6%9F%BB">調査</a></h2> <p>調査の過程を以下に記します。</p> <p>挙動が変わらなかった理由を <code>wp-includes/functions.php</code> を追いかけて調べて行きます。</p> <ul> <li>メソッド<code>wp_get_mime_types()</code> では拡張子と MIMEタイプ をそれぞれキー・値として持つ連想配列を返却しています</li> <li><code>wp_get_mime_types()</code> が呼ばれている場所を辿っていきます <ul> <li><code>get_allowed_mime_types()</code> はいくつかの処理( <code>.swf</code> や <code>.exe</code> の除外、ユーザ権限がない場合は <code>.html</code>, <code>.htm</code>, <code>.js</code> を除外)をした後に <code>upload_mimes</code> でチェックする拡張子と MIMEタイプ を登録</li> <li><code>do_enclose()</code> は動画関連のチェックのように見えます。しかし、ここで気になるコードを発見 <ul> <li>拡張子の方は <code>if ( preg_match( '!^(' . $exts . ')$!i', $extension ) )</code> で正規表現による判定を行っている (例えば <code>!^(xla|xls|xlt|xlw)$!i</code> のような形式)</li> <li>一方、 MIMEタイプ は <code>$type = $mime;</code> で代入しているだけ <ul> <li>しかも <code>break;</code> している</li> </ul></li> </ul></li> </ul></li> </ul> <p>上述のコードを見て、「ひょっとして複数の MIMEタイプ を想定していないのでは?」と思い至り、検索。</p> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://qiita.com/toiee_kame/items/68ba792239dd548f010c">WordPressでファイルアップロードができない(m4b、m4a、vtt、key) - Qiita</a> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://wordpress.stackexchange.com/questions/323750/how-to-assign-multiple-file-mime-types-to-extension/323757#323757">uploads - How to assign multiple file-mime-types to extension? - WordPress Development Stack Exchange</a></li> </ul></li> </ul> <p>やはり<strong>1つの拡張子に対して複数の MIMEタイプ を持つ場合に対応していない</strong> (今回のケースで言うと「 <code>.xls</code>ファイル は <code>application/vnd.ms-excel</code> または <code>application/vnd.ms-office</code> を受け付ける」としたい) ようです。</p> <p>前回のように MIMEタイプ を付け足す方法は、 <code>.ai</code> や <code>.psd</code> のような、デフォルトの連想配列に拡張子がキーとして存在しない MIMEタイプ ならば良いと思います。しかし、今回の <code>.xls</code> のように既存の拡張子の場合は最後に付け足したキーまで評価されていなさそうです。</p> <p>そこで、上述記事のように前回の <code>upload_mimes</code> 時に判定する MIMEタイプ を付け足すのではなく、そもそものチェック処理の <code>wp_check_filetype_and_ext</code> を変更する、という方針に転換しました。</p> <p>その結果が冒頭のプラグインのコードとなります。</p> <h2 id="雑感"><a href="#%E9%9B%91%E6%84%9F">雑感</a></h2> <p>複数の MIMEタイプ が想定されていない作りということを初めて知って驚きました。</p> <p>上述の Stackoverflow でも取り上げられていますが、 <code>.svg</code> や <code>.zip</code> 等他にも類似のケースが考えられるので意外でした。</p> <h2 id="参考"><a href="#%E5%8F%82%E8%80%83">参考</a></h2> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://qiita.com/toiee_kame/items/68ba792239dd548f010c">WordPressでファイルアップロードができない(m4b、m4a、vtt、key) - Qiita</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://wordpress.stackexchange.com/questions/323750/how-to-assign-multiple-file-mime-types-to-extension/323757#323757">uploads - How to assign multiple file-mime-types to extension? - WordPress Development Stack Exchange</a></li> </ul> arm-band tag:crieit.net,2005:PublicArticle/16854 2021-04-17T13:25:24+09:00 2021-04-17T13:25:24+09:00 https://crieit.net/posts/wordpress-upload-failed-certain-excel-20210417 WordPress で一部の .xlsファイル だけがアップロードできない (失敗) <p>WordPressサイト で一部の <code>.xls</code>ファイル だけがアップロードできない現象に遭遇したため、対処しました。</p> <h2 id="現象"><a href="#%E7%8F%BE%E8%B1%A1">現象</a></h2> <p>とある WordPressサイト で <code>.xls</code>ファイル をアップロードしようとすると以下のエラーが表示されました。</p> <blockquote> <p>“XXXXXXXXXXX.xls” のアップロードに失敗しました。</p> <p>このファイルタイプはセキュリティ上の理由から、許可されていません。</p> </blockquote> <p><a href="https://crieit.now.sh/upload_images/5764f085787c5d43f32c05e74f90c6d860782a40619c6.jpg" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5764f085787c5d43f32c05e74f90c6d860782a40619c6.jpg?mw=700" alt="「“XXXXXXXXXXX.xls” のアップロードに失敗しました。このファイルタイプはセキュリティ上の理由から、許可されていません。」のエラー" /></a></p> <p>しかも困ったことに、「Aの <code>.xls</code>ファイル はOKだが、Bの <code>.xls</code>ファイル はNG」というように、ファイルによって現象が分かれました。</p> <p>両方とも正常に開ける <code>.xls</code>ファイル ですし、見た目上は同じなのですが……。</p> <h2 id="対処1"><a href="#%E5%AF%BE%E5%87%A61">対処1</a></h2> <p>最初の対処として、 <code>wp-config.php</code> にファイルアップロードの際のフィルタリングをオフにする方法を試しました。</p> <pre><code class="php"><?php // 略 $table_prefix = 'wp_'; // 略 define('WP_DEBUG', false); define('ALLOW_UNFILTERED_UPLOADS', true); // この1行を追記 /* 編集が必要なのはここまでです ! WordPress でブログをお楽しみください。 */ // 略 </code></pre> <p>これでファイルアップロードを試したところ、2つの <code>.xls</code>ファイル 共にアップロードできるようになりました。</p> <p>ただし、この方法ですとファイルアップロードの際のフィルタ処理を全てオフにしてしまうため、セキュリティ的に好ましくありません。</p> <p>そこで、もう少し調査を続けることにしました。</p> <h2 id="検証"><a href="#%E6%A4%9C%E8%A8%BC">検証</a></h2> <p>上述の対処1より、ファイルアップロードの際のフィルタリング処理で引っかかっていることは分かりました。</p> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://deep-space.blue/web/555">【WordPress】アップロード可能なファイル拡張子を増やす | deep-space.blue</a></li> </ul> <p>このフィルタリングは、拡張子と MIMEタイプ の判定をしているということが分かりました。</p> <p>ファイルとしては、 <code>wp-includes/functions.php</code> です。</p> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://github.com/WordPress/WordPress/blob/master/wp-includes/functions.php">WordPress/functions.php at master · WordPress/WordPress · GitHub</a></li> </ul> <p>中身を見て、関数 <code>wp_get_mime_types()</code> で拡張子と MIMEタイプ の一覧を持っていることが分かります。</p> <p>この処理にアクションフックを引っかけることができれば良さそうです。</p> <h2 id="MIMEタイプ の確認"><a href="#MIME%E3%82%BF%E3%82%A4%E3%83%97+%E3%81%AE%E7%A2%BA%E8%AA%8D">MIMEタイプ の確認</a></h2> <p>次に、問題のファイルの MIMEタイプ を確認します。</p> <p>試しに、以下のような構成を作ります。</p> <pre><code> / ├ files/ │ ├ sample1.xls // ファイルアップロード OK の .xlsファイル │ └ sample2.xls // ファイルアップロード NG の .xlsファイル │ └ index.php </code></pre> <p>また、 <code>index.php</code> を</p> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://gray-code.com/php/get-kind-of-file/">ファイルの種類(MIMEタイプ)を確認する | GRAYCODE PHPプログラミング</a></li> </ul> <p>この記事を参考にして、以下のようにします。</p> <pre><code class="php"><?php $paths = [ './files/sample1.xls', './files/sample2.xls', ]; // finfoクラスを使う $finfo = new finfo(); foreach ($paths as $key => $value) { echo $value . ": "; echo $finfo->file( $value, FILEINFO_MIME_TYPE ); echo "<br><br>\n\n"; } </code></pre> <p>これを問題が発生している WordPressサイト と同じサーバにアップロードします。</p> <p><a href="https://crieit.now.sh/upload_images/9a54370caa79221d5ac33cdc67687e0360782a4e9f5f6.jpg" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/9a54370caa79221d5ac33cdc67687e0360782a4e9f5f6.jpg?mw=700" alt="ファイルアップロード NG のファイルの MIMEタイプ が「application/vnd.ms-office」になっている" /></a></p> <p>すると、ファイルアップロード OK の <code>.xls</code>ファイルは MIMEタイプが <code>application/vnd.ms-excel</code> だったのに対し、 NG だった <code>.xls</code>ファイル は <code>application/vnd.ms-office</code> でした。</p> <p><a href="https://crieit.now.sh/upload_images/afa3f25f2a05e601c81b01cff0ccdfbe60782a55ce747.jpg" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/afa3f25f2a05e601c81b01cff0ccdfbe60782a55ce747.jpg?mw=700" alt="他の環境でのテスト" /></a></p> <p>ちなみに、他の環境に同じファイル群をアップロードしたところ両方とも <code>application/vnd.ms-excel</code> で、この環境では今回の現象は発生しませんでした。</p> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://developer.mozilla.org/ja/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types">よくある MIME タイプ - HTTP | MDN</a></li> </ul> <p>MIMEタイプ は <code>.xls</code> の場合 <code>application/vnd.ms-excel</code> のはずですが……。</p> <blockquote> <p>先に結論から言ってしまえば、利用しているサーバーのPHPのバージョンが低く、PHPの中で呼び出される「Fileinfo」というファイル操作のモジュールのバージョンが低かった為、アップロードしたエクセルファイルの正しいMIMEタイプが認識がされていないという状態になっていました。</p> <p><a target="_blank" rel="nofollow noopener" href="https://cunelwork.co.jp/blog/web/wp%E3%81%AE%E3%83%A1%E3%83%87%E3%82%A3%E3%82%A2%E3%81%AB%E3%82%A2%E3%83%83%E3%83%97%E3%83%AD%E3%83%BC%E3%83%89%E3%81%8C%E5%87%BA%E6%9D%A5%E3%81%AA%E3%81%84/">WordPressのメディアにアップロードが出来ない時 | スタッフブログ | 株式会社クーネルワーク</a></p> </blockquote> <p>PHP のバージョンによって <code>Fileinfo</code>モジュール の判定結果が異なるとのこと。 WordPress の MIMEタイプ 判定もこのモジュールを得利用しているとのことで、ここで影響を受けてしまうようです。</p> <p>以上より、今回の環境では本来 <code>application/vnd.ms-excel</code> となるべき MIMEタイプ が、何故か <code>application/vnd.ms-office</code> と判定され、結果、 WordPress のファイルアップロードの際のフィルタリング処理の中の MIMEタイプ 判定で引っかかっていた、というのが今回の現象の原因でした。</p> <h2 id="対処2"><a href="#%E5%AF%BE%E5%87%A62">対処2</a></h2> <p>以上の検証を踏まえて対処をします。具体的には、アクションフックでファイルアップロードの際のフィルタリング処理の際に <code>application/vnd.ms-office</code> も許可するようなプラグインを作成します。</p> <pre><code class="php"><?php /* Plugin Name: MIMEUruwashii Description: PHP の MIME タイプ判定で特定の .xlsファイル が弾かれる現象への対策 Version: 0.0.1 Author: アルム=バンド */ /** * MIMEUruwashii : PHP の MIME タイプ判定で特定の .xlsファイル が弾かれる現象への対策 * */ class MIMEUruwashii { /** * __construct : コンストラクタ * */ public function __construct() { add_filter( 'upload_mimes', [ $this, 'Bibishii', ] ); } /** * Bibishii : フィルター追加 * * @param {Object} : MIMEタイプ の一覧のオブジェクト * * @return {Object} : 誤判定している MIME タイプを追記する * */ public function Bibishii ( $mimes ) { $mimes['xls'] = 'application/vnd.ms-office'; return $mimes; } } // instantiate $ab_wp_plugin_mimeuruwashii = new MIMEUruwashii(); </code></pre> <p>このプラグインを <code>.zip</code> でアップロード、インストールして有効化します。</p> <p>もちろん、 <code>wp-config.php</code> の <code>ALLOW_UNFILTERED_UPLOADS</code> の行は削除して試験しました。</p> <p>……が、挙動は変わらず、解決できませんでした。</p> <h2 id="参考"><a href="#%E5%8F%82%E8%80%83">参考</a></h2> <h3 id="ALLOW_UNFILTERED_UPLOADS"><a href="#ALLOW_UNFILTERED_UPLOADS">ALLOW_UNFILTERED_UPLOADS</a></h3> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://kinsta.com/jp/knowledgebase/sorry-this-file-type-is-not-permitted-for-security-reasons/">WordPressの「セキュリティ上の理由によりこのファイル形式は許可されません」エラーの処理方法</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://cunelwork.co.jp/blog/web/wp%E3%81%AE%E3%83%A1%E3%83%87%E3%82%A3%E3%82%A2%E3%81%AB%E3%82%A2%E3%83%83%E3%83%97%E3%83%AD%E3%83%BC%E3%83%89%E3%81%8C%E5%87%BA%E6%9D%A5%E3%81%AA%E3%81%84/">WordPressのメディアにアップロードが出来ない時 | スタッフブログ | 株式会社クーネルワーク</a></li> </ul> <h3 id="WordPress 内のファイルアップロードのフィルタ処理について"><a href="#WordPress+%E5%86%85%E3%81%AE%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%A2%E3%83%83%E3%83%97%E3%83%AD%E3%83%BC%E3%83%89%E3%81%AE%E3%83%95%E3%82%A3%E3%83%AB%E3%82%BF%E5%87%A6%E7%90%86%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6">WordPress 内のファイルアップロードのフィルタ処理について</a></h3> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://deep-space.blue/web/555">【WordPress】アップロード可能なファイル拡張子を増やす | deep-space.blue</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://github.com/WordPress/WordPress/blob/master/wp-includes/functions.php">WordPress/functions.php at master · WordPress/WordPress · GitHub</a></li> </ul> <h3 id="Fileinfoモジュール による MIMEタイプ 判定"><a href="#Fileinfo%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB+%E3%81%AB%E3%82%88%E3%82%8B+MIME%E3%82%BF%E3%82%A4%E3%83%97+%E5%88%A4%E5%AE%9A">Fileinfoモジュール による MIMEタイプ 判定</a></h3> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://gray-code.com/php/get-kind-of-file/">ファイルの種類(MIMEタイプ)を確認する | GRAYCODE PHPプログラミング</a></li> </ul> <h3 id="MIMEタイプ の一覧"><a href="#MIME%E3%82%BF%E3%82%A4%E3%83%97+%E3%81%AE%E4%B8%80%E8%A6%A7">MIMEタイプ の一覧</a></h3> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://developer.mozilla.org/ja/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types">よくある MIME タイプ - HTTP | MDN</a></li> </ul> arm-band tag:crieit.net,2005:PublicArticle/16815 2021-04-04T11:49:41+09:00 2021-04-04T11:51:18+09:00 https://crieit.net/posts/any-browser-regard-ie-from-excel-hyperlink-20210404 Excel 内のハイパーリンクを踏むと IE 扱いされる <p>Excel 内のハイパーリンクを踏むと、 Chrome で開いているのに IE 扱いされる現象に遭遇しました。</p> <h2 id="現象"><a href="#%E7%8F%BE%E8%B1%A1">現象</a></h2> <p>上述の通りですが、</p> <ol> <li>Excel の中でオレオレ証明書の <code>https</code> 始まりのハイパーリンクを設定する</li> <li>1.のハイパーリンクを開く</li> </ol> <p>とすると、 <code>.htaccess</code> でユーザエージェントで IE のみリダイレクトして専用ページを開く仕掛けが発動してしまいました。……実際ページを開いているブラウザは Chrome や Vivaldi なのに……。</p> <h2 id="検証"><a href="#%E6%A4%9C%E8%A8%BC">検証</a></h2> <p>この現象について少し調べてみました。</p> <p>試しに、以下のような アクセス元のユーザエージェント + HTTPメソッド を <code>log/test.log</code> というファイルに追記していく PHPコード を作成し、ここに 各Office製品 からハイパーリンク越しでアクセスしてみました。</p> <pre><code class="php"><?php $requestHeaders = apache_request_headers(); unset($requestHeaders['Cookie']); $requestHeaders['Method'] = $_SERVER['REQUEST_METHOD']; $str = ''; $log = ''; foreach ($requestHeaders as $key => $value) { $str .= $key . ': ' . $value . "\n"; } if(array_key_exists('User-Agent', $requestHeaders)) { $log .= 'User-Agent: ' . $requestHeaders['User-Agent']; } if(array_key_exists('Accept', $requestHeaders)) { $log .= ', Accept: ' . $requestHeaders['Accept']; } if(array_key_exists('Referer', $requestHeaders)) { $log .= ', Referer: ' . $requestHeaders['Referer']; } if(array_key_exists('Method', $requestHeaders)) { $log .= ', Method: ' . $requestHeaders['Method']; } $log .= ';'; $filepath = __DIR__ . '/log/test.log'; $current = ''; if(file_exists($filepath)) { $current = file_get_contents($filepath); $current .= "\n\n" . $log; } else { $current = $log; } file_put_contents($filepath, $current); ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> <div style="padding: 1rem; margin: 1rem;"> <textarea name="header" id="header" cols="100" rows="20"><?= $str; ?></textarea> </div> <div style="padding: 1rem; margin: 1rem;"> <textarea name="ua" id="ua" cols="100" rows="20"></textarea> </div> <script> const ua = navigator.userAgent.toLowerCase(); const ver = navigator.appVersion.toLowerCase(); const $ua = document.querySelector('#ua'); $ua.textContent = `UA: ${ua} VERSION: ${ver} `; </script> </body> </html> </code></pre> <h2 id="検証結果"><a href="#%E6%A4%9C%E8%A8%BC%E7%B5%90%E6%9E%9C">検証結果</a></h2> <h3 id="Excel 2016 (httpsリンク、オレオレ証明書)"><a href="#Excel+2016+%28https%E3%83%AA%E3%83%B3%E3%82%AF%E3%80%81%E3%82%AA%E3%83%AC%E3%82%AA%E3%83%AC%E8%A8%BC%E6%98%8E%E6%9B%B8%29">Excel 2016 (httpsリンク、オレオレ証明書)</a></h3> <pre><code>User-Agent: Microsoft Office Protocol Discovery, Method: OPTIONS; User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; ms-office), Accept: */*, Method: GET; User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.186 Safari/537.36, Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9, Method: GET; </code></pre> <p>最後のユーザエージェントは Chrome のものなので問題ないのですが、問題はその前。</p> <ol> <li><code>OPTIONS</code>メソッド で <code>Microsoft Office Protocol Discovery</code> なるユーザエージェントでリクエストが飛んでくる</li> <li><code>GET</code>メソッド で <code>MSIE</code> や <code>Trident</code> を含む (今回はこの2つで IE 判定をしていた) IE のようなユーザエージェントでリクエストが飛んでくる</li> <li>Chrome 本体のリクエスト</li> </ol> <p>という順番のようです。特に2番目。 IE そのものとはまた異なりますが、 IE と判定されそうな文字列を含むユーザエージェントです。これによりリダイレクト判定に引っかかり、リダイレクトした後の URL が Chrome に渡されるため、「 IE 扱いされた」挙動となったようです。</p> <p>……何故こんなことに……。</p> <p><a href="https://crieit.now.sh/upload_images/2ddbdb41a73d07e7cdbf430306128af9606929630af71.jpg" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/2ddbdb41a73d07e7cdbf430306128af9606929630af71.jpg?mw=700" alt="Excel からオレオレ証明書のhttpsリンクを開こうとすると表示されるポップアップ" /></a></p> <p><a href="https://crieit.now.sh/upload_images/ef043154d236673103a5708bfaabf4b46069297f3d388.jpg" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/ef043154d236673103a5708bfaabf4b46069297f3d388.jpg?mw=700" alt="Excel からオレオレ証明書のhttpsリンクを開こうとすると表示されるポップアップ" /></a></p> <p>ちなみに。</p> <h3 id="Excel 2016 (httpリンク)"><a href="#Excel+2016+%28http%E3%83%AA%E3%83%B3%E3%82%AF%29">Excel 2016 (httpリンク)</a></h3> <pre><code>User-Agent: Microsoft Office Excel 2014, Method: HEAD; User-Agent: Mozilla/4.0 (compatible; ms-office), Accept: */*, Method: GET; User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36, Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9, Method: GET; </code></pre> <p>こちらは <code>MSIE</code> や <code>Trident</code> といった文字列がユーザエージェントに出てこないため、 Chrome で正常に表示ができました。</p> <p>ちなみに、本来のブラウザのアクセス前に飛ぶリクエストも <code>OPTIONS</code>メソッド ではなく <code>HEAD</code>メソッド で飛んできています。</p> <h3 id="Word 2016 (https, http)"><a href="#Word+2016+%28https%2C+http%29">Word 2016 (https, http)</a></h3> <pre><code>User-Agent: Microsoft Office Word 2014, Method: HEAD; User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36, Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9, Method: GET; </code></pre> <p>Word 2016 については httpリンク の Excel と同様 <code>MSIE</code> や <code>Trident</code> といった文字列がユーザエージェントに出てきませんでした。</p> <p><a href="https://crieit.now.sh/upload_images/62a307641d00ee2d0bd131741d9f80246069298d61604.jpg" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/62a307641d00ee2d0bd131741d9f80246069298d61604.jpg?mw=700" alt="Word からオレオレ証明書のhttpsリンクを開こうとすると表示されるポップアップ" /></a></p> <p><a href="https://crieit.now.sh/upload_images/72f6ec11fbbe1df88892dadc414054546069299b2f723.jpg" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/72f6ec11fbbe1df88892dadc414054546069299b2f723.jpg?mw=700" alt="Word からオレオレ証明書のhttpsリンクを開こうとすると表示されるポップアップ" /></a></p> <h3 id="Excel 2013 (httpsリンク、オレオレ証明書)"><a href="#Excel+2013+%28https%E3%83%AA%E3%83%B3%E3%82%AF%E3%80%81%E3%82%AA%E3%83%AC%E3%82%AA%E3%83%AC%E8%A8%BC%E6%98%8E%E6%9B%B8%29">Excel 2013 (httpsリンク、オレオレ証明書)</a></h3> <pre><code>User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; Tablet PC 2.0; ms-office), Accept: */*, Method: GET; User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.116 Safari/537.36, Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9, Method: GET; </code></pre> <p>Excel 2013 だと <code>OPTIONS</code>メソッド が見当たりません。ただ、 <code>MSIE</code> や <code>Trident</code> が含まれているのは確認できます。</p> <h3 id="Excel 2013 (httpリンク)"><a href="#Excel+2013+%28http%E3%83%AA%E3%83%B3%E3%82%AF%29">Excel 2013 (httpリンク)</a></h3> <pre><code>User-Agent: Microsoft Office Excel 2013 (15.0.5319) Windows NT 10.0, Method: HEAD; User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.116 Safari/537.36, Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9, Method: GET; </code></pre> <p>こちらは 2016 と変わらなそうです。</p> <h3 id="Word 2013 (httpsリンク、オレオレ証明書)"><a href="#Word+2013+%28https%E3%83%AA%E3%83%B3%E3%82%AF%E3%80%81%E3%82%AA%E3%83%AC%E3%82%AA%E3%83%AC%E8%A8%BC%E6%98%8E%E6%9B%B8%29">Word 2013 (httpsリンク、オレオレ証明書)</a></h3> <pre><code>User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; Tablet PC 2.0; ms-office), Accept: */*, Method: GET; User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.116 Safari/537.36, Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9, Method: GET; </code></pre> <p>Word 2013 はなんと Excel 2013 と同じ結果に。これだと <code>MSIE</code> や <code>Trident</code> が含まれています。</p> <h3 id="Excel 2013 (httpリンク)"><a href="#Excel+2013+%28http%E3%83%AA%E3%83%B3%E3%82%AF%29">Excel 2013 (httpリンク)</a></h3> <pre><code>User-Agent: Microsoft Office Word 2013 (15.0.5319) Windows NT 10.0, Method: HEAD; User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; Tablet PC 2.0; ms-office), Accept: */*, Method: GET; User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.116 Safari/537.36, Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9, Method: GET; </code></pre> <p>さらに Word 2013 で httpリンク の場合、 <code>HEAD</code>メソッドが飛ぶのは Excel2013 と同様ですが、その後に <code>MSIE</code> や <code>Trident</code> を含む <code>GET</code>リクエストが飛んでいます。</p> <p>これだとユーザーエージェント判定で引っかかることになりますね……。</p> <hr /> <p>手元の環境では、同じ Office製品 でもバージョンで挙動が異なるというかなり困った結果が得られてしまいました……。</p> <p>Office製品 からのハイパーリンクを気にすることはほとんどないとは思うのですが、このような事象もあるということでメモしておきます。</p> <h2 id="参考"><a href="#%E5%8F%82%E8%80%83">参考</a></h2> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://answers.microsoft.com/ja-jp/msoffice/forum/all/%E3%82%A8%E3%82%AF%E3%82%BB%E3%83%AB%E3%82%B7/b20bda72-1187-420c-bb43-e8206c2eb80a">エクセルシートのリンクを使ってアクセスした場合に、保証の切れたインターネットエクスプローラーと認識され、アクセス - マイクロソフト コミュニティ</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://www.ka-net.org/blog/?p=3699">[Office用アプリ]User Agent他を調べてみました。 | 初心者備忘録</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://www.ka-net.org/blog/?p=4222">ExcelのWebクエリからのアクセス情報 | 初心者備忘録</a></li> </ul> arm-band tag:crieit.net,2005:PublicArticle/16397 2020-12-20T18:34:18+09:00 2020-12-20T18:34:18+09:00 https://crieit.net/posts/29d787280cd024b2a9aadb09721b0005 【シリアル値】エクセルファイルで、日付の項目に謎の数値が入っていて困惑した時 <h2 id="日付の項目が数値になってる"><a href="#%E6%97%A5%E4%BB%98%E3%81%AE%E9%A0%85%E7%9B%AE%E3%81%8C%E6%95%B0%E5%80%A4%E3%81%AB%E3%81%AA%E3%81%A3%E3%81%A6%E3%82%8B">日付の項目が数値になってる</a></h2> <p><a href="https://crieit.now.sh/upload_images/8ada1a91858eac436fbd4379a2f2d7ca5fdf1473d8dee.jpg" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/8ada1a91858eac436fbd4379a2f2d7ca5fdf1473d8dee.jpg?mw=700" alt="image" /></a></p> <p>なにこれ???</p> <h2 id="シリアル値っていうらしいよ"><a href="#%E3%82%B7%E3%83%AA%E3%82%A2%E3%83%AB%E5%80%A4%E3%81%A3%E3%81%A6%E3%81%84%E3%81%86%E3%82%89%E3%81%97%E3%81%84%E3%82%88">シリアル値っていうらしいよ</a></h2> <p>1900年1月1日を「1」として、そこからの経過日数を数値化したものをシリアル値というらしい。<br /> <a href="https://crieit.now.sh/upload_images/1df330be3cccd5e514b821a3ca5071be5fdf18bf0253f.jpg" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/1df330be3cccd5e514b821a3ca5071be5fdf18bf0253f.jpg?mw=700" alt="image" /></a></p> <h2 id="phpで日付型に変換"><a href="#php%E3%81%A7%E6%97%A5%E4%BB%98%E5%9E%8B%E3%81%AB%E5%A4%89%E6%8F%9B">phpで日付型に変換</a></h2> <p>エクセルをインポートしてDBに登録する際には日付で登録したいので、<br /> シリアル値から日付型に変換する。</p> <pre><code class="php">$date = date('Y年m月d日', ($serial - 25569) * 60 * 60 * 24); </code></pre> <p>参考:<a target="_blank" rel="nofollow noopener" href="https://qiita.com/shy_azusa/items/c78bb79c3dc6ac0585bd">https://qiita.com/shy_azusa/items/c78bb79c3dc6ac0585bd</a></p> みみみみみ