ExcelVBAマクロ 「エクセルの神髄」100本ノック参加します(その3)

プログラミング

神髄さんからの挑戦状、100本ノックの続きです。

前回は12本目までやりました。

エクセルの神髄」さんのツイッター連動企画100本ノックです。

VBA100本ノック:マクロVBAの特訓|エクセルの神髄
VBAを習得するには実戦あるのみ。書籍を読んだり、WEBページを見ているだけでは自分のものになりません。知識だけでは実戦で使いこなせません。実際に書いて動かす。VBA100本ノックを通して自分のものにしてください。

ツイッターでのタグ検索結果はこちら

https://twitter.com/search?q=%23VBA100%E6%9C%AC%E3%83%8E%E3%83%83%E3%82%AF&src=typed_query

それでは早速13本目からいってみよう!!

13本目:文字列の部分フォント

13本目は文字列の部分フォントを変更する課題です。

選択中を対象とするため、セル以外を選択中の場合は処理を終了させるように選択要素をRange型へ格納し、エラー発生時にはセル以外を選択していると判断する実装にしました。

「注意」の検索はDoループとInStr関数を使いました。

フォントの変更はRange型のCharacters関数にて文字列の部分フォントを操作できます。

14本目:社外秘シート削除

14本目はシートを特定して削除する課題です。

特定するシートは「社外秘」を含むシートなのでブック全体で「社外秘」を含むセルをFind関数を使って検索しました。

普段業務ではFind関数を使わないのでちょっと躓いてしまいました。

15本目:シートの並べ替え

15本目はシートを並び替える課題です。

大まかな流れは日付文字列を日付のシリアル値に変更して大小比較によるソートを行えう方向で実装しました。

ソートの仕方はわからなかったのでいろいろなところを参考にしながら組み立てました。

ソートのアルゴリズムはかなり確立されているので少し勉強した方がよさそうだなと感じました。

16本目:無駄な改行を削除

16本目はセル内文字列の無駄な改行を削除する課題です。

余分な改行だけ削除して必要な改行は残す必要があるため、改行で文字列を分割(Sprit関数)して空白以外は後ろに改行を付けて文字列を再構築する方法で実装しました。

そのままでは文字列の最後に無駄な改行が残ってしまうのでLeft関数を使って改行を削除しています。

ここら辺は結構似た要望を業務で依頼されるので何も問題なくできました。

17本目:重複削除(ユニーク化)

17本目は重複している情報をユニークにする課題です。

データをユニークにする依頼も多いのでここら辺もすぐに対応できました。

ユニークにすべき対象は課コードだったので課コードに注目して既存判定を行い存在していればスキップ、存在しなければ追加してデータをユニークにしています。

並び替えは面倒だったのでExcelに任せました。

18本目:名前定義の削除

18本目は名前定義の削除を行う課題です。

Excelの機能として名前の定義を使う事はよくあるのですがVBAマクロとしてこれを制御した事は今までになかったので調べながら進めました。

名前の定義はName型のようで個人的には型名だと分かり難く(ぱっと見プリミティブ型に思える)もっと型名を変えることはできなかったのかな?と思ってしまいました。(あくまで個人的な感想です)

まとめ

VBA100本ノック、その3として13本目~18本目までやってきました。

使った事ない関数も出てきて勉強になりました。

今回の中ではソートを深堀して勉強したいかなと思いました。(VBAマクロとは関係ないアルゴリズムの事ですが)

コメント

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