タグ別アーカイブ: 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へ


にほんブログ村

ソルバーによるシミュレーション6~マクロ編・操作~

 今回は、前の回にて作成した2つのマクロを書き換えて、本格的にソルバーを動かすマクロを作成します

前回作成した2つのマクロは、作成条件が次の3つの項目で違っていました

➀目的セル、変数セル、及び制約方法を指定するセルの行位置

目標値の設定の仕方;シナリオ1/「最大値」、シナリオ2/「指定値」

制約方法の指定:シナリオ1/「<=」、シナリオ2「>=」

記録したマクロのコードを比較して、上記の違いがどう反映されているかを見てみましょう!

シナリオ1
シナリオ2

上がシナリオ1で下がシナリオ2です

おおよそ、黄色の目印を付けたうち、どこが「変数」で置き換えられるか見当がついたと思います

変数で置き換えられる箇所をまとめると、次の通りになります

・SolverOK➡SetCell:「目的値のセル」

      ➡MaxMinVal:1は最大値、2は最小値、3は指定値

      ➡ValueOf:指定値がある場合に指定(無い場合は0)

・ByChange➡「変動する値:値範囲」

・ SolverAdd➡CellRef: 「制約条件の範囲」

      ➡Relation:制約方法の指定

       *下の図の順番で指定:etc 「<=」は1、「=」は2)


      ➡FormulaText:制約条件の指定           

今回は前回作成したシナリオ1マクロを以下の3つ、

1.SetCell(目的セル)、2.ByChange(変数セル)、3CellRef(制約条件セル)

それぞれを変数で置き換えてマクロを動かせるようにしましょう!

1.範囲を指定できるようにしておく

今回はC2セルで1を選んだら上の行を操作する(前回のシナリオ1)、2を選んだら下の行(前回のシナリオ2)を操作するようにします

次の2.ではシナリオ1の前に、IF構文を配置し、C2セルに応じて前述の1~3の範囲を動かせるようにします

If mySheet.Range(“C2”).Value = “1” Then ~ else ~

2.マクロに変数をセットしてマクロを実際に動かす

➀If構文で変数を可変にする

②ソルバーのコードに変数を設定する

各X1、X2を1に直しながら、マクロを試してみてください

<まとめ>

 今回は、前回操作した記録マクロの範囲(以下の3つの範囲)を事前に指定できるようにしました

1.SetCell(目的セル)、2.ByChange(変数セル)、3CellRef(制約条件セル)

 次回はいよいよ、ループ処理により、複数のシミュレーションを一気に走らせることができるようにします!

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


にほんブログ村

エクセルで作るタイマー

エクセルでも、簡単な技術を組み合わせただけでここまで出来るといる!!

これを「エクセルで作るタイマー」で証明したいと思います

以前に書いた記事、スピードメーターグラフで円を傾ける技術について解説したことがあります

1_4.gif

上のGIFの通り、「系列のオプション」画面で「グラフの基線位置」を変えると円グラフが傾きます

この仕組みを活用して、1分タイマー作成します

時計

以下、「タイマーのオブジェクト作成」「ループ処理の作成」の2段階で作成方法を解説します

1.まずはタイマーオブジェクトを作成します

まず外円、棒(秒針)を作成します

秒針は円と棒を組み合わせて作成します

画像に alt 属性が指定されていません。ファイル名: 秒針.jpg

その後、作成した円と秒針をグループ化してオブジェクトを作成します

グループ化して置かないと、秒針と外円がうまく連動して動かなくなるので注意が必要です

19

オブジェクトを作成したら、オブジェクトに名前(時計)をつけておいて、後でVBAでコードを書きやすくしておきましょう!

以下がオブジェクト名を付ける画面です

20

上記の画面は「HOME」タブの右側「検索と選択」から開けます!

この「選択の画面」の詳細な使い方については、以下の動画を参照してください。

2.ループ処理のマクロを書く

待ち処理を組み合わせて、秒針を動かすためのループ処理をコードで書きます

①待ち処理⇒常に「今」から1秒待ち処理

以下が、待ち処理のコードです

Application.Wait Now + TimeValue(“00:00:01”)

②ループ処理のカウント(変数→i)をそのまま秒針の角度にします

1.で作成したタイマーオブジェクトの角度を変えていきます

Worksheets(“時計”).Shapes(“時計”).Rotation = i

③最後は時計オブジェクトを0に戻して終了です

Worksheets(“時計”).Shapes(“時計”).Rotation = 0

ぜひ、以下のサンプルファイルもダウンロードして直接参照してみてください

このタイマー実は正確には1分で終了しません。うまく調整する方法もあると思いますが、今回は割愛しています

グラフを傾けながら作成するスピードメーターグラフの作成の仕方については、こちらで記事を書いています ⇒ スピードメーターグラフ

画像に alt 属性が指定されていません。ファイル名: スピードメーター2.gif

また、エクセルのアドイン機能でもタイマーがあります!

カラフルでとても使いやすいです!

興味のある方はぜひタイマーアドインをダウンロードしてみてください

画像に alt 属性が指定されていません。ファイル名: Timer-Excel.gif

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

RPAとエクセルとの融合の可能性

今日は今、話題のRPAについて思いつくまま書きたいと思う

RPAの仕事をしていて、気づいた点は大きく3つある

1.万能ではない、少なくともAIではないし、ユーザーがシナリオを書けるというのは幻想

良く落ちるし、万能ではない。RPAのデモなんかの時には動画を用意している人も多いのでは・・・

それでもRPAを使うのは、一度タクシーの便利さを知ってしまったしまったと同じこと

落ちると分かっていても、あの面倒くさい処理が少しでも軽減できれば・・・と思うのは

弱い人間の常なのだと思います。

後、AIと勘違いしている人が多い。これは全く勉強不足

更に、よくユーザーが設定できる、というのも幻想。

「我が社ではユーザー主導でRPAを導入・・・」なんていうのは、IT部門とユーザー部門の中間に専門部署が

実はあったりする。後、会社によってITリテラシーも違うし

2.やっぱりエクセルは便利

話しを分かり易くする為に2つ、実際にあった話しをします

ある人がエクセルのデータを消去する仕組みをRPAで作成していました。

どうやってやるかというと””(空白)をセルに埋め込むシナリオを書くのです

当然、シナリオ作成するのに時間もかかるし、実際に処理も何十秒かはかかる

RPAでVBAを動かすなら、シナリオもVBAの記入もすぐだし、処理自体もすぐです。

 

あらゆるRPAのデモを行ったり、見たりしていて気づいたのは、人の心を動かすのは

RPAが人の代わりに行う点ではなく、その処理スピードです

つまり、処理スピードがないとRPAの魅力は半減するのです

 

処理スピードを上げる為にもVBAとの連携を進める必要があります

ちなみに、RPAの魅力の一つは開発も修正もすぐに出来ること。繰返しになってしまうが、

VBAを使えば更に開発スピードを上げることができる

 

話しを基に戻して実際にあった話の2つ目をすると

ある基幹システムからエクセルをアウトプットした後、ファイル名をつけるRPAを作成していたところ

エクセルファイル(保存を有効にする、の制限がかかっている)を保存する処理がどうしても安定しない

そこで、ダウンロードした後(これまたファイル名が変わる)にRPAによりフォルダ内のファイル名を取得し、

VBAでファイルを名前をつけてコピーする処理に変えたところ、相当な進歩を見せた

VBAといってもネットから2行ぐらいコピーしたもの・・・それでも効果は絶大

RPAはVBAを動かすもの・・・と割り切ってもいいくらいの確信を得た

3.RPAの醍醐味は業務改善

これまたエクセルの話し・・・

RPAを動かすには投入データが必要です。私は基本的にはエクセルで作成しています

投入データは当然、RPAでも読み取れるようにシンプルなものしなければなりません

当然、ユーザー(業務側)は悩みます。

 

ああしよう、こうしよう、そういえば、そもそもこれは要らないよね・・・

 

そう、ついついエクセル管理表などはメタボになりやすいのです

RPAがメタボに気づくいい機会になるのです

 

とりとめなく書き連ねましたが、少しでも皆さんのお役にたてば光栄です

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

カーソルの位置を行列双方向でハイライトする

行列双方向で大きな表を扱っていると、今、どこを操作しているのかわからなくなり、迷子になることがあります

昨日、twitterで見つけた記事↓から、この迷子問題に対する大いなる示唆を得ました

https://hamachan.info/win7/Excel/active.html

こちらの記事を元にして、作成したのが下の表です

勤務スケジュール内で、カーソルを置いた行列がハイライトされつつ、勤務者の顔が表示され、ダイナミックに動きます

kinmusukejurue.gif

!今回のポイント

・条件付き書式の使い方

ⅰ)Cell関数とColumn関数、Row関数

Cell関数はセルの情報を返す関数です

このCell関数と列番号と行番号を返すColumn関数と、Row関数を組み合わせて条件付き書式の条件にします

ⅱ)OR条件

ハイライトしたいのは、カーソルを置いた行と列の位置です

こちらを「カーソルを置いた行」もしくは「カーソルを置いた列」

と解釈し直します

ⅰ)ⅱ)を組み合わせて設定した条件付き書式の画面が次の画像です

・イベントプロシージャ―

条件付き書式を設定しただけでは、うまくハイライトされません

カーソルの位置を変えた時に、更新処理が強制的に行われるようにイベントプロシージャ―を入れます

ⅰ)コードを表示

ⅱ)更新処理の組み入れ

下の「Worksheet」⇒「SelectionChange」から更新を行うコードを入力します

Application.ScreenUpdating = True

上のコードを入力することで、カーソルの位置を変更すると強制的に画面更新が行われ、条件付き書式もうまく稼働します

・画像のダイナミック表示

更に、2つの仕掛けを付け加えて”選択したセルにある名前”と対応する画像を表示できるようにします

こちらは、名前機能とカメラ機能を3段階で活用します

セル内の名前⇒別シートにコピー⇒別シートをカメラで参照

1.別シート(計算シート)に選択したセルの内容をコピーする

条件付き書式を強制的に稼働させるために作成したイベントプロシージャ―内に以下のコードを入れます

Worksheets(“計算シート”).Range(“C3”).Value = Target.Value

すると、計算シートにカーソルを置いたセルにある内容がコピーされます

以下は、実際に設定したコードです

複数セルが選択されると、条件付き書式がうまく動かない為、制御を入れています

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Application.ScreenUpdating = True
If Target.Count > 1 Then
MsgBox “複数のセルは選択できません!”, vbCritical
With Application
.EnableEvents = False
.Undo
.EnableEvents = True
End With
End If

Worksheets(“計算シート”).Range(“C3”).Value = Target.Value

End Sub

2.名前とカメラ機能を組み合わせて画像をダイナミック表示する

①下のような表を作成し、各画像が入ったセルに「人の名前」と同じ名前(名前管理)をつける

キャプチャ0221

こちらの名前を作成する処理は、以下の画面で簡単に設定できます

「選択範囲から作成」をクリックし、下の画像の「チェック」の箇所で設定します(上の表の名前の列が、左端列になるようにします)

②名前の管理画面にて、計算シートに入力された名前を参照する名前(名前管理)を設定する

こちらはINDIRECT関数を使用します!

③カメラ機能で②の名前を参照する(数式バーにて)

カメラ機能が参照しているセルは数式バーに表示されます

数式バーを②で作成した名前を組み入れます

カメラ機能の詳細については以下を参照してください

カメラ機能

INDIRECT関数については以下を参照してください

画像変える技術については、こちらもぜひご参照ください

以上です。ちなみに画像は以下より拝借させていただきました

http://kara1.blog92.fc2.com/blog-category-9.html

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


にほんブログ村

にほんブログ村