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

CSV文件中特定单元格的VBA脚本计算,vba,excel,csv,export-to-csv,Vba,Excel,Csv,Export To Csv,我正在尝试确定在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 = Build

我正在尝试确定在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
函数BuildValuesString(colIndex作为字符串,行作为字符串)作为字符串
Dim-val作为变体
对于拆分中的每个val(行,“,”)
如果单元格(val,colIndex)“,则BuildValuesString=BuildValuesString&Cells(val,colIndex)。Value&”
下一个val
端函数
函数BuildNullStrings(numNullStrings长度)作为字符串
暗淡的细绳和长的一样
对于iNullStrings=1到numNullStrings
BuildNullStrings=BuildNullStrings&“”&“
下一个字符串
端函数
子写入csvfile2()
将我的\u文件号设置为整数
Dim logSTR作为字符串
My_filenumber=FreeFile
logSTR=logSTR&“Srv”&“
logSTR=logSTR&“电子邮件”&“
logSTR=logSTR&“Env.”&“
logSTR=logSTR&“保护”&“
logSTR=logSTR&“DB”&”
logSTR=logSTR&“VMs”&“
logSTR=logSTR&“Name”&“
logSTR=logSTR&“集群”&“
logSTR=logSTR&“VLAN”&“
logSTR=logSTR&“NumCPU”&“
logSTR=logSTR&“MemoryGB”&“
logSTR=logSTR&“C”&“C”
logSTR=logSTR&“D”&“
logSTR=logSTR&“应用程序”&”
logSTR=logSTR&“TotalDisk”&“
logSTR=logSTR&“数据存储”&“
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”)
打开“Z:\Requests(Test)\”和ThisWorkbook.Name&“.csv”作为“我的文件号”追加
打印#我的文件号,logSTR
关闭#我的文件号
端接头
此VBA脚本正在将Excel表格单元格中的数据导出到CSV文件中,我希望它也能计算单元格“C”“32”或“C”“33”中的数字,并将其放在CSV文件中“TotalDisk”标题下的下一个单元格中

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

需要在C-32C-33中进行计算的原因是数据将只填写其中一个。因此,我也需要对C-43或C-44以及C-54或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

功能相同。请给出该函数的输入/参数示例,以及所需输出和实际输出的示例(并简要说明它们之间的区别,或您与之相关的任何特定错误/问题)@DavidZemens显然,在Excel文档中创建VBScript导出到CSV文件的计算字段会更容易,但即使如此,是否可以基于逗号分隔的值在Excel中的字段中进行计算?单个单元格将包含数据:20、20、10,我只看到根据单独单元格中的值进行的计算,即C4+C5+C6=结果。不确定从何处开始。感谢您的回复-我正在尝试使用您提供的解决方案,但它似乎没有将计算放在CSV文件中的任何位置。当我运行它时,它也不会返回错误。TotalIt(范围)部分是与要导出的原始Excel工作表中的单元格相关还是与CSV文件本身中的单元格相关?CSV中需要计算的单元格最终为L2、M2、N2-这会导致输出不足吗?再次感谢您的帮助我没有给您完整的解决方案,只是函数和如何从主代码调用它的示例。啊,我明白了-我对VBA非常陌生,不完全了解它的工作原理和函数的格式。我为误会道歉。要完全应用这一点,代码中会缺少什么?请参见上文:只需将该行添加到代码的相关部分即可。顺便问一句,你确定你的
BuildValuesString
正在做你想做的事情吗?如果其中一个输入单元格是空的,它会完全忽略该字段(甚至不写逗号),因此后面的行将向左移动一个位置…是的,我在那里有它,所以如果我填充了另一个单元格,我不需要添加额外的头字段来处理该数据。这些单元尤其处理与一个或另一个操作系统相关的数据,而头部则与一个或另一个操作系统的磁盘大小相关。非常感谢您对代码的帮助,计算工作非常完美,现在我已经得到了想要的结果。我试图将tot=TotalIt(范围(“C32:C33”)添加到该部分,但没有任何运气-这将清除所有问题,我非常感谢您的帮助