2016-12-09 26 views
1

我想确定我的VBA脚本中的细胞内产生3个值的计算的最佳方法:在CSV特定细胞的VBA脚本计算文件

它脚本的当前格式:

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”中的数字,并将其放置在“TotalDisk”标题下的CSV文件中的正在进行的单元格。

这些值将由一列分隔的3个数字组成;例如:20,30,10。我想添加这3个数字(在本例中为60)的结果放在下一个单元格中。

需要在C-32中计算的原因 C-33是数据只能填入一个或另一个。因此,我也需要为C-43或C-44和C-54或C-55做同样的事情。

谢谢你的任何信息,您可以提供

+0

请给例如输入/参数此功能,以及**两个**期望*输出和*实际*输出的例子(以及这些不同之处的简要描述,或者你对它的具体错误/问题的简要描述) –

+0

@DavidZemens对我来说,创建它显然会更容易VBScript导出到CSV文件的Excel文档中的计算字段 - 但e那么,是否可以根据用逗号分隔的值在Excel中的字段中进行计算?单个单元格将包含数据:20,20,10,并且我只能看到基于单独单元格中存在的值完成的计算,即C4 + C5 + C6 =结果。不知道从哪里开始。 – NeedToKnowBasis22

回答

2
'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

+0

感谢您的回应 - 我正在尝试使用您提供的解决方案,但似乎并未将计算结果放在CSV文件的任何位置。当我运行它时,它不会返回错误。 TotalIt(范围)部分与正在导出的原始Excel工作表中的单元格或CSV文件本身中的单元格有关? CSV中需要计算的单元最终为L2,M2,N2 - 会导致输出不足吗?再次感谢您的帮助 – NeedToKnowBasis22

+0

我没有给你完整的解决方案,只是函数和如何从你的主代码调用它的例子。 –

+0

啊我看到了 - 我对VBA很新,并没有完全理解它是如何工作的以及如何格式化函数。我很抱歉误会。我会从代码中遗漏什么来完全应用它? – NeedToKnowBasis22