忽略Excel工作表数据的CSV导出中的空白单元格

我正在尝试确定一种方法,用于忽略由Excel工作表数据产生的CSV文件上的空白单元格。

空白单元格是用户在一行或下一行中input的结果(两行不会被填入,但脚本中引用的标题需要保持不变)。 一行涉及到一个操作系统的磁盘需求,而下面的一行涉及另一个操作系统的磁盘需求(如果适用); 磁盘要求的格式仍然适用于当前格式的标题。

目前,当VBA代码应用于Excel工作表时,空白行中缺less的与第一个OS磁盘需求有关的数据通过input空白单元来“推动”下一行的信息。 我想find一种方法来让VBA代码“忽略”空白行,并将进行的行数据input到这个单元格中。 我正在使用的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&Cells(31,“C”)得到的数据,那么我想从logSTR = logSTR&Cells(32,“C”)得到数据。 “放在那个牢房里,而不是留下空白。 这将允许数据的格式(用逗号分隔的3个值)与Header11,Header12和Header13(而不是Header12,Header13和No Header)alignment。

 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