Sub split_todofuken()
Dim hida
Dim migi
Dim moto
Dim kugiri
For migi = 2 To 25
moto = Range("D" & migi).Value
For hida = 2 To 5
If InStr(moto, Range("A" & hida).Value) > 0 Then
kugiri = InStr(moto, Range("A" & hida).Value)
Exit For
End If
Next
Range("E" & migi).Value = Left(moto, kugiri)
Range("F" & migi).Value = Mid(moto, kugiri + 1)
Next
End Sub
ゲストさんの投稿
(投稿ID: 4969)
お世話になっております。こちらの動画の後半で解説されていた路線駅名の処理について質問がございます。私はこのようにプログラムを書いて処理し、設問で指示された回答は出せたので問題ないと思うのですが、小川さんがこの方法を動画で取り上げなかった理由を教えてもらえないでしょうか?
過去のコメントでは、「「手順書としてどうか?」という問いですね。」という回答が小川さんから出されてました。他の人がプログラムをメンテナンスする時に分かりにくいから、という理解でよろしいでしょうか。ご回答宜しくお願い致します。
ゲストさんのコメント
(コメントID: 7025)
If と End ifのインデントがずれてしまいましたが、実際の作業ではインデントは揃えて作業していますのでご了承ください
小川 慶一さんのコメント
(コメントID: 7026)
おはようございます。
> 小川さんがこの方法を動画で取り上げなかった理由を
「取り上げなかった理由」というより、Instr関数が検出可能なのは、長さ1文字の文字列だけでない(「モノレール」のような長さ5文字のものでも検出可能)ということはどこかのタイミングでお伝えしたかったので、ここでは、「モノレール」という文字列を検索対象にしてみました。
結果的に正しく動作したなら問題ないとも言えます。
> 過去のコメントでは、「「手順書としてどうか?」という問いですね。」という回答が小川さんから出されてました。
これはまた別の文脈の話です。
このやりとりはここで終わってしまったのでこれ以上書きませんでしたが、たとえば、別の表に、区切り文字候補リストを用意しておき、「そのいずれかと一致したら○○」といった処理のパターンもあります。
本課題と、あと、すでに紹介した「複数の表でマッチングする」というパターンの組み合わせ例です。
試しに、以下の課題を用意してみました。
セルD2:D25には、「北海道旭川市」、「京都府亀岡市」、「東京都稲城市」、「群馬県前橋市」等、「都道府県+それ以下」という文字列が入っています。そして、これらを、「都道府県」と「それ以下」に分割したいとします。
やり方のひとつとして、セルA2:A5には、それぞれ、「都」、「道」、「府」、「県」という長さ1文字の文字列を入れておき、以下のようなプログラムを実行することが考えられます。
https://www.dropbox.com/s/phobxg34dza2ls3/todofuken_bunkatsu.xlsm?dl=0
このように、区切り文字候補を入力しておき(あるいは、利用者に自ら入力させ)、その区切り文字をプログラムが見つけて処理をするというパターンはよくあります。
では、そのようなパターンでこのページで紹介した課題のような仕事をするときに、
・線
・ル
と入力させるというルールにするか、
・線
・モノレール
と入力させるというルールにするか、どちらのほうが望ましいかだろうかという議論です。
「どちらのほうが正解」とは一概に言い切れません。
ゲストさんのコメント
(コメントID: 7030)
コメントの返信ありがとうございます。いただいた課題を解いてみました。今の実力ではコードの意味を理解して転記し、動作確認するのが精いっぱいだったので、過去動画をやり直して考えずとも手が動くレベルにまで上げていきます。