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
做同样的事情
我正在尝试确定在我的 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