![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
すみません。
動作確認しないで投稿してしまいました。引数に単一セルを渡してもダメだし、ゼロ除算のトラップもダメでした。
#3 の myAverage 関数を差し替えさせて下さい。
' // 0や空白を平均値に影響させない Average 関数
Public Function myAverage(ParamArray Args() As Variant) As Double
Dim lCount As Long
Dim dTotal As Double
Dim arg As Variant
Dim v As Variant
Dim vTmp As Variant
For Each arg In Args
vTmp = arg
If Not IsArray(vTmp) Then
vTmp = Array(arg)
End If
For Each v In vTmp
If IsNumeric(v) And v <> 0 Then
dTotal = dTotal + CDbl(v)
lCount = lCount + 1
End If
Next v
Next arg
If lCount > 0 Then
myAverage = dTotal / lCount
Else
myAverage = 0
End If
End Function
No.3
- 回答日時:
> 0や空白の場合、平均値に影響させたくありません。
平均値を求めるならゼロ除算チェックがあった方が良いのでは?
下記は、引数で渡されたデータの内、平均値計算に係る該当データが存在
しなければ 0 を返すようにしてます。エラーを返してもいいと思いますが、
この辺は仕様の問題でしょう。
ワークシートでも使える関数として書いてみました。
Sub SampleProc()
' // Test1
Dim a(6) As String ' // Variant
a(0) = ""
a(1) = "Test"
a(2) = 1
a(3) = 2
a(4) = 6
a(5) = 0
a(6) = 1
MsgBox myAverage(a)
' // Test2
MsgBox myAverage(Range("A1:A10"))
End Sub
' // 0や空白を平均値に影響させない Average 関数
Public Function myAverage(ParamArray Args() As Variant) As Double
Dim lCount As Long
Dim dTotal As Double
Dim arg As Variant
Dim v As Variant
Dim vTmp As Variant
For Each arg In Args
If TypeOf arg Is Range Then
vTmp = arg.Value
ElseIf IsArray(arg) Then
vTmp = arg
Else
vTmp = Array(arg)
End If
For Each v In vTmp
If IsNumeric(v) And v <> 0 Then
dTotal = dTotal + CDbl(v)
lCount = lCount + 1
End If
Next v
Next arg
myAverage = IIf(lCount > 0, dTotal / lCount, 0)
End Function
No.2
- 回答日時:
こんにちは。
>powには、文字列が入ったり、0や空白だったりもします。
平均値の計算自体を、マクロで作るのが早いと思います。
Avarage の引数は、パラメータ配列で、配列ではありません。
Excelだったら、配列に入れないで、そのまま、Range を、ワークシート関数で計算させたほうが速いです。
temp = myFunction(pow)
'----------------------------------
Function myFunction(ParamArray arg() As Variant)
Dim cnt As Double
Dim mTotal As Currency
Dim i As Long, j As Long
Dim v As Variant
For Each v In arg()
If IsArray(v) Then
For i = LBound(v) To UBound(v)
If IsNumeric(v(i)) And v(i) <> "" And v(i) <> 0 Then
mTotal = mTotal + v(i)
j = j + 1
End If
Next i
Else
If IsNumeric(v) Then
mTotal = mTotal + v
j = j + 1
End If
End If
Next v
myFunction = mTotal / j
End Function
No.1
- 回答日時:
VBAのコードは、後で見た時に「何をやってるか」分かるほうがいいです。
ウルトラCみたいな解決方法はあると思いますが、むしろ、pow内部のデータを
明示的にチェックしたほうが正解なんじゃないかと思います。例えば
FOR I=0 TO 23
IF POW(I)<>"" THEN
X_AVG=X_AVG+POW(I)
X_CNT=X_CNT+1
ENDIF
NEXT
temp=X_AVG/X_CNT
みたいに、平均値計算の基本に戻ってコードを書き出しちゃったほうが
後で分かりやすくて良いんじゃないかと。VBA内のコードなら、多少長く
なっても演算時間は知れたものですし。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA 改行コードの取り方 1 2022/03/22 14:14
- Visual Basic(VBA) Vbaで数式をポーランド記法に変換するコードを作って実行しようとするとフリーズします。 1 2022/05/24 17:53
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
- Visual Basic(VBA) Excel VBA キーワードから列を取得して、さらに空欄行を非表示にする 3 2022/10/21 22:49
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Excel(エクセル) VBA 特定の列に入っているテキストをコピペ 2 2023/06/14 11:24
- Excel(エクセル) このコードに追記事項の仕方を教えて下さい。 以下のコード内容に出てくる。セルH3が空白の場合、エラー 4 2023/08/03 00:22
- Visual Basic(VBA) VBAでのMATCH関数 3 2022/10/17 19:06
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Excel(エクセル) エクセルVBA、ファイル名をセルの値で保存の方法を教えてください。 おそれいります。こちらで数々のエ 6 2023/06/30 22:17
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
LINEのこの空白ってどんな意味...
-
INDEXとMATCH関数で#N/Aが出る...
-
空白行があると #DIV/0なる?...
-
Word ○(まる)で表示される空白
-
Wordの差し込み印刷で空白行が...
-
Excel計算式が入ってるセルを空...
-
「 - 」と「 _ 」 の違い
-
bashでの空白と空文字の判断
-
EXCELで#DIV/!
-
空白セルを作りたい
-
条件クリアの式
-
PowerPointの表内のカンマ
-
エクセル 0:00 の時間をカウン...
-
Excelのテーブル上のセルの保護...
-
EXCELでタイトル行と一番下の行...
-
エクセルで行の一番上にセルに...
-
エクセルで「-3E+06」と...
-
従業員増減対応で当番種類の増...
-
EXCEL 連動したドロップダウン...
-
【VBA】PDF出力に任意のファイ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
LINEのこの空白ってどんな意味...
-
Wordの差し込み印刷で空白行が...
-
INDEXとMATCH関数で#N/Aが出る...
-
Word ○(まる)で表示される空白
-
Excel計算式が入ってるセルを空...
-
bashでの空白と空文字の判断
-
エクセルでフッターに空白を入れる
-
「 - 」と「 _ 」 の違い
-
VBA ""が認識されないのはなぜ...
-
アクセスのクエリで空白を0と...
-
マクロ 空白セルまで繰り返す
-
エクセルで1つでも×か空白があ...
-
空白行があると #DIV/0なる?...
-
IF関数について
-
Excel関数で90%から110%の間を◎...
-
メモ帳のスクロールバーを変更...
-
latexで、行の先頭に空白を入れ...
-
仕事で使う数式を自分で作成で...
-
Wordの文字数カウント機能のス...
-
リンク貼り付けで空白セルが0表...
おすすめ情報