和風スパゲティのレシピ

日本語でコーディングするExcelVBA

Worksheets("○○"). の入力選択肢を出す方法

Worksheets("○○")でシートを取得したとき困るのが、
「.」を入れても入力選択肢(インテリセンス)が出ないことです。

Worksheets("○○").


この対処法としては2つの正攻法があり、
ひとつは「変数にSetする

Worksheetを変数にSet


もうひとつが「シートオブジェクト名を使用する」です。

シートオブジェクト名を設定する


どちらも便利な方法なのでまずはこれをしっかり身に付けましょう。



さて今日は小ネタとして、もう一つのやり方を紹介します。


それがこちら↓

Worksheet型にCastする関数


このように「Worksheetを返す関数を挟む」ことで、
入力選択肢を出すことができます。


このCWsh関数は、Worksheetを受け取ってそのまま返すという、
一見意味のない作業をしているように見えます。

ですが型に注目するとVariantを受け取ってWorksheetを返しているため、
これでVariantのWorksheets("○○")をWorksheet型にできるわけですね。


この型を指定・変換する処理のことをキャストと呼び、
組み込みのCLng関数やCstr関数がまさにこの関数となります。

CLngとはLong型にキャストするという意味なんですね。


関数名もそれにまねて「CWsh」としてみました。


まあ実際はこれをやる意味がどのくらいあるかは微妙なところですが、
こんな手法もあるんだなという一つのアイデアとしてご参考ください。

使いどころ

実際に使うとなると、

CWsh(Worksheets("○○")).

この記述で使う意味はあまりありません。

こんな1回のインテリのためにわざわざ関数を作る方が大変ですからね。


この関数が便利なのはこんな書き方をした時です。

WithステートメントにWorksheet型をつける


実際にインテリが出なくて困るのは、
実はWorksheetではなくその先のRange
です。


1つのシートしか扱わないマクロは

With Worksheets("○○")

この記述がすごく便利なのですが、そのあとの、

.

にインテリが出ず、そしてその先のRangeにも出ないんですよね。


サッと作るマクロをWithで書き始めて

  • インテリが出ないのにイライラしはじめる
  • しかし既に「.」だらけで、いまさら変数やオブジェクト名にできない

という状況に陥ることがよくあります。


そんなとき、

With Worksheets("○○")
' ↓
With CWsh(Worksheets("○○"))

こう書き換えて対処するのは結構便利でした。


まあこの程度の話ですが、気に入ったら使ってみてください。


よく見たらコードが全部画像だったので、
コピペ用にソースも置いておきますね。

Function CWsh(ws) As Worksheet
    Set CWsh = ws
End Function

 

実は今あまり使ってないです

当初は結構この関数の出番があったのですが、
最近めっきり使わなくなりました。


シートオブジェクト名を自動設定するマクロを作ったため、
CWshと書くよりシートオブジェクト名の設定の方が楽になったからです。

www.limecode.jp

↑この記事のマクロをショートカットキーにセットしておくと、
ショートカット1回でシート名と同名のオブジェクト名が設定されます。


結果、With句を使うにも

With WSデータ

これでよくなりました。


ここまで紹介しておいてなんですが、こっちのマクロの方が便利だと思います。

よろしければご利用くださいませ。