アプリ版:「スタンプのみでお礼する」機能のリリースについて

VSUMのユーザー定義関数にてMAXとMINを追加するには?

http://oshiete.goo.ne.jp/qa/1578916.html

上記の質問ページに記載されているユーザー定義関数にMAXとMINの
集計を追加をしたいのですが、どのように記述すれば良いのでしょうか?

エクセルのVBAを勉強し始めたのですが、利用したいのが今月末の提出物なので、
記述が出来ずに非常に困ってます。

よろしくお願いします。

A 回答 (1件)

VSUM の作者です。

約5年前で、少し、書き方は変わりましたが、他も直そうとしましたが、ほとんど変わっていません。

使用法は、 'VSUM(集計方法,範囲,ゼロオプション)
で、集計方法は、
1 は AVERAGE
2 は COUNT
3 は COUNTa
*4   MAX
*5   MIN
9 は SUM

4,5 は、Zオプションを入れた場合(Trueまたは 1以上) で、すべて0の場合は、エラーを出します。

=VSUM(5,A1:A20,1)
変更部分だけを入れました。現在、サイトの変更で縮小し、コードが全部入りません。
注意:Function の戻り値は、Variant 型に変わりました。ただし現在の私は、Sumという変数を使いません。
'-------------------------------------------
Function VSUM(集計方法 As Integer, 範囲 As Range, Optional ゼロオプション As Boolean) As Variant
  'VSUM(集計方法,範囲,ゼロオプション)
  '非表示になっている行は集計しない
  Dim c As Variant
  Dim i As Long
  Dim dV As Double
  Dim Sum As Double
  Dim Z As Boolean
  Dim flg As Boolean 'ゼロオプションの時に、すべて0の場合にエラー
  If ゼロオプション = True Then Z = True
''  Select Case 集計方法

'省略
     'Next
     'VSUM = i
'-------------------------------------------
    Case 4 'MAX
      dV = -10 ^ 15
      For Each c In 範囲
        If c.EntireRow.Hidden = False Then
          If Z = True And VarType(c.Value) = vbDouble Then
            If c.Value > dV And c.Value <> 0 Then
              dV = c.Value
              flg = True
            End If
          Else
            If c.Value > dV And VarType(c.Value) = vbDouble Then
              dV = c.Value
            End If
          End If
        End If
      Next
      If flg Or Z = False Then
        VSUM = dV
      Else
        VSUM = CVErr(xlErrNull)
      End If
    Case 5 'MIN
      dV = 10 ^ 15
      For Each c In 範囲
        If c.EntireRow.Hidden = False Then
          If Z = True And VarType(c.Value) = vbDouble Then
           If dV > c.Value And c.Value <> 0 Then
            dV = c.Value
            flg = True
           End If
          Else
          If dV > c.Value And VarType(c.Value) = vbDouble Then
            dV = c.Value
           End If
          End If
        End If
      Next
      If flg Or Z = False Then
       VSUM = dV
      Else
       VSUM = CVErr(xlErrNull)
      End If
'-------------------------------------------
   ''Case 9 '合計
' 省略
      VSUM = dSum
  End Select
End Function
    • good
    • 0
この回答へのお礼

ご返信ありがとうございます。早速利用させていただきました。

時間がある時にでも、自分なりに頑張って解読と理解をしてみようと思います。
ありがとうございました。

お礼日時:2010/04/24 01:03

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