重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

EXCEL VBA初心者です。
すみません。基本的なことが分かりません。教えてください。
以下プロシージャがあった時に
戻り値を入れる変数にプロシージャ名を使うのは分かったのですが、
=の右側にある同じプロシージャ名ですが、
変数として使うことができるのでしょうか?

Function CountCcolor(range_data As range, criteria As range) As Long
Dim datax As range
Dim xcolor As Long
xcolor = criteria.Interior.ColorIndex
For Each datax In range_data
If datax.Interior.ColorIndex = xcolor Then
CountCcolor = CountCcolor + 1
End If
Next datax
End Functio

A 回答 (2件)

再帰との区別はカッコです。


' 再帰
Private Function F(ByVal n As Long) As Long
 If n = 0 Then F = 1 Else F = F(n - 1) * n
End Function
' G = 43
Private Function G() As Long
 G = 42
 G = G + 1 ' G = G() + 1 にすると無限再帰です
End Function
    • good
    • 0

>変数として使うことができるのでしょうか?


可能です。
単純に計算式で一発で結果がだせる場合には疑問を持たれないでしょうけれど、いろいろ順に処理をしないと結果が求められなかったりするような場合もありますので。

ご提示のケースでは、CountCcolor() As Longと宣言したところで暗黙の初期値が与えられることを利用していますが、以下のように明示的に設定しておいた方が分かり易いかも知れません。
Function CountCcolor(range_data As range, criteria As range) As Long
 Dim datax As range
 Dim xcolor As Long

 xcolor = criteria.Interior.ColorIndex
 CountCcolor = 0 ' ← 初期値として明示的に設定

 For Each datax In range_data
  If datax.Interior.ColorIndex = xcolor Then
   CountCcolor = CountCcolor + 1
  End If
 Next datax
End Function


あるいは、計算中は別の変数を用いておいて、結果を CountCcolorに代入するようにするとかでも良いです。
(以下の、変数cを省略したようなものと考えれば良いかも)
Function CountCcolor(range_data As range, criteria As range) As Long
 Dim datax As range
 Dim xcolor As Long
 Dim c As Long ' ← 計算用の一時変数

 xcolor = criteria.Interior.ColorIndex
 c = 0 ' ← 初期値として明示的に設定

 For Each datax In range_data
  If datax.Interior.ColorIndex = xcolor Then
   c = c + 1 ' ← CountCcolorではなくcを用いて計算
  End If
 Next datax

 CountCcolor = c ' ← 最終結果を関数値として代入
End Function
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!