
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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 動きっぱなしです。止め方とプロシージャの間違いを教えて下さい! 5 2022/08/15 23:08
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- Visual Basic(VBA) VBAが止まります。 3 2022/08/31 14:09
- Excel(エクセル) エクセルで書式設定とフィルタの組み合わせでうまく行かないのですが 4 2022/10/07 10:02
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
- Visual Basic(VBA) 稀に1円合いません? Sheet1から金額と個数を貼り付ける下記コードで、金額を切り上げるコードを何 3 2022/09/05 15:11
- Visual Basic(VBA) VBAが止まります。 1 2022/09/02 14:51
- Excel(エクセル) VBAで組み合わせ算出やCOUNTIFSの処理を高速化したいです。 4 2022/04/07 02:38
- Excel(エクセル) B列に文字がはいったらA列に数字が入るマクロードを完成させたい 4 2023/04/21 01:58
- Excel(エクセル) excel2013 色付きセルの値合計 3 2023/02/28 11:48
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
sort関数でひらがなとカタカナ...
-
int型(2バイト)データの分割
-
Perlでのテキスト変換方法に関して
-
C言語でPBYTE型からDOUBLE型へ変換
-
RegQueryValueExでの2バイト文字
-
構造体のソートの方法について...
-
マクロ登録したピボットが重い...
-
fgets, sscanf, バッファ、スト...
-
aliasesファイルを検索したいの...
-
値によって組み分けを作成する...
-
xcopyを用いて、別ドライブにコ...
-
HKEY_CLASSES_ROOT\\.avi
-
画像処理のチェーンコード
-
Excel VBA グラフ作成のとき...
-
CSVファイルの行と列のセルって...
-
perlでくじ引きプログラムを作...
-
System.Collections.ArrayList ...
-
C++ multipart/form-data f
-
C言語の勉強しています。すみま...
-
C言語 平均を求めるプログラム
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
stable diffusionのエラー
-
エクセルVBA:日付データの変換...
-
【Excel VBA】10進数を2進数に...
-
int型(2バイト)データの分割
-
Excel VBA グラフ作成のとき...
-
C#でのswitch文
-
'dataType' 引数を Null にする...
-
linuxのシェルでファイル名に先...
-
printfの%eで指数部分の桁数を...
-
ポインター引数の関数でコンパ...
-
CreateProcessでの環境変数の設...
-
C言語でのLinuxとwindows共通の...
-
C言語でPBYTE型からDOUBLE型へ変換
-
pythonでDBのカラム名で取得し...
-
エクセルVBAで16の16乗を正確に...
-
FFTがうまくできない
-
ビットデータのチェック方法
-
参照渡しの速度について
-
POSTで配列のデータを渡す方法は?
-
PINVOKEで構造体配列をマーシャ...
おすすめ情報