728x90

현재 시트 Text File로 내보내기


현재(활성화된) 엑셀 시트를 구분자(deLimiter)로 구분하여 텍스트 파일로 내보내는 VBA code 입니다.


Sub ActiveSheet_TextExport()
' Export Each Sheet As Text File
   Dim rng As Range
   Dim iRow As Long, iCol As Integer
   Dim sTxt As String, sPath As String
   Dim ff As Integer

   ff = FreeFile
   ' 파일을 다루려면 파일 핸들을 얻어야 한다.
   ' 파일핸들은 파일번호라고도 하는데, 운영체제에서 프로그램이 파일을 구분할 수 있도록 만든
   ' 고유의 식별번호로 중복되지 않는 정수형 숫자이다.

    sPath = ThisWorkbook.Path & "\"
    ' 파일의 경로
    ' Workbook 개체 : 엑셀 문서 도는 엑셀 파일을 지칭한다.
    ' Worksheet 개체 : 엑셀 시트를 말한다.
    ' Range 개체 : 엑셀의 셀 또는 셀 집합(범위)를 말한다.

    ' FilePath = Application.GetSaveAsFilename(filefilter:="Text Files (*.txt),*.txt", Title:="저장")
    ' GetSaveAsFilename 메서드를 사용하여 사용자가 원하는 경로에 이름을 지정하여 저장할 수 있음.
    ' 내보내기 파일명을 하나만 지정하는 경우에는 이렇게 지정하면 됨

    Open sPath & ActiveSheet.Name & ".txt" For Output As #ff
     ' 파일번호를 얻은 다음에는 파일을 열어야 한다. 파일을 열려면 open문을 사용한다.
     ' Open pathname For mode As [#]filenumber
     ' pathname은 파일의 전체 경로 및 이름을 지정하는 문자열이다.
     ' mode는 Input(읽기용도), Output(쓰기용도), Append(추기기록용), Binary(이진파일용)
     ' filenumber는 1에서 511 사이에 있는 유효한 파일 번호로 FreeFile 함수로 사용 가능한 파일 번호를 얻는다.

     ' Save 대화상자를 설정하여 열 경우에는 ....
     ' If Directory = False Then Exit Sub '(← Save 대화상자에서 취소를 누를 경우
     ' Open FilePath For Output As #ff '← 파일을 연다. 파일의 번호는 #ff

    Set rng = ActiveSheet.UsedRange

    deLimiter = ";"     '// 구분자 수정해서 사용하세요

    For iRow = 1 To rng.Rows.Count  '// 1행부터 마지막 행까지
        For iCol = 1 To rng.Columns.Count  '// 1열부터 오른쪽 최대 열까지
            sTxt = sTxt & ActiveSheet.Cells(iRow, iCol).Value & deLimiter
        Next iCol
        Print #ff, Left(sTxt, Len(sTxt) - 1)
         ' 파일에 데이터를 쓰기 위해서는 Print # 문을 사용한다.
         ' Print #filenumber, output
         ' Line Input # 문으로 읽어 온 데이터는 일반적으로 Print #을 사용하여 파일을 저장
         ' Write #filenumber, outputlist
         ' Print#과 달리 출력하는 데이터의 형식에 맞추어 파일에 기록한다.

       sTxt = vbNullString
    Next iRow
    Close #ff   '// 작업을 마치고 파일을 닫는다

End Sub


필요하신 분은 파일 받아서 활용하세요.


TextExport.vbs


csv_to_textfle.vbs


Sub CSVFile_Export()
    Dim fPath As String, fName As String
    Dim i, r, n As Long
    Dim T, deLimiter As String
    Dim FN As Integer
   
    fName = "filename_" & Format(Date, "yyyy-mm-dd") & ".csv"
    fPath = ThisWorkbook.Path + "\"

    deLimiter = ";"     '// 구분자 (파일 읽어들이는 곳에서 구분자로 사용)
    FN = FreeFile
   
    Open fPath + fName For Output As #FN
        With ActiveSheet
            For r = 5 To .Cells(.Rows.Count, "A").End(3).Row  '// 5행부터 마지막 행까지
                T = vbNullString
                For n = 1 To 11     '// 1열부터 11열까지
                    If Not IsEmpty(.Cells(r, 1)) Then     '// 열에 값이 있는 행만 내보내기
                        T = T & .Cells(r, n) & deLimiter
                    End If
                Next n
                Do While Right(T, 1) = deLimiter
                    T = Left(T, Len(T) - 1)
                Loop
                If InStr(T, deLimiter) Then Print #FN, T
                i = i + 1
            Next r
        End With
    Close #FN   '// 작업을 마치고 파일을 닫는다
    MsgBox i & "개 내보내기 완료", , Caption
End Sub


728x90
블로그 이미지

Link2Me

,