YAS's VB.NET Tips
 
ExcelVBA Tips
ExcelVBA Tips
2018/06/09

セルの上に条件付きで画像を表示する(VBA不要)

Tweet ThisSend to Facebook | by:YAS
 VBA Tipsと言いながら,VBA不要のネタです。
 学校の出席簿を電子化する際に考えた,月末の31日がない日を赤線で消す機能の実装方法です。条件付き書式には取り消し線に色をつける機能はありません。そこで,「リンクされた図」の貼り付けと,リンク先に数式を使った名前を使い,セルの上に条件付きで図を表示することで赤い取り消し線を実現します。下の動画は,赤い取り消し線とセルに半透明の〇や×を重ねた例です。

 上の動画に用いたExcelファイル


【方法】
1 セルの上に重ねる画像を別のセルに作っておきます。図形でも画像でも斜め罫線でも何でもかまいません。ただし,セルの塗りつぶしの色は「塗りつぶしなし」にしておく必要があります。また,「表示」-「枠線」のチェックを外し,セルの枠線を消しておきます。

2 重ねる画像のセルを「コピー」し,図を重ねたいセルに「リンクされた図」で貼付けます。
   

3 「数式」-「名前の定義」で下のように名前を定義します。
  名前:適当な名前
  参照範囲:=IF(条件の式,条件が成り立つときに表示するセル範囲,条件が成り立たないときに表示するセル範囲)
        例:=IF(Sheet1!$D$5="成り立つ",Sheet1!$B$14:$B$14,Sheet1!$C$14:$C$14)

4 貼り付けられた,「リンクされた図」を選択し,数式バーに3で定義した名前を入力します。

10:40 | 投票する | 投票数(0) | コメント(0)
2018/05/23

マウスがのると,一回り大きくなるボタン

Tweet ThisSend to Facebook | by:YAS
 ユーザーフォームに,マウスがのったら一回り大きくなるボタンをつくる。ボタンそのものは,Imageコントロールにボタンのイメージを表示しているだけで,ImageコントロールのMouseMoveイベントでボタンを大きくしている。
 ただ,VBAにはVB.netで言うところのMouseLeaveがないため,マウスがImageコントロールから離れたことが検出できない。そこで,擬似的にUserFormのMouseMoveをImageコントロールのMouseLeaveとしている。そのため,マウスをUserFormの外に素早く動かすと,UserFormのMouseMoveイベントが発生せず,ボタンが小さくならないときがある。その場合にはUserForm上にマウスを移動すると,ボタンが小さくなる。

下のコードを含むマクロ有効のExcelファイル


 「オートシェイプを図(拡張メタファイル)に変換する」のコードを流用している。VBEでクラスモジュールを挿入し,「EffectiveButton」と名前をつけて,下のコードをクラスモジュールにコピー貼り付けをする。

 上のクラスを次のように標準モジュールやシートモジュールから使用する。
 CreateEmfFromRange関数については,「オートシェイプを図(拡張メタファイル)に変換する」を参照。

16:00 | 投票する | 投票数(0) | コメント(0)
2018/05/21

オートシェイプを図(拡張メタファイル)に変換する

Tweet ThisSend to Facebook | by:YAS
 シートのオートシェイプをクリップボードにコピーし,図(拡張メタファイル)で取得する。ボタン等のイメージをシート上でオートシェイプで作成し,UserFormのImageコントロールに表示する。
 

下のコードを含むマクロ有効のExcelファイル


 シートにオートシェイプとコマンドボタンを配置する。オートシェイプはA1セルに配置する。また,VBEでユーザーフォームを挿入し,イメージコントロールを配置する。下のコードをオートシェイプを配置したシートのコードにコピー貼り付けをする。

22:52 | 投票する | 投票数(0) | コメント(0)