忽略空白单元格CSV导出Excel工作表数据
我想确定一种方法,用于'忽略'由Excel工作表数据导致的CSV文件上的空白单元格。忽略空白单元格CSV导出Excel工作表数据
空白单元格将是用户在一行或下一行中输入的结果(但是两行将永远不会被填充,但脚本中引用的标头需要保持不变)。一行涉及到一个操作系统的磁盘需求,而下面的一行涉及另一个操作系统的磁盘需求(如果适用);磁盘要求的格式仍然适用于当前格式的标题。
当前VBA代码应用于Excel工作表时,空白行中与第一个OS磁盘需求相关的缺失数据通过输入空白单元“推送”下一行的信息。我想找到一种方法让VBA代码“忽略”空白行,并将前进行的数据输入到该单元格中。我使用的VBA代码:
Sub WriteCSVFile()
Dim My_filenumber As Integer
Dim logSTR As String
My_filenumber = FreeFile
logSTR = logSTR & "Header1" & " , "
logSTR = logSTR & "Header2" & " , "
logSTR = logSTR & "Header3" & " , "
logSTR = logSTR & "Header4" & " , "
logSTR = logSTR & "Header5" & " , "
logSTR = logSTR & "Header6" & " , "
logSTR = logSTR & "Header7" & " , "
logSTR = logSTR & "Header8" & " , "
logSTR = logSTR & "Header9" & " , "
logSTR = logSTR & "Header10" & " , "
logSTR = logSTR & "Header11" & " , "
logSTR = logSTR & "Header12" & " , "
logSTR = logSTR & "Header13" & " , "
logSTR = logSTR & Chr(13)
logSTR = logSTR & Cells(18, "C").Value & " , "
logSTR = logSTR & Cells(19, "C").Value & " , "
logSTR = logSTR & Cells(20, "C").Value & " , "
logSTR = logSTR & Cells(21, "C").Value & " , "
logSTR = logSTR & Cells(22, "C").Value & " , "
logSTR = logSTR & Cells(26, "C").Value & " , "
logSTR = logSTR & Cells(27, "C").Value & " , "
logSTR = logSTR & Cells(28, "C").Value & " , "
logSTR = logSTR & Cells(29, "C").Value & " , "
logSTR = logSTR & Cells(30, "C").Value & " , "
logSTR = logSTR & Cells(31, "C").Value & " , "
logSTR = logSTR & Cells(32, "C").Value & " , "
如果没有数据从logSTR = logSTR &将细胞(31, “C”)值& “” 我想有数据从logSTR = logSTR所得。 &单元格(32,“C”)。值&“,”放置在该单元格中,而不是留下空白。这将允许数据的格式(用逗号分隔的3个值)与Header11,Header12和Header13(而不是Header12,Header13和No Header)对齐。
logSTR = logSTR & Chr(13)
logSTR = logSTR & "" & " , "
logSTR = logSTR & "" & " , "
logSTR = logSTR & "" & " , "
logSTR = logSTR & "" & " , "
logSTR = logSTR & "" & " , "
logSTR = logSTR & Cells(36, "C").Value & " , "
logSTR = logSTR & Cells(37, "C").Value & " , "
logSTR = logSTR & Cells(38, "C").Value & " , "
logSTR = logSTR & Cells(39, "C").Value & " , "
logSTR = logSTR & Cells(40, "C").Value & " , "
logSTR = logSTR & Cells(41, "C").Value & " , "
logSTR = logSTR & Cells(42, "C").Value & " , "
logSTR = logSTR & Chr(13)
logSTR = logSTR & "" & " , "
logSTR = logSTR & "" & " , "
logSTR = logSTR & "" & " , "
logSTR = logSTR & "" & " , "
logSTR = logSTR & "" & " , "
logSTR = logSTR & Cells(46, "C").Value & " , "
logSTR = logSTR & Cells(47, "C").Value & " , "
logSTR = logSTR & Cells(48, "C").Value & " , "
logSTR = logSTR & Cells(49, "C").Value & " , "
logSTR = logSTR & Cells(50, "C").Value & " , "
logSTR = logSTR & Cells(51, "C").Value & " , "
logSTR = logSTR & Cells(52, "C").Value & " , "
Open "Z:\SHARED DRIVE\RequestDirectory\" & ThisWorkbook.Name & ".csv" For Append As #My_filenumber
Print #My_filenumber, logSTR
Close #My_filenumber
End Sub
像下面,你可以使用一个辅助功能:
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
,并利用它在你的主代码中,例如:
logSTR = logSTR & Cells(18, "C").Value & " , "
logSTR = logSTR & Cells(19, "C").Value & " , "
logSTR = logSTR & Cells(20, "C").Value & " , "
logSTR = logSTR & Cells(21, "C").Value & " , "
logSTR = logSTR & Cells(22, "C").Value & " , "
logSTR = logSTR & Cells(26, "C").Value & " , "
logSTR = logSTR & Cells(27, "C").Value & " , "
logSTR = logSTR & Cells(28, "C").Value & " , "
logSTR = logSTR & Cells(29, "C").Value & " , "
logSTR = logSTR & Cells(30, "C").Value & " , "
logSTR = logSTR & Cells(31, "C").Value & " , "
logSTR = logSTR & Cells(32, "C").Value & " , "
将成为:
logSTR = logSTR & BuildValuesString("C", "18,19,20,21,22,26,27,28,29,30,31,32")
,并以同样的方式,你可以使用其他两个帮手:
Function BuildNullStrings(numNullStrings As Long) As String
Dim iNullStrings As Long
For iNullStrings = 1 To numNullStrings
BuildNullStrings = BuildNullStrings & "" & " , "
Next iNullStrings
End Function
Function BuildHeadersString(maxHeader As Long) As String
Dim iHeader As Long
For iHeader = 1 To maxHeader
BuildHeadersString = BuildHeadersString & "Header" & iHeader & " , "
Next iHeader
End Function
让你的整个代码将向下缩短:
Sub WriteCSVFile2()
Dim My_filenumber As Integer
Dim logSTR As String
My_filenumber = FreeFile
logSTR = logSTR & BuildHeadersString(13)
logSTR = logSTR & Chr(13)
logSTR = logSTR & BuildValuesString("C", "18,19,20,21,22,26,27,28,29,30,31,32")
logSTR = logSTR & Chr(13)
logSTR = logSTR & BuildNullStrings(5)
logSTR = logSTR & BuildValuesString("C", "36,37,38,39,40,41,42")
logSTR = logSTR & Chr(13)
logSTR = logSTR & BuildNullStrings(5)
logSTR = logSTR & BuildValuesString("C", "46,47,48,49,50,51,52")
Open "Z:\SHARED DRIVE\RequestDirectory\" & ThisWorkbook.Name & ".csv" For Append As #My_filenumber
Print #My_filenumber, logSTR
Close #My_filenumber
End Sub
非常感谢您的回复 - 我正在尝试应用您的建议,但我对VBA很新,而且我似乎无法形象在哪里把你在开头提到的'助手'放在哪里。这些意味着在VBA代码本身中“分离”吗?我有你的缩短例子,但助手函数似乎分离自己,这是正常的吗? – NeedToKnowBasis22
你可以把它们放在你的项目的任何模块中,因为它们没有被声明为'Private'。所以你也可以把它们放在'SuB WriteCSVFile2()'为 – user3598756
的同一个模块中。好吧,我试了一下,出现以下错误“编译错误:Sub或Function not defined”,它突出显示了“BuildValuesString”on logSTR = logSTR&BuildValuesString(“C”,“18,19,20,21,22,26,27,28,29,30,31,32”)行。我错过了添加什么吗? – NeedToKnowBasis22
只需使用IF语句淘汰例如,如果空白单元格(52,“C”) “”然后logSTR = logSTR&Cells(52,“C”)。Value&“,” – Absinthe