[ 今日の出来事 ]
今日も今日とて、VBAとにらめっこ。
今週はExcelのVBAで、リストデータの整形・加工を自動化する事に注力してます。
人が手で作ってくるリスト、約40点をもらってきて、システムにインポートできる形に加工します。
これは厄介な問題が次々と襲ってきてくれるので、しんどいですが非常に良い課題です。
今回のリストだけで、以下のようなケースが発見されました。
1. リスト上で、数レコードが列ズレしている
2. 電話番号になぜか変な文字・記号が入っている
半角括弧の片方だけが入っている
ピリオドが入っている
3. 住所が都道府県から入っていない
4. 電話番号の前後にスペースが入っている
5. 電話番号が全角で入力されている
6. Excelのセル内改行が含まれている
7. 途中に空白行が入っている
■リスト上で、数レコードが列ズレしている
■電話番号になぜか変な文字・記号が入っている
半角括弧の片方だけが入っている
ピリオドが入っている
■住所が都道府県から入っていない
これらは元データで何とかしてもらうため、元データを作る人用に別の確認ツールを作って渡しました。
それでも、こちら側で同じツールを使ってチェックする必要があるのはもちろんです。
(実際は、今回作成するツールに同じ機能を埋め込みました。)
■電話番号の前後にスペースが入っている
■電話番号が全角で入力されている
■Excelのセル内改行が含まれている
これらは、今回作るツールで加工する際、対象範囲を選択した時に、For Eachを使って処理します。
For Eachは、選択範囲内のセルに順繰りに同じ処理をかけてくれます。
電話番号の空白除去、セル内改行の除去、全角から半角への変換処理にはちょうど良かったです。
今回初めて使ったけど、For Each文は便利ですね
これからも随分ご厄介になりそうです。
■途中に空白行が入っている
これは定番、For Next文で処理。
先人の知恵を借りて、最下行から上に向かって処理していきます。
なんで最下段からかというと、空白行にあたって削除処理をした際、下の行を上に詰めるので行数がズレてしまうからです。
変数を補正して処理を続けるやり方もありますが、下から処理する方がシンプルです。
先人の知恵は、ほんとにありがたいものです。
*For Nextで上に向かって処理する場合は、Step - 1とすればできます。
賢いね~。
まあ、今日組んだものも、半年後に見たらおっそろしく効率のよくないものになってるんだろうけど、業務に使う以上一定の期間内に要件を満たすものは作成しないとね。
実際の現場では、何行って決まった処理が少ないからDo Whileとかの方が使えるよね、と思っていましたが、今週になって、それが安易な考えであった事がよく分かりました。
For Next、For Eachをもっと使いこなして、常に適切な処理文がかけるように、鍛えていきます。
それにしても、本当に鍛えてくれる課題です。
明日には一定の回答を出さないと、なので頑張ります。
VBAは楽しいですね。
[Jose's FANTASY SPORTS SITE]
Jose's FANTASY SPORTS!
[他チームのBLOG]
[ Swamp Dogs ] [Start me up(GABBA GABBA HEY) ]
[ Tyabo-s ] [ Bonz ] [ Keseran Paseran ] [ Dragon Horse(5to81) ]
[ Wolverines ] [ Thunder Roads ] [ アイマスク21(57) ]
今日も今日とて、VBAとにらめっこ。
今週はExcelのVBAで、リストデータの整形・加工を自動化する事に注力してます。
人が手で作ってくるリスト、約40点をもらってきて、システムにインポートできる形に加工します。
これは厄介な問題が次々と襲ってきてくれるので、しんどいですが非常に良い課題です。
今回のリストだけで、以下のようなケースが発見されました。
1. リスト上で、数レコードが列ズレしている
2. 電話番号になぜか変な文字・記号が入っている
半角括弧の片方だけが入っている
ピリオドが入っている
3. 住所が都道府県から入っていない
4. 電話番号の前後にスペースが入っている
5. 電話番号が全角で入力されている
6. Excelのセル内改行が含まれている
7. 途中に空白行が入っている
■リスト上で、数レコードが列ズレしている
■電話番号になぜか変な文字・記号が入っている
半角括弧の片方だけが入っている
ピリオドが入っている
■住所が都道府県から入っていない
これらは元データで何とかしてもらうため、元データを作る人用に別の確認ツールを作って渡しました。
それでも、こちら側で同じツールを使ってチェックする必要があるのはもちろんです。
(実際は、今回作成するツールに同じ機能を埋め込みました。)
■電話番号の前後にスペースが入っている
■電話番号が全角で入力されている
■Excelのセル内改行が含まれている
これらは、今回作るツールで加工する際、対象範囲を選択した時に、For Eachを使って処理します。
For Eachは、選択範囲内のセルに順繰りに同じ処理をかけてくれます。
電話番号の空白除去、セル内改行の除去、全角から半角への変換処理にはちょうど良かったです。
今回初めて使ったけど、For Each文は便利ですね
これからも随分ご厄介になりそうです。
■途中に空白行が入っている
これは定番、For Next文で処理。
先人の知恵を借りて、最下行から上に向かって処理していきます。
なんで最下段からかというと、空白行にあたって削除処理をした際、下の行を上に詰めるので行数がズレてしまうからです。
変数を補正して処理を続けるやり方もありますが、下から処理する方がシンプルです。
先人の知恵は、ほんとにありがたいものです。
*For Nextで上に向かって処理する場合は、Step - 1とすればできます。
賢いね~。
まあ、今日組んだものも、半年後に見たらおっそろしく効率のよくないものになってるんだろうけど、業務に使う以上一定の期間内に要件を満たすものは作成しないとね。
実際の現場では、何行って決まった処理が少ないからDo Whileとかの方が使えるよね、と思っていましたが、今週になって、それが安易な考えであった事がよく分かりました。
For Next、For Eachをもっと使いこなして、常に適切な処理文がかけるように、鍛えていきます。
それにしても、本当に鍛えてくれる課題です。
明日には一定の回答を出さないと、なので頑張ります。
VBAは楽しいですね。
[Jose's FANTASY SPORTS SITE]
Jose's FANTASY SPORTS!
[他チームのBLOG]
[ Swamp Dogs ] [Start me up(GABBA GABBA HEY) ]
[ Tyabo-s ] [ Bonz ] [ Keseran Paseran ] [ Dragon Horse(5to81) ]
[ Wolverines ] [ Thunder Roads ] [ アイマスク21(57) ]