タグ別アーカイブ: 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 5 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のマスターへのかなりの近道になるはずです。

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


にほんブログ村

お仕事の依頼

 実務を担う現場の方が使い慣れたエクセル。Excellent仕事術は、このエクセルを効果的に活用して、御社の業務改善やお困りごと解決の最適なスキームをご提案/ご提供します!

御社にこんな悩みはございませんでしょうか?

エクセル作業がブラックボックス化しており、膨大な人手がかかっている

分析資料は沢山あるが、業績改善に向けた課題や傾向が全く把握できない

プレゼン資料にどこかインパクトが無い

 Excellent仕事術では、これらの悩みに対して「現場重視」で現場の声を反映させながら解決策を提案します!

 ご相談自体は無料でうけたまわります。エクセルに関することであれば、どんなことでも幅広く「Excellent仕事術のガッツ鶴岡」へご相談ください!

プロトタイプ(試用版)の開発についても低価格で請負ます!

お問合先

Excellent仕事術の得意分野

VBA/マクロ開発

エクセル作業がブラックボックス化する理由は、大きく分けて3つあります。

エクセルシートのスパゲティ化

データのバケツリレー

エクセルファイルの共有

 Excellent仕事術では従来のIT部門では対応できなかったこの3つの問題を、これまで培ってきたマクロ/VBA開発力で解決します。

エクセルシートのスパゲティ化

 エクセルシートのスパゲティ化は、1シートに「データ」「計算」「作業スペース」を詰め込むことで起こります。

 異なる内容が詰め込まれている為、「どこの範囲がどの内容」で、「どの範囲とどの範囲がどのように絡み合っているのか?」が第3者に分かりにくくなります。

 スパゲティ化したエクセルシートは、作成した担当者しか扱えないだけでなく、データが不規則に蓄積されているため有効活用ができず効率化が行えません。

 スパゲティ化したエクセルシートを改善するポイントは、「データ」「計算」「作業スペース」を1シートに混ぜず、それぞれシート毎に集約することです。

 Excellent仕事術ではスパゲティ化したエクセルシートを、3つのステップで劇的に改善します。

・Firstステップ

   ➡ ヒアリング及びシートの中味の分析

・Secondステップ

   ➡ シートを「データ」「計算」「作業スペース」などの目的別に作成

・Thirdステップ

   ➡ 作業スペース・シートでの作業をVBAにより自動化

 改善したエクセルシートでの作業は効率化されているだけでなく、特定の担当者以外でも引継ぎの負担なく作業が行えるようになります。

データのバケツリレー

 エクセルファイルでデータを外部の会社や他部署とやり取りすることは、良く行われていると思います。

 データ活用の目的が外部の会社や他部署と違う為、「エクセルファイルの交換」はファイルやシート間での膨大な「データの転記処理」を発生させることになります。

 実は、VBA/マクロを活用すれば複数のファイルやシートの「データ取込み・変換処理」 を、一括で行うことができます。

一括処理のイメージ

 一括で「データ取込み・変換処理」が行えれば、膨大な転記処理から解放されるだけでなく、取り込んだデータを活用して「周辺業務」の効率化も行えるようになります。

 Excellent仕事術では、現場の声をお聞きして「データ取込み・変換処理」から「周辺業務の改善」まで徹底的にサポート致します。

エクセルの共有

 エクセル1ファイルで大量のデータを扱う場合によく出てくる問題として「共有」の問題があります。

 エクセルは表計算ソフトであり、本来は大量のデータを扱うには不向きです。1シートに蓄積できる行数に制限があり、蓄積データが大量だと動きが重たくなります。

 しかも、 1ファイルを複数の担当者で同時に共有して使用できない為、担当者に待ち時間が発生してしまい、どうしても業務効率が上がらなくなります。

 Microsoft社の製品では、データベースソフトとして「Access」があります。Accessであれば、行数に関係なく大量のデータを扱うことができ、複数の担当者で共有して使うことも可能です。

 ところが、Accessだと現場では行えない業務も中にはあります。特に「大きなクロス表での作業」などは、エクセルのような表計算ソフトを業務用にカスタマイズした表でないと効率があがりません。

 こういったエクセルでないと行えない業務を、複数担当者でエクセルファイルを共有しながら作業したい場合には抜け道があります。

エクセルとAccessをVBA技術により連携して使うという方法です。

 この方法であればエクセルとAccess、互いのメリットを組み合わせて業務を行うことが可能です。

 このエクセルとAccessn連携する仕組みでは、データはAccessに一元管理し、エクセルには都度、必要なデータだけ呼び出して活用します。

 このエクセルとAccessの連携を行う場合にポイントとなるのは「エクセルの役割」と「Accessの役割」の切り分けです。

 Excellent仕事術では、連携の仕組みを構築するだけでなく、業務を理解させて頂いた上で「連携のポイント」についても提案させて頂きます。

事例①

データ分析/統計処理

「数値/分析資料は沢山あるが、業績改善に向けた課題や傾向が全く把握できない」ことの主な原因は、鳥の目全体像を捉えることができていないことが考えられます。

 例えば「前期と比べて注文単価が何故下がったか?」について、注文単価自体の推移を見ても、単位荒すぎて「何故下がった」かはよく分からないはずです。

 逆に注文台帳を見ても、今度は単位細かすぎて「注文単価が前期と比べて何故下がったか?」はよく分からないはずです。

 では下に記述したように、注文を単価別にグループ分けして件数の推移を確認した場合はどうでしょう?

・低単価の注文件数の推移

・中単価の注文件数の推移

・高単価の注文件数の推移

 低単価の注文内容と高単価の注文内容では、注文に含まれる商品の違いや、注文した会員の行動や属性に違いが必ずあるはずです。

 低単価の注文件数の構成が高くなっているのか、もしくは高単価の注文件数の構成が低くなっているのか、を注視すれば「注文単価が下がった原因」はある程度見えてくるはずです。

 このように業績改善に向けた課題や傾向を捉えるには、必ず鳥の目でグループ別の推移を捉えることが必要です。

 このグループ別の推移を捉えるのに、必ずしも「データアナリスト」や「CRMソフト」が必要とは限りません。エクセルの集計機能と統計機能を駆使すれば、エクセルでも対応は可能です。

 Excellent仕事術では、これまで培ってきたエクセル集計技術と統計処理・技術を活用して、御社の数字分析のお手伝いをします。

会員分析

会員分析のポイントは大きく分けて3つあります。

・新規会員の獲得状況 ➡会員数自体の分母を増やせているか?

・新規会員の2回目のリピート状況 ➡新規会員が定着しているか?

・既存会員のリピート状況 ➡優良会員が確実に育成できているか?

 つまり、まずは「新規・既存」と「優良・非優良」の2つの切り口で会員のグループ分け(セグメント)を行った上で、会員のグループ間の移行状況を把握することが必要です。

 Excellent仕事術では上記の2つのグループの切り口から、更に深堀した切り口でグループ分けを行います。

そして、基本の「新規・既存」「優良・非優良」のグループに加えて、更に深堀りしたグループ間の移行率を把握するためのツールを提供します!

事例②

その他の分析

 Excellent仕事術では、発注・在庫分析や予算作成・中期計画のシミュレーションなども得意分野としております。

ぜひ、この分野についての悩み事もExcellent仕事術にお問い合わせしてみてください!

ダッシュボード化

 数字分析を行った内容については、社内で共有し、次の行動につなげていくことも大事なことです。

 Excellent仕事術では社内の効率的な業績報告、情報共有のために一目で現状を掴むことができるダッシュボードの作も行います 。

エクセルダッシュボード

プレゼン・資料作成

 競合他社とのプレゼン競争に勝つためには、「数字の魅せ方」に突破口があります。海外のエクセル活用事例をうまく取り入れた「数字の魅せ方」こだわりましょう。「数字なんてただの数でしょ?」。そんなことはありません。「目で見て、数字の変化がリアルにわかる」効率的な資料作成術を、Excellent仕事術/ガッツ鶴岡がご提供します

-シンプルで誰の目も釘付けにするグラフ関連資料の作成をいたします。

Excellent仕事術/ガッツ鶴岡の強み

業務分析の経験が豊富

-上場企業から創業期のベンチャー企業まで、様々な事業規模での業務分析の経験が豊富

-内部監査も含めた内部統制対策をとおして、業務フロー図等の作成・業務分析の経験多数あり。

数値管理の経験が豊富

-銀行や証券会社等の金融機関への数値説明・交渉の経験が豊富

-EC通販での予算管理や中期計画作成、各種分析などの経験が豊富

最新のエクセル技術

 Excellent仕事術/ガッツ鶴岡は、世界の最先端のエクセル技術を常にキャッチアップしています!

-海外では日本と違い、エクセルの新機能/便利機能をうまく使いこなして業務の効率化に成功している事例が沢山あります

-小難しいVBAコードや複雑な関数は必要ありません。Excellent仕事術/ガッツ鶴岡がお教えする世界最先端のエクセルの新機能を使って、効率よく簡単にエクセル作業ができるようになります。

-エクセルは元々、表計算ソフトです。データベースソフトではありません。しかしパワークエリという新機能を使えば、エクセルをデータベースソフトとしても使いこなせます

 Excellent仕事術のガッツ鶴岡がパワークエリとの連動を作成します/お教えします。

事例①

<商品管理システム/エクセルとAccessの連携>

 業務メンバー各自が業務に即したエクセルのクロス表を使用しながら、エクセルへの入力データはAccessファイルに蓄積して各自で共有する仕組みを構築

<改善前・課題>

★1つのエクセルシートに様々な業務データと入出力表が混在

・商品の特性上、入荷した商品を手動で分割・並べ替えて管理する必要があった

・商品の並べ替え順を各業務で使い回すため、1シート上に様々なデータが混在

データ蓄積型式が不規則になり、VBAなどの自動化手段の活用が不可能

・1ファイルをメンバー全員で共有して使用するため、業務メンバーに待ち時間が発生

<改善後・効果>

★業務データはAccessに一元管理し、エクセルの入出力画面を業務毎に分散

・データはAccessに一元管理し、ADOという技術を使用して、都度、必要なデータのみエクセルファイルに呼び出す仕組みを構築。このADOの技術により、1つ1つの業務に即した画面作成が可能になった。さらに他の業務メンバーがファイルを使っている間に発生していた待ち時間も削減できた。

・Accessに一元管理したデータを、RPAに連携して会計システムへの入力を自動化した。これにより、残業時間が1月あたり200時間減らすことに成功

事例②

EC通販における会員のセグメンテーション>

 会員の1年間の購買履歴とアンケートの集計結果を分析し、会員のセグメンテーションを実施。それまで一律にマーケティング施策を行っていたが、会員のセグメント毎の施策(例:セグメント別の割引率設定など)を実施できるようになった

実績

-商社・畜産部門向け商品管理システムの開発

 ➡エクセルとAccess及びRPAと連携処理

-客先マスタ登録業務用システム開発/エクセル・RPA連携

 ➡エクセルVBAにてRPA入力用データを成型

-EC通販会社での会員分析・マーケティング施策立案

 ➡エクセル分析ツールにて会員の購買履歴を統計処理にて分析

-EC通販会社向け在庫管理システム

 ➡適性発注率をエクセルを使用して分析

ストリートアカデミーで講師もしています

経歴

Excellent仕事術運営者:鶴岡 敦(ガッツ鶴岡)

 新卒で総合商社に入社後、ユニクロに転職。更にEC通販会社に経営企画室長として入社。

 EC通販会社にて膨大なデータ量に苦戦。必要に迫られて自らエクセル学習を重ねるうちに、 海外の活用例などを知るようになり、エクセルの可能性に目覚める

1993年慶應義塾大学商学部卒

2002年USCPA合格

大学在学中にプロボクサーとしてデビュー

現在もボクシングジムで練習を続けている

 

 

ゲームではじめるマクロ/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コードを集めたセット/一式ぐらいに思っていただければ結構です

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


にほんブログ村

大人のためのプログラミングゲーム~エクセルマクロも学べる~

エクセルマクロ(VBA)をもっと広めるにはどうしたらいいかを考えて作成したのが、この親子でも楽しめる「めいろゲームです」。これまでも紹介してきたアニメーションマクロを取り混ぜながら作成してあります【無料ダウンロード】。

 3つの迷路に取り組むなかで、プログラミングの基本である「繰り返し処理」をゲームをしながら体感できるようになっています

 これからプログラミング学習を始めるお子様も楽しめるように意識して作成してあります

このゲームを作成するに当たっては、こちらのサイトに大いに刺激を受けました

https://studio.code.org/hoc/1

フェイスブックの創設者、ザッカーバーグも登場するキッズ用のプログラミング学習ゲームサイトです

ザッカーバーグが前述のゲームサイトでこう言っています

「コンピューターが本当に得意のことのひとつは、コマンドを繰り返すこと」

まさにITの本質だと思います

我々の今の生活に欠かせないコンピューターですが、「繰り返し処理」がなければ我々の今の生活レベルは違ったものになっています

逆に言えば、「繰り返し処理」さえ理解すればITの本質を相当カバーできます

また、この「めいろゲーム」ではエクセルのコードが1部ですが表示されます

・ゲームを行っている際中

・ゲームをクリアーした後

プログラミングの上達のコツの一つは、コードに慣れることです

 このゲームを通じて、簡単なコードでもいいので「慣れ」を感じて頂けると嬉しいです!

表示されるコードについて、概要を以下に解説します

・ ActiveCell.Offset(1, 0).Activate

これは、カーソルの位置を「下に1つ移動する」という意味になります

通常、エクセルのセルの位置は「A8」「C2」という形で表現されます

まず「列位置(A~)」があり、次に「行位置」が表現されています

実は、エクセルではR1C1という形で「行位置」「列位置」の順番にてセル位置を表現する方法があります(R➡Row、c➡Column)

つまり(行位置,列位置)という型式にて、あるセル位置を基準にして行列位置を完全に定量化して表現する方法が可能です

ちなみに列位置を一つ右へ移動する場合には、次のコードを書きます

ActiveCell.Offset(0, 1).Activate

・For文(For~Next)

ForとNextに書かれたコードを繰り返し実行します

繰り返す回数は「For A = B to C Step D」という形で表現されます

・Do Until文

ある条件を満たすまで、Do UntilとLoopの間のコードを実行します

次に操作について概要を解説します

めいろ1~3までシートが分かれていますが、それぞれのシートでの操作はほぼ一緒です

コードを表示させたくない時には、次の画面で非表示も選択できます

・コード記入画面

コードはリストで選択します

・各種ボタン

「スタート」ボタンを押すと記入されたコードに従って、ペンギンが動き出す仕組みです

「やりなおす」ボタンを押すと、コード等がリセットされます

「やりかた」ボタンを押すと、ゲームの解説が表示されます

・めいろ1

記入されたコードを上から順に実行していきます

・めいろ2

めいろ1のコードの内容を、プログラミングの構文で言えばFor~Next文で集約する内容になっています

*実際にFor文を書くことはありません

・めいろ3

めいろ1と2はかなり簡単ですが、3は少しトリッキーな内容も入れています

プログラミングの構文で言えばDo Until~文で繰り返す内容になっています

*実際にDo Until文を書くことはありません

ゲームは次のアイコンからダウンロードできます

アイコン

めいろゲーム 312.61 KB 12 downloads

...

注意事項を書いたシートがあるので、そちらは事前にご確認ください

ぜひ、プログラミング自体を楽しんでみてください!

にほんブログ村 資格ブログ ビジネススキルへ
にほんブログ村 IT技術ブログ VBAへ

にほんブログ村

アニメーションマクロ2

 前回は、アニメーションマクロの事例として、オブジェクト(四角形などの図形)が登場するマクロを紹介しました

 今回は、オブジェクトが移動するマクロをさわりだけですが紹介します

マクロを起動させると、テキストボックスが右側から移動してきます

この仕組みのポイントだけ解説しますね!

ActiveSheet.Shapes(“Txt1”).Left

コードにするとこういう形になります

ちなみにTxt1というのは、テキストボックスにつけた名称です

名称は昨日紹介した、検索と選択で指定できます

オブジェクトに名称をつけたら、下のコードの()の中に入れ、=で結んだ右側に位置を書きます

ActiveSheet.Shapes(“Txt1”).Left=100

この位置を指定するコードを繰り返し処理の中に入れると前述のテキストボックスが移動するマクロになります

次回は、アニメーションマクロを完成したいと思います!

にほんブログ村 資格ブログ ビジネススキルへ
にほんブログ村 IT技術ブログ VBAへ

にほんブログ村

アニメーションマクロ1

 最近、テレビでも動画紹介のようなコーナーが多くなってきました。スマホが浸透して、動画というものが本当に身近になりましたね。

 実は、エクセル上でも動画のようなものを作成できます

最初に、下のGIFをご覧ください

画像が画面に出現して、大きくなっていきます

今回は、この画像を出現するところだけ解説します

この画像を出現させることは手動でもできます

上のGIFの操作は以下の箇所から行えます

<エクセル画面上のホームタブ>検索と選択>オブジェクトの選択と検索>

ここでオブジェクトの表示、非表示はコントロールできます

この表示、非表示の処理をVBAコードで書くと以下のようになります

ActiveSheet.Shapes(“図1”).Visible = True or False 

検索と選択でオブジェクトに”図1”という名前を付与した上で、コードの中にオブジェクト名を組み込んでいます。ここが今回の回の一番のポイントです

短いですが、今回はここまでです

次回はもう少し、図1を動かしてみましょう!

にほんブログ村 資格ブログ ビジネススキルへ
にほんブログ村 IT技術ブログ VBAへ

にほんブログ村

Solverによるシミュレーション5~マクロ編・設定~

 今回からはマクロによりソルバーの設定・解決自体の自動化に取り組んでいきましょう!

 前回までの4回の解説では、ソルバーの基本設定から実践的に活用する方法まで解説させて頂きました

 Solverによるシミュレーション

  Solverによるシミュレーション2

 Solverによるシミュレーション3~実践編・整数設定~

 Solverによるシミュレーション4~実践編・バイナリ設定~ 

 ソルバーをマクロで活用できるようになると、弱気ベース、強気ベースなど様々なパターンで算出した値を瞬時に比較できるので、より実践的なシミュレーションが行えるようになります!

 今回はソルバーのシナリオを2つ、記録マクロで保存してみてVBAコードを比較してみましょう!

そうするとコードの書き方がつかめてきます

その前に準備が1つあります

 事前にVBE(Alt+F11で開く画面)でSolverライブラリを参照可能にしておきましょう!

このライブラリが無いと、記録マクロが動きません!

では本題に入ります

今回は1~3まで以下の表を通じて解説していきます

 注)D4セルも同様の数式(X1xX2)が入力されています

注)D3セルのYはシナリオ1用、D4セルのYはシナリオ2用になります

1.シナリオ1記録(※X1,X2は4以下の制約にてYを最大化する)

➀以下のシナリオでマクロを記録

②VBEを開けて重複しているコードを削除し、コードを以下の画像のように3部構成にします

③表の値を1にセットし直してシナリオ1マクロを起動

もしもうまくいかなかったら、余計なコードまで消してしまったか、もしくは前述の”Solverライブラリ”にチェックが入っていない状態になっています

2.シナリオ2記録(X1,X2は2以上の制約にてYの値を4にする)

➀設定リセット

記録する際には、ソルバーの設定画面上に前回の設定が残っているのでリセット処理を行っておきましょう

②以下のシナリオでマクロを記録

③VBEを開けて重複しているコードを削除し、コードを4部構成にします

注)シナリオ1にも”SolverReset”を追加しておきましょう!

④表の値を1にセットし直してシナリオ2マクロを起動する

どうです?うまくソルバーは無事に稼働したでしょうか?

3.2つの記録マクロを比較してみる

大前提として2つのシナリオの違いをもう一度整理してみましょう!

➀目的セル、変数セル、及び制約条件を指定するセルの行位置が違う

②目標値の設定の仕方が違う;シナリオ1/最大値、シナリオ2/指定値

③制約条件の符号が違う:シナリオ1/<=、シナリオ2>=

どうでしょう?朧気ながらどのへんをVBAの変数で置き換えられそうかについてのイメージがついてきたと思います

 今回は記録マクロにとどまりましたが、次回は本格的にソルバー・マクロを作成していきましょう!

にほんブログ村 資格ブログ ビジネススキルへ
にほんブログ村 IT技術ブログ VBAへ

にほんブログ村