
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件)
- 最新から表示
- 回答順に表示

No.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
No.1
- 回答日時:
>変数として使うことができるのでしょうか?
可能です。
単純に計算式で一発で結果がだせる場合には疑問を持たれないでしょうけれど、いろいろ順に処理をしないと結果が求められなかったりするような場合もありますので。
ご提示のケースでは、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
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
stable diffusionのエラー
-
Rの解析で困っています(超初心...
-
ポインター引数の関数でコンパ...
-
C言語でのLinuxとwindows共通の...
-
int型(2バイト)データの分割
-
c言語 Bitについて
-
データの値の近いものをグルー...
-
C言語の構造体にてバブルソート...
-
sort関数でひらがなとカタカナ...
-
c言語 配列から数字だけをint型...
-
プロシージャ名の変数にカウン...
-
UTF-8で5~6バイトになる文字コ...
-
ピクセル,dpiから容量(バイト...
-
全角半角を調べるライブラリ関...
-
Excelで、HTMLタグだけを削除す...
-
10Mバイトて文字数に すると何...
-
64bit対応
-
html→aspxへのタグ変換方法
-
Excel 1セル当りの文字数が2...
-
DataGridViewの特定列に入力さ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
printfの%eで指数部分の桁数を...
-
stable diffusionのエラー
-
【Excel VBA】10進数を2進数に...
-
ポインター引数の関数でコンパ...
-
matlabでのRRI検出
-
C#でのswitch文
-
int型(2バイト)データの分割
-
C言語 ファイル内のデータと入...
-
'dataType' 引数を Null にする...
-
RegQueryValueExでの2バイト文字
-
iアプリ jamファイルの動的な出力
-
[error] [client ---- ] Argument
-
EOM間にperl文を作成したい
-
平滑化フィルタ
-
任意な項目のソート
-
変数の書き方
-
Cプログラムがどうしても動きま...
-
hiddenを使ったセッション
-
機械受注は?
-
チェックボックスの値だけが受...
おすすめ情報