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

プログラミング

僕は仕事でプログラムを組んでいます。

現場に入って仕事をするので現場によって言語が変わりますが経験が一番長い言語がVBAです。(ベースはVB6.0でVB.netとは結構違います)

そんなVBAで「あれどうやるんだっけかな?」となった時はネットで検索して「エクセルの神髄」さんのサイトにお世話になる事も多いです。

そんな「エクセルの神髄」さんのサイトにてツイッター連動企画で100本ノックを行っています。

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

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

x.com

遅らばせながら僕も参加しようと思います。(目的は以下が強めだったりする)

動機は不純ですが力になれば良い事は変わりないので早速始めてみます。

1本目:セルのコピー

記念すべき1本目はセルのコピーです。

最初は難易度低めの出題のようなのでサクッと完成。

各出題について解説が掲載されています。

その中に「Copy」のパラメータを省略するとクリップボードを使ってしまう事を知ってハマりました。

今後Copyを使う場合にはそのままコピー先をパラメータに与えるようにしよう。

2本目:セルのコピー

2本目もセルのコピーですが計算式は値に変え、書式はそのままという要件になっています。

ツイッター上でも書いたのですが貼り付け方法の「値」と「書式」を同時にする方法を考えて少しハマりました。

最終的には別々に2回貼り付けする事で実現できる事が分かったので書式をコピーしてから値をコピーして完成しました。

解説のページで学んだ事はパラメータ無しのCopyをした場合、コピーの点線がずっと残ってしまうため「Application.CutCopyMode = False」で解除した方が親切。

3本目:セルの消去

3本目はセルの消去です。

テンプレート以外のデータ部分だけを消去する課題です。

データの範囲を取得する必要があると判断したため、最終行を取得してデータ範囲を特定する方法で実装しました。

ただ、解説には最終行を求めるなんて事せずに「CurrentRegion」を用いてたったの1行で対応していました。

まだまだ知らないメソッドが多いのでこの機会に覚えていこうと思います。

4本目:セルの消去

タイトルが3本目と同じですが今回は最終行と最終列もテンプレートになっています。

僕は3本目と同様、データ範囲を特定して消去しました。

解説を見ると3本目の結果に対して「SpecialCells」を使って定数のセルを特定していました。

「SpecialCells」は使った事がありましたがこういう指定もできるんだなと勉強になりました。

5本目:セルの計算

セルを使った計算を行う課題です。

金額へは計算結果を出力するようにコードを組みました。

さらに書式の指定がされていたので計算結果を出力する前に書式を設定するように実装しました。

解説を見てみると「End(xlUp)を使う場合、非表示行が無いことが前提」とあるように非表示行が存在すると最終行が取得できなくなってしまいます。

それと「エクセルのシートの列は同一書式で使う事が基本です。」と書かれている通り、たしかに書式の設定は列全体で行うべきかと思いました。

6本目:セルに計算式

5本目は計算結果でしたが6本目は計算式です。

計算式を組むのにいくつか工程が必要だったので関数化して呼び出す事にしました。

解説を見ると「R1C1形式」を使っていました。

僕はここら辺をあまり理解できていないので直近の課題になりそうです。

まとめ

とりあえずは6本目までやってきました。

偏った知識でガチガチに固まった頭で考えていたなぁと思いました。

このまま続けられるところまで続けていき、知識を広げて今後につなげていきたいと思います。

その2へ続く

コメント

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