VBA CSV文件中特定单元格的脚本计算

VBA Script Calculation of Specific Cells in CSV File

我正在尝试确定在我的 VBA 脚本的一个单元格内生成 3 个值计算的最佳方法:

当前格式的脚本:

Function BuildValuesString(colIndex As String, rows As String) As String
    Dim val As Variant

    For Each val In Split(rows, ",")
        If Cells(val, colIndex) <> "" Then BuildValuesString = BuildValuesString & Cells(val, colIndex).Value & ","
    Next val
End Function
Function BuildNullStrings(numNullStrings As Long) As String
    Dim iNullStrings As Long

    For iNullStrings = 1 To numNullStrings
        BuildNullStrings = BuildNullStrings & "" & ","
    Next iNullStrings
End Function


Sub WriteCSVFile2()

    Dim My_filenumber As Integer
    Dim logSTR As String

    My_filenumber = FreeFile

    logSTR = logSTR & "Srv" & ","
    logSTR = logSTR & "E-mail" & ","
    logSTR = logSTR & "Env." & ","
    logSTR = logSTR & "Protect" & ","
    logSTR = logSTR & "DB" & ","
    logSTR = logSTR & "# VMs" & ","
    logSTR = logSTR & "Name" & ","
    logSTR = logSTR & "Cluster" & ","
    logSTR = logSTR & "VLAN" & ","
    logSTR = logSTR & "NumCPU" & ","
    logSTR = logSTR & "MemoryGB" & ","
    logSTR = logSTR & "C" & ","
    logSTR = logSTR & "D" & ","
    logSTR = logSTR & "App" & ","
    logSTR = logSTR & "TotalDisk" & ","
    logSTR = logSTR & "Datastore" & ","

    logSTR = logSTR & Chr(13)

    logSTR = logSTR & BuildValuesString("C", "18,19,20,21,22")
    logSTR = logSTR & BuildValuesString("C", "26,27,28,29,30,31,32,33")

    logSTR = logSTR & Chr(13)

    logSTR = logSTR & BuildValuesString("C", "18,19,20,21,22")
    logSTR = logSTR & BuildValuesString("C", "37,38,39,40,41,42,43,44")

    logSTR = logSTR & Chr(13)

    logSTR = logSTR & BuildValuesString("C", "18,19,20,21,22")
    logSTR = logSTR & BuildValuesString("C", "48,49,50,51,52,53,54,55")


Open "Z:\Requests(Test)\" & ThisWorkbook.Name & ".csv" For Append As #My_filenumber
    Print #My_filenumber, logSTR
Close #My_filenumber

End Sub

此 VBA 脚本正在将 Excel 工作表单元格中的数据导出到 CSV 文件中,我想让它也计算单元格 "C" 中存在的数字“32 " OR "C" "33" 并放置在 CSV 文件中 'TotalDisk' header 下的前一个单元格中。

这些值将是 3 个数字,由一列分隔;例如:20、30、10。我希望将这 3 个数字(在示例中为 60)相加的结果放在下一个单元格中。

之所以需要在C-32ORC-33中计算,是因为数据只会填入其中一个。因此,我还需要对单元格 C-43 OR C-44 和 C-54 OR C-55 做同样的事情。

感谢您提供的任何信息

'sum the comma-separated values in the first non-empty cell in rng
Function TotalIt(rng As Range)
    Dim c, arr, t, rv As Double, v
    For Each c In rng.Cells
        If Len(c.Value) > 0 Then
            arr = Split(c.Value, ",")
            For Each v In arr
                If IsNumeric(v) Then rv = rv + v
            Next v
            Exit For
        End If
    Next c
    TotalIt = rv
End Function

'usage (add at the appropriate places in your code)
logSTR = logSTR & TotalIt(Range("C32:C33"))

顺便说一句 VBA 有一个内置的 String() 函数,它和你的 BuildNullStrings

做同样的事情