【问题标题】:VBA Script Calculation of Specific Cells in CSV FileCSV文件中特定单元格的VBA脚本计算
【发布时间】:2017-04-25 01:07:14
【问题描述】:

我正在尝试确定在我的 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”或“C”“33”中存在的数字并放置在CSV 文件中“TotalDisk”标题下的后续单元格。

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

C-32 中需要计算的原因OR C-33 是数据只会填其中一个。因此,我还需要对单元格 C-43 OR C-44 和 C-54 OR C-55 执行相同的操作。

感谢您提供的任何信息

【问题讨论】:

  • 请给出该函数的输入/参数示例,以及both desired 输出和actual 输出示例(并简要说明它们有何不同,或您遇到的任何特定错误/问题)
  • @DavidZemens 在 VBScript 导出到 CSV 文件的 Excel 文档中创建计算字段显然对我来说更容易 - 但即便如此,是否可以在字段中进行计算在 Excel 中基于用逗号分隔的值?单个单元格将包含数据:20、20、10,我只看到基于单独单元格中存在的值进行的计算,即 C4+C5+C6= 结果。不知道从哪里开始。

标签: vba excel csv export-to-csv


【解决方案1】:
'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"))

BTW VBA 有一个内置的 String() 函数,它的作用与您的 BuildNullStrings 相同

【讨论】:

  • 感谢您的回复 - 我正在尝试使用您提供的解决方案,但它似乎没有将计算放在 CSV 文件中的任何位置。当我运行它时它也不会返回错误。 TotalIt(范围)部分是否与正在导出的原始 Excel 工作表中的单元格或 CSV 文件本身中的单元格相关? CSV 中需要计算的单元格最终是 L2、M2、N2 - 这会导致输出不足吗?再次感谢您的帮助
  • 我没有给你完整的解决方案,只是函数和如何从你的主代码中调用它的示例。
  • 啊,我明白了 - 我对 VBA 很陌生,并且不完全了解它的工作原理以及函数的格式。我为造成的误解道歉。要完全应用它,我会从代码中遗漏什么?
  • 见上文:只需将该行添加到代码的相关部分即可。顺便说一句,你确定你的BuildValuesString 正在做你想做的事吗?如果其中一个输入单元格为空,它将完全省略该字段(甚至不写逗号),因此之后的行将向左移动一个位置...
  • 是的,我有那个,所以我不需要添加额外的标题字段来处理该数据,如果我填充了另一个单元格。这些单元格特别是处理与一个单元格相关的数据操作系统或另一个以及标题与一个或另一个的磁盘大小有关。非常感谢您对代码的帮助,计算工作完美,我现在得到了想要的结果。我试图将 tot = TotalIt (Range("C32:C33")) 添加到该部分但没有任何运气 - 这可以清除所有内容,非常感谢您的帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-22
  • 2022-01-21
  • 2019-05-07
  • 1970-01-01
相关资源
最近更新 更多