1

もっと一般化したい機能があります。しかし、関数の最後の部分を関数への入力として機能させることができません。

関数への入力としてテーブルを使用するにはどうすればよいですか? テーブル名を分割して入力として使用したいので、他のコンテキストで関数を使用できます。

Function GetTotalHours("Tablename?" As ??, columnNumber As Integer) As Integer

    For Each Row In [Tablename].Rows

        getTotalHours = getTotalHours + DateTime.Hour(Row.Columns(columnNumber).Value)

    Next

End Function

どうすれば文字列でこれを作ることができますか?

4

2 に答える 2

2

テーブルは名前付き範囲として存在し、 でこれらに直接アクセスできます.Range(name)

Function GetTotalHours(tableName As String, columnNumber As Integer) As Integer
    Dim r As Range
    Dim c As Range

    Set r = ActiveSheet.Range(tableName).Columns(columnNumber)
    For Each c In r.Cells
        GetTotalHours = GetTotalHours + DateTime.Hour(c.Value)
    Next
End Function

また、番号の代わりに見出しを渡すこともできます。

Function GetTotalHoursByHeading(tableName As String, columnName As String) As Integer
    Dim r As Range
    Dim c As Range

    Set r = ActiveSheet.Range(tableName & "[" & columnName & "]")
    For Each c In r.Cells
        GetTotalHoursByHeading = GetTotalHoursByHeading + DateTime.Hour(c.Value)
    Next
End Function
于 2013-10-20T11:05:00.503 に答える