カテゴリー別アーカイブ: エクセルマクロ/VBA

とてつもなく大きい表を扱いやすくする~動く条件付き書式~

【カオスな現場経験 x 分析力を組み合わせた、少し尖ったマクロのレシピ集】

とてつもなく大きい表を使っているときに迷子になることがありませんか?

「今、どの行どの列セルを扱っているんだろう・・・」

しまいには、ミスが怖いので表を印刷して「定規」を当てたりしたことはありませんか?

今回、この迷子対策として参考にしたのがこの記事です

参考記事

今回は迷子対策として、上の記事を基にした「動く条件付き書式」の事例を紹介します

この動く条件付き書式では、カーソルを置いた位置の行列の色が変わるので、「迷子対策」にはバッチリです!

紹介する事例は2つあります!

1つ目の事例は、CELL関数とROW関数、そしてCOLUMN関数を使用して条件付き書式を設定します

こちらは、手動で条件付き書式を設定する内容になっています

 *イベントプロシージャ―に1行コードを書く必要があります

この方法の場合には、重たいファイルの場合だと「条件付き書式」の動きがかなり重たくなります 

 2つ目の内容は、イベントプロシージャ―を使用して、カーソルが動く都度「条件付き書式」をマクロで自動設定します

 こちらは条件付き書式の範囲をで指定するわけではなく、「行列」双方向の2本の線で範囲を設定しますので、あまり動きを重くしないですみます

 後、2つ目の方法の場合には色をシート上で設定できるようにするなどの、実践的に使えるようにする為の工夫を複数行っています

こちらは、サンプルファイルをダウンロードして、実際の動きを確認できます!!

①条件付き書式を全て手動で設定

まずは、条件付き書式を設定する範囲を手動で指定します

その後、条件付き書式の設定画面を開き、ルールの種類の選択を「数式を使用して、書式設定する設定を決定」にします

「次の数式を満たす場合に値を書式設定」には、画像のような数式を設定します

数式:=OR(CELL(“ROW”)=ROW(),CELL(“COL”)=COLUMN())

*上の数式をそのままコピーする際には、が半角になっていることをご確認ください

これで条件付き書式の設定は終了です

実はもう一つ、仕掛けが必要です

イベントプロシージャ―を使用し、セルの選択が変更になった場合に「更新処理」を行う必要があります

 更新処理を設定するには、まずは、上の画像のように該当のシートで右クリックをして「コード表示」を選択します

 次に開いたVBE(Visual Basic Editor)画面では、下の画像の黄色の印の箇所がそれぞれ「Worksheet」「SelectionCange」になっていることを確認します

プロシージャ―には1行だけコード*を入れれば、条件付き書式の更新処理が設定されます

 *Application.ScreenUpdating = True

②都度、条件付き書式の範囲をマクロで設定

動く条件付き書式

こちらは、前述のようにこの「動く条件付き書式」を実践的に使えるように様々な工夫を行っています

各種設定シートというシートを設けてあり、様々な設定が行えます

工夫一覧

1.シート上での色設定

各種設定シートにて、色を指定すれば、条件付き書式で設定する色を変更できます

2.開始行や開始列の設定

条件付き書式の設定を行う開始行と開始列はシート上で調整できます

上の画像では開始行が6行目、開始列が1列目ですので下の画像のように色が変わります

3.停止・再開処理他

この動く条件付き書式は「停止」したい時があると思います

この際は、停止ボタンを押せば停止ができる仕掛けになっています

停止処理を行った場合には、停止前に設定された色が残ってしまっています

ですので、上の画像の消去ボタンを押せば「設定残り」の色は消去できます

コード上の工夫

こちらは、ごく簡単なポイントだけを解説させて頂きます

この事例は、前述のように条件付き書式の範囲が拡大したり縮小する場合も想定しつつ、処理が重たくならないようにします

こちらの場合は、色の付け方が、1番目の方法と変えてあります

カーソルがある位置が、色のつく範囲の最終行と最終列になります(1番目の方法も可能ではありますが、今回は極力色設定する範囲を小さくするという趣旨でこの方法にしました)

ポイント1 ⇒面ではなく、行方向1行、列方向1列で範囲設定

カーソルを移動させた際は、イベントプロシージャ―にてカーソル位置を取得します(Targetを引数にして取得)

カーソル位置を取得したら、2つ範囲を設定します

1つ目は行方向です。範囲の開始列は1列目などを固定で指定して範囲設定します

2つ目は列方向です。範囲の開始行は1行目などを固定で指定して範囲設定します

ポイント2 ⇒設定済みの条件付き書式は事前にクリアしておく

重複して条件付き書式が設定されないように、設定済みの条件付き書式はクリアしておきます

ポイント3 ⇒マクロ処理の途中でイベントプロシージャ―は止めておきます

1つの範囲に条件付き書式を設定した際に、更にイベントが起動してしまいますので、次の1行のコードでイベントを中止しておきます(後で再開が必要です)

Application.EnableEvents = False

<まとめ>

 今回はとてつもなく大きい表を扱う際、迷子にならないようにカーソルがある行と列の色を変える方法を紹介しました

但し、

特に2番目の方法などが当てはまるのですが、実際に業務で活用する場合は、さらに一工夫が必要です

 例えば、2番目の方法は設定済みの条件付き書式をクリアしてしまいますので、「迷子対策」以外の条件付き書式の設定が消えてしまうケースも想定されます

ですので、別途「迷子対策以外」の条件付き書式も自動設定する必要があります

 ちなみに、2番目の事例のサンプルファイルですが、こちらは複数のシートで「動く条件付き書式」を試せるようになっています

ぜひ、各種設定シートで「シート名」を変えながら試してみてください!

アイコン

動く条件付き書式 211.93 KB 4 downloads

...

なお、コードについては非公開とさせて頂いていますので、予めご了承ください 

それでは、最後まで長文にお付き合い頂きありがとうございました!

 今回紹介した仕組みは、実務では更に工夫の余地があると思いますが、エクセルVBAならではの便利さが生み出せると思います!

少しでも、大きい表を扱う際の「イライラ」を消すことに貢献できたら幸いです

もし、質問や要望等がありましたら「お問合せ」からご連絡をお願い致します


にほんブログ村


にほんブログ村

ゲームではじめるマクロ/VBA_セル変更

今回は3番目の迷路に取り組みます。今回のテーマは「セル変更」です

セル変更と聞くと、何をイメージしますか?

 セルの中の値でしょうか?こちらが一般的ですね。でもフォントの大きさや色などの変更もセル変更には違いないですよね

 VBAコードを書く際、セルが操作対象の場合にはセルの「何」を「どのように変えるか」を明確に指定する必要があります

 今回はセルという操作対象の値を変えたり、フォントのサイズを変えたりするVBAコードに触れて、VBAコードの作法に慣れていきましょう!

アイコン

めいろ3 182.86 KB 1 downloads

...

めいろ3を動かしてみる

今回、オバケをつかまえるのに書くコードはわずか2コードだけです!

右に行くか、下に行くかそれだけです

オバケをつかまえるまで、このコードをひたすら繰り返します

では、何を基準にして「オバケをつかまえた」とするのでしょうか?

それはカーソルの位置でしょうか?こちらはぜひ、事前に想像してみておいてください

ペンギンのサイズ

1回目の時に「.」は「~の」という風に解釈してみてくださいという記事を書きました

今回はこの点を深堀しつつ、「=」を使って「~に変える」という操作にも注目してみましょう!

さて、

めいろ3を実際に動かしてみると、ペンギンが小さくなったり大きくなったりします

こちらはセルのフォントを変更している訳ですが、表示されるコードに注目してみましょう!

Selection.Font.Size = 14

Selection.Font.Size = 20

こちらの2つのコードは「Selection/選択個所」「フォント」「サイズ」を「14/20に変える

そんな風に解釈してください

オバケをつかまえる

めいろ3を動かして、オバケの手前までくると、下の画像のようなメッセージがでます

Valueについては中味、もしくは値を解釈してみてください

ちなみにSelection.Offset(0,1)は「選択個所」「一つ右」という意味です

つまり、一つ動いた先のセルの中味/値がオバケの場合に「オバケをつかまえた」ということでこのゲームは動いているのです

下の画像がオバケをつかまえた際に出てくるコード一覧です

黄色の箇所に注目して頂きたいのですが、「選択個所値」と「オバケがいるセル値」が等しくなるまで(Do Until)2つのコードを繰り返すという意味になっています

<まとめ>

今回は、めいろ3を通じて「.」と「=」の使い方に慣れて頂きたいと思いました。この「.」と「=」の使い方を理解することは、マクロ/VBAのマスターへのかなりの近道になるはずです。

次回は実際に「.」と「=」を使ってコードを書いてみましょう


にほんブログ村

ゲームではじめるマクロ/VBA_1

 今回からはじめるこのコーナーでは、エクセルマクロ/VBAにて作成したゲームを楽しみながら、マクロ/VBAの学習を無理なく、そして、挫折することなく学習していけるように工夫していきます

エクセルマクロ/VBAを覚えると、相当な業務削減の効果が見込めます!

「でも、マクロ/VBAは難しそう・・・」

もし、そんな風にマクロ/VBAの学習をはじめることを躊躇している方は、ぜひこのゲームで楽しみながら「慣れ」を作ってみて下さい

 ゲームにはペンギンとオバケが登場します。ペンギンが迷路の中で壁にぶつからないように、事前に用意してあるコードを選択してオバケをつかまえられるようにしてください!

*めいろゲームは3部構成です

ところで、

何故、「エクセルの話にゲームが出てくるのか?」

その事についてはポイントが2点あります

1点目は、マクロ/VBAはコンピューターとのコミュニケーション言語である点です

2点目は、「英語映画の英語字幕」による学習についてです

まず1点目のマクロ/VBAが言語である点についてです

マクロ/VBAではコンピューターにコードで指示を出します

しかも、コンピューターに指示が的確に伝わるようにしなくてはなりません

つまり、他のプログラミング言語も同様ですが、エクセルマクロ/も言語なのです

しかも、英語でコードを書きます

ですので、英語学習の要領でのマクロ/VBAの学習方法があってもいいのです

次に2点目、「英語映画の英語字幕」による学習についてです

これは英語の映画を、英語の字幕のまま見ながら学習する方法です

こちらは、映画の登場人物とスクリーンを介して疑似対話を行いながら、タイムリーに表示される英語字幕を通じて生きた英語が学べます

このゲームでは映画の字幕の代わりにコードが表示されます

通常のマクロだと一瞬で終了しますが、このゲームは違います

登場人物の動きに合わせて、コードを表示できます

ゲーム内の登場人物の動きに合わせてコードが表示されると、その意味合いを体感しやすくなります

今回、ゲーム内で表示されるコードについては、学習を始めやすい2つのコードに絞ってあります

①セルの選択/カーソルをセルに置く、②1つカーソルを移動する

*めいろ2とめいろ3ではコードは表示されません

尚、

この記事では2つファイルが添付されています

ゲームの他に演習用ファイルがあります

演習用ファイルには、ゲームで出てくるコードが2つ書かれています

ぜひ、ご自身でコードを修正してみたりして、コードの動きを体感してみてください!

アイコン

めいろゲーム_1 200.40 KB 5 downloads

...

アイコン

演習_1 132.96 KB 2 downloads

...

ゲームを楽しむ

前述の「めいろゲーム_1」をダウンロードしたら「めいろ1」のシートを選択してください

このシートではまず、コードをご自身で選択して設定します

選べるのは、ペンギンを右に1つ進めるか、下に1つ進めるか、だけです

コードを選択したら、下の画像の一番左にある「スタート」ボタンを押して下さい

もし、やり直す場合には、上の画像の真ん中にある「やりなおす」ボタンを押して下さい

 ペンギンが動く際には、前述のように①セルの選択/カーソルをセルに置く、②1つカーソルを移動するのコードが表示されます

 もし、ペンギンがオバケをつかまえるのに成功したら、カーソルの動きのみですが、全コードがまとめて表示されます

もし、コードを表示せずに純粋にゲームを楽しみたい場合には、下の画像の箇所のチェックを外すようにしてください

表示される2つのコードの概要解説

コード内に出てくる「.」については、「の」と置き換えて理解してみてください

*ちなみに今の段階では、コードについては完全に覚える必要はありません

①セルの選択/カーソルをセルに置く

ActiveSheet.Range(“B4”).Select

こちらのコードは、↓のような感じで「意訳」してみてください

カーソルがあるSheet内 範囲/Range 選択/Select

 ②1つカーソルを移動する

Selection.Offset(1,0).Select

こちらのコードは、↓のような感じで「意訳」してみてください

カーソルが選択してあるセル範囲/Selection 別位置 選択/Select

Offset(1,0)の場合は1つ下に、Offset(0,1)の場合には1つ右に移動します

演習

演習用ファイルで実際にご自身でコードを動かして、コードの動きを体感して見ましょう!

開発タブの設定

まだ開発タブを設定していない方は、まずは動画か、演習ファイルの解説シートを見てタブを設定してください

*開発タブの設定用動画(ファイルタブ➡オプション➡リボンのユーザー設定)

https://youtu.be/bjTGdVs77w8

コードを動かしてみる

演習ファイルの演習1シートにカーソルを置いてください

次の画像のマクロボタンをクリックすると「Sample1」という文字が見えるはずです

Sample1の文字は次ような感じで見えているはずです

Sample1が選択されているのを確認したら、右にある実行ボタンを押して下さい

すると、上の画像のようにB5セルが「選択されている/カーソルが置かれている」はずです

マクロを実行してみた後は、コードの中味を実際に見て見ましょう!

コードの中味の確認

では、下の画像の「編集」をクリックして、コードの中味を見て見ましょう!

「編集」をクリックすると下の画像の内容が見えます

ここからはご自身で修正してみて、コードの動きを試してみて下さい

例えば、上の画像だと「Selection.Offset(1,0).Select」と入力されています

ですのでコードを実行すると、上のコードでB4セルを選択した後に、1つ下のセルに移動しています

この「Selection.Offset(1,0).Select」「Selection.Offset(0,1).Select」と修正してみてください

すると、1つ目のコードで選択されたB4セルの一つ右隣りのC4セルが選択されているはずです

ちなみに、

下の画像のようにOFFSET関数は、通常の関数でもあります

=OFFSET(セル範囲,行指定,列指定)

この関数では、引数1番目で指定したセル範囲から行方向、もしくは列方向に移動した箇所を指定できますので、興味があれば試してみてください

なお、通常のエクセルシートに戻る際には、下の黄色につけた印の箇所をクリックしてください

<まとめ>

今回は、ゲームと演習ファイルを通じてVBAコードを2つ体験して頂きました

 たった2つのコードですが、マクロ/VBAの本質にこれから迫っていく「取っ掛かり」にはとてもいい内容だと思います

記事の冒頭でも述べましたが、マクロ/VBAはコンピューターとのコミュニケーションであり、的確に指示をコンピューターに伝えなくてはなりません

この2つのコードには「どこの/どのセル範囲」を操作対象にして、その操作範囲の「何を」「どうするのか」というコンピューターへの「的確な指示」に必要な要素が端的に詰まっています

この「的確な指示」とは具体的にはどういうことか?ということについては、また別な記事で解説したいと思います

まずは、コードを動かしてみる事、そしてマクロ/VBAを楽しむことが重要です!

ちなみに、サンプルファイルは「.xlsm」になっている点にも注目して下さい

この拡張子「xlsm」のように、マクロ/VBAの場合には通常のエクセル作業とは違ったルールがあったりしますが、それは後々、解説していきます

!ストリート・アカデミーにてゲームを使ったマクロ/レッスンも行っています ➡詳細

にほんブログ村

ゲームではじめるマクロ/VBA~繰返処理

前回は、めいろゲーム1を試してみて頂いた上で、カーソルを動かす簡単なマクロを試して頂きました

今回、まずはエクセルマクロ/VBA醍醐味である「繰り返し処理/ループ」を試してみて頂きます

この「繰り返し処理」はシステム全般醍醐味といっても過言ではありません

この繰り返し処理のおかげで、人間は退屈な処理から解放されています

ぜひ、めいろゲーム2を通じて、この繰り返し処理を体感してみてください

この繰り返し処理は通常のマクロ/だと一瞬で終わってしまい、結果でしか、実感する暇がありません
このゲーム形式だと、登場人物に合わせて表示されるコードにて、はっきりと繰り返し処理が行われている様子を実感できるのが大きなメリットです!

アイコン

めいろ2 182.98 KB 2 downloads

...

めいろゲーム2の遊び方

迷路ゲーム2のシートにて、L列の下にある「やり方」ボタンを押すとゲームのコード設定の方法が表示されます

このめいろ2では、めいろ1と違い「2つのコード」とそれぞれの処理回数の指定だけで「ペンギン」が「オバケ」を壁にぶつからないでつかまえることができるようにします

めいろ1とめいろ2は「めいろの内容」と「ペンギンとオバケの配置」は全く同じです

ところが、繰り返し処理を行うめいろ2の場合は僅か2行のコードを設定するだけで済みます

この2行へのコードの集約がまさに「繰り返し」処理の醍醐味です

ペンギンがオバケをつかまえた後は、カーソルの動きの動き(ペンギンの移動)について実行された「全てのコード」が表示されます

上の画像を見て「なんのことかさっぱり??」と思われたかもしれませんが、

次の章で、中身について解説していきます

繰り返し処理の中味を見る

繰り返し処理には様々な種類がありますが、今回はFor ~Next文に絞って解説を行います

上の画像の赤字部分が、構文になります(➡後は可変になります)

ForとNextの間に書いてあるコードを繰り返し処理をさせます

「繰り返し処理を何回行うか?」

の指定については、変数という概念を使います

今回はこの変数については「魔法の呪文」と割り切って話を進めさせて頂きます

上の画像の「Dim myCount As Long」とは、「myCount」を「整数の型式」にて変数として使うという意味になります

この変数の「myCount」は中学の数学で使う「X」のような意味で考えて頂いて結構です

数学の問題ではXに様々な値が入り、Yの値が変わっていきます

今回の繰返し処理のコードでは「As Long」として指定することにより、「myCount」に整数だけが入るというルールになります

ちなみに、myCountという名前は「i」などの他の名前にして頂いても結構です

さて、

この「myCount」はFor~Next文の中で、繰り返し処理回数をコントロールするのに重要な役割を果たします

「For myCount = 1」と指定することで、myCountは整数の1から始まり、

その後に「to 4」と指定することで、myCountを1つずつ増やして4になるまでFor ~ Nextの中に入るコードを繰り返し処理するという意味になります

実際にコードをいじってみよう

今回は演習2というサンプルファイルを添付します

アイコン

演習2 133.64 KB 1 downloads

...

サンプルファイルの中には3つのマクロが入っています

このうち「Sample1」は前回に使用したものです

今回は、Sample2とSample3を使用します

まず、Sample2です

Sample2を実行すると「メッセージ」が表示されます

では、「編集」ボタンを押してSample2の中味をみてみましょう!

本当に簡単な一文が書かれているはずです

MsgBox~この一文だけで「メッセージ」を表示させることができます

では、Sample3を実行してみましょう!

今度は3回メッセージが出てきました

Sample2と同じ様に中味をみてみましょう

めいろ2と同じ様な繰り返し処理のコードが書かれています

今回の場合には、Toの後が4からに変わっています

ですので、メッセージを出すコードが3回繰り返し実行されています

繰返し処理を体感する意味で、この「」を他の数字に変更してみましょう!

変更した上で実行すると、繰り返し処理を体感しやすいはずです

<まとめ>

いかがでしたでしょうか?

今回は、繰り返し処理について体験して頂きました

記事の冒頭でも書きましたが、この繰り返し処理はシステムの醍醐味です

この繰り返し処理を使いこなせると、エクセルを使う景色が変わってきます

今回の内容は、繰り返し処理の中でも一番、基礎的な内容です

この基礎形を理解しておくと、様々な形で応用が効きますのでぜひマスターしておきましょう!

!ストリート・アカデミーにてゲームを使ったマクロ/レッスンも行っています➡ 詳細


にほんブログ村

ゲームではじめるマクロ/VBA~条件分岐

前々回に試して頂いた「めいろ1」ですが、「X」の壁にぶつからないで「オバケ」をつかまえられたでしょうか?

もし、壁にぶつかると条件分岐処理によりペンギンは止まります

今回は、この条件分岐の処理を体験して頂きます

アイコン

めいろゲーム_1 200.40 KB 5 downloads

...

アイコン

演習2 133.64 KB 1 downloads

...

通常のIF関数の復習

今回は、前回使用した演習2のファイルからはじめます

このファイルのK8セルには上記のようなIF関数が埋め込まれています

ですので、「迷路の一の二/C4セル」に”X”が入力されていると”終了”の文字を出力します

このIF関数と同じ仕組みが、記事の冒頭の「カベにぶつかったとき」のマクロの処理に組み込まれています

壁にペンギンをぶつける

では、今回はめいろ1にて敢えてペンギンを壁/Xにぶつけてみましょう!

上の画像のように、コードの1行目で下に進むようにすれば、スタートボタンを押すのとほぼ同時に壁にぶつかります

上の画像では、数式バーに「X」と出ています

つまり、これはカーソルがある箇所にXが入力されているということになります

カーソルがある箇所のセルの中味が「X」の場合には、処理が止まるようにマクロが組み込まれているわけですが、コードにすると次のようになります

2行目の「End」は「マクロ処理」の終了という意味です

この「End」というコードが、1行目のIfからはじまるコードと3行目のEnd Ifに囲まれています

1行目のコードでは、IfとThenの間に「Selection.Value」というコードが入力されています

「Selection.Value」については、今の段階では次のように解釈しておいてください

「選択/Selectionした箇所 中味/Value」

つまり、「もし/If、カーソルが選択されているセルの中味が”X”の場合には」という条件式が「If Then」の の箇所に書いてあります

そして、条件に合う場合には、次の行から書いてあるコードを実行します

3行のEnd Ifは、条件に合う場合に実行されるコードの終点を示しています

条件分岐処理を体験する

では演習2のファイルに戻ります

こちらのファイルにあるSample3のマクロを開いてみて下さい

今回は、下の画像の「Visual Basic」のところをクリックしてみましょう!

すると「Sub Sample3()」の箇所がみえるはずです

こちらのマクロは、実行するとカウンターとして設定した「myCount」が1から3まで増える間にメッセージボックスを3回繰り返し表示します

では、今回はFor ~ Next文の中に次の3行を入力してみましょう

こちらのコードは「もし/If、1からはじまるmyCountが1の場合には、マクロを終了する」という意味になります

ですので、このIf文をMsgBox~の上に書くと、メッセージボックスは1度も表示されません

<まとめ>

今回は、条件分岐の処理を体験して頂きました

前回の繰返し処理もそうですが、この条件分岐処理は操作を記録して再生する「記録マクロ」では実行できません

ですので、繰り返し処理と同様にシステムの醍醐味といってもいい処理だと思います

ぜひ、手を動かして体感してみてください

尚、記事の中で無造作にマクロという言葉を使用していますが、こちらはVBAコードを集めたセット/一式ぐらいに思っていただければ結構です

ではまた次回もよろしくお願いします


にほんブログ村