FC2ブログ

Excelじゆうちょう

Excelのお絵描きツール『りっぷ2(りっぷつぅ)』のサポートページ、まずは「はじめに」をご覧ください。 [NewEntry] [Admin]

記事更新カレンダー

10 « 2018-11 « 12
- - - - 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 -

やたらに多いカテゴリ

比較的新しい記事

新しいコメント

ありがたいブログ拍手

拍手コメント一覧(拍手はしない)

さみしいトラックバック

申し訳ないプロフィール

申し訳ない

管理人  [ 申し訳ない ]

pxivもやってます
リンクの一番上からのぞきに来てください
※閲覧にはユーザー登録が必要です

RSSってなんぞ?

広告は消せないらしい

FC2Ad

        --------       スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

        2010-05-11       標準モジュールより、関数を…1

マクロはモジュールに記述します。

中でも、Functionプロシージャは戻り値を設定することができる、いわゆる関数です。
関数といえば、Excelにはワークシート関数というものがあります。
マクロとは違って自由に作り込むことはできませんが、色々な統計や検索等ができて大変便利です。

いいえ、実はできるんです。
Functionプロシージャをワークシート関数として使うことができるんです。
今回は、その方法を紹介します。

それでは、試しにシート名を取得する関数を自作してみましょう。

まずは、VBEで標準モジュールを用意します。
ワークシートモジュールではいけません、クラスモジュールでもだめです、必ず標準モジュールです。
マクロはこんな感じです。


'【コードウインドウ】
Private Function getSheetName(Optional Sheet_no As Long) As String
If IsMissing(Sheet_no) Then '引数が省略されていれば
  getSheetName = ActiveSheet.Name 'アクティブシート名
ElseIf 0 < Sheet_no And Sheet_no <= Sheets.Count Then '引数のシート番号があれば
  getSheetName = Sheets(Sheet_no).Name 'シート名
Else '引数のシート番号がなければ
  getSheetName = "なし!" 'そんなシートないよ
End If
End Function


後は、シートでいつもの通り関数を呼び出します。
ちなみに、このFunctionプロシージャは引数をひとつ取ってその値と同じシート番号のシート名を返します。
もし、引数のシート番号がなければ"なし!"と返してくれます。
また、引数を省略するとアクティブシートのシート名を返してくれます。

↓左が入力した数式表示、右が計算結果表示↓
シートでFunction(×)

ちょっと変ですね、引数を省略したのにアクティブシート名が返ってきてません。
原因は、引数の変数の型にありました。
上の2行目の
If IsMissing(Sheet_no) Then
で、引数が省略されたかどうかを判定しています。
ですが、この場合は引数の型をVariantにしておく必要があります。
上のコードでは1行目が、
Private Function getSheetName(Optional Sheet_no As Long) As String
でしたので判定できませんでした。

そうそう、Optionalは引数を省略可能にするというキーワードです。


'【コードウインドウ】
Private Function getSheetName(Optional Sheet_no As Variant) As String
If IsMissing(Sheet_no) Then '引数が省略されていれば
  getSheetName = ActiveSheet.Name 'アクティブシート名
ElseIf 0 < Sheet_no And Sheet_no <= Sheets.Count Then '引数のシート番号があれば
  getSheetName = Sheets(Sheet_no).Name 'シート名
Else '引数のシート番号がなければ
  getSheetName = "なし!" 'そんなシートないよ
End If
End Function


変数の型を修正しました、バッチリですね。

↓Sheet1、Sheet2の2シート構成のブック↓
シートでFunction(○)

この関数は標準モジュールのFunctionプロシージャを利用したものです。
マクロを有効にしていないと使えません。

↓マクロを無効↓
シートでFunction(マクロ無効)
スポンサーサイト

コメント

コメントの投稿

管理者にだけ表示を許可  

トラックバック

http://likep.blog63.fc2.com/tb.php/97-723c35e8

 | HOME | 

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。