2016-11-14 2 views
1

Excel 워크 시트의 데이터로 인해 CSV 파일에서 빈 셀을 '무시'하는 방법을 결정하려고합니다.Excel 워크 시트 데이터의 CSV 내보내기에서 공백 셀 무시

공백 셀은 한 행 또는 아래 행에 사용자가 입력 한 결과입니다 (두 행은 결코 채워지지 않지만 스크립트에서 참조되는 헤더는 동일하게 유지해야합니다). 하나의 행은 하나의 OS의 디스크 요구 사항과 관련이 있으며, 그 아래 행은 적용 가능한 경우 대체 OS의 디스크 요구 사항과 관련됩니다. 디스크 요구 사항의 형식은 여전히 ​​현재 형식의 헤더에 적용됩니다.

현재 VBA 코드가 Excel 워크 시트에 적용될 때 첫 번째 OS 디스크 요구 사항과 관련된 빈 행의 누락 된 데이터는 빈 셀을 입력하여 다음 행의 정보를 '푸시 (push)'합니다. 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 제외)과 일렬로 정렬됩니다. 예를 들어,

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 & 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 
+0

세포 (52, "C") <> ""then logSTR = logSTR & Cells (52, "C"). Value & "," – Absinthe

답변

1

당신은 다음과 같은 도우미 함수를 사용할 수

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 

있도록 : 그냥 경우 예를 들어 공백을 걸러 IF 문을 사용

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 
+0

답장을 보내 주셔서 감사합니다. 귀하의 제안을 적용하려고하지만 VBA에 매우 익숙하지 않습니다. 처음에 언급 한 '헬퍼 (Helpers)'를 넣을 곳을 선택하십시오. 그것들은 VBA 코드 자체 내에서 '분리'되어 있습니까? 당신의 단축 된 예를 내려 놓았지만 도우미 기능은 스스로를 분리시키는 것처럼 보입니다. 이것은 정상입니까? – NeedToKnowBasis22

+0

'Private'으로 선언되지 않았으므로 프로젝트의 모든 모듈에 넣을 수 있습니다. 그래서'SuB WriteCSVFile2()'가 – user3598756

+0

인 동일한 모듈에 넣을 수 있습니다. 알았습니다. 시도해 보았습니다. "컴파일 오류 : Sub 또는 함수가 정의되지 않았습니다."그리고 "BuildValuesString"이 강조 표시됩니다. logSTR = logSTR & BuildValuesString ("C", "18,19,2021222627282930,31,32") 라인. 나는 뭔가 추가하는 것을 놓쳤는가? – NeedToKnowBasis22

관련 문제