반응형

출처: http://m.blog.naver.com/rosa0189/60154415797


텍스트 파일 불러올 경우가 가끔 있으므로 미리 텍스트파일 불러오는 기본코드를 작성해 놓음.

intNo = 1 이라고 하면 모든 행을 불러오고, 1보다 클경우 intNo 숫자 만큼 행을 건너뛰면서 텍스트 파일을 불러온다. 

 

                
매크로 실행 전 (Sheet2는 비어 있는 상태임)           매크로 실행 후 결과 파일 (Sheet2)

매크로 실행 후 나타나는 파일 선택창 (가져오려는 텍스트파일을 선택하면 됨)
  

Option Explicit

Sub import_Text_With_Offset()                            '특정 행을 건너 뛰며 데이터 가져오기
    Dim strInput As String                                   '각 행을 읽어서 저장할 변수
    Dim cnt As Long                                          '카운터로 사용할 변수
    Dim strName As String                                  '읽어들일 파일이름 넣을 변수
    Dim r As Long                                             '행번호 늘려갈 변수
    Dim intNo As Integer                                     '몇번째 행마다 출력 할지 결정할 변수
   
    Application.ScreenUpdating = False               '화면 업데이트 (일시)중지
    Sheets(2).UsedRange.ClearContents             'Sheet2의 기존 데이터 삭제
    strName = Application.GetOpenFilename("텍스트파일,*.txt;*.csv;*.prn", _
        Title:="텍스트파일")                                   '파일을 열어서 파일명을 변수에 넣음
                                                     
    If strName = "False" Then                               '취소(Cancel) 선택 시
        MsgBox "취소(Cancel)하여 중단합니다.", 64, "파일선택 오류"  '오류메시지 출력
        Exit Sub                                                   '매크로 중단
    End If
   
    Open strName For Input As #1                        '선택한 파일 열기
   
    cnt = 1                                                         '카운트 1부터 시작
    r = 1                                                            '1행부터 시작
    intNo = 3                                                      '3번째 행마다 출력.
   
    Do Until EOF(1)                                            '파일의 마지막 행까지 실행
        Line Input #1, strInput                                '각 행을 읽어서 strInput에 저장
      
        If cnt Mod intNo = 0 Then                           '카운터를 intNo로 나눈 나머지가 0이면
            Sheets("Sheet2").Cells(r, 1) = strInput    '입력받은 데이터를 각 셀에 뿌림
            r = r + 1                                               '행번호 1씩 늘려감
        End If
      
        cnt = cnt + 1                                             '카운터 1씩 늘려감
    Loop                                                           '무한 반복
   
    Close #1                                                     '파일 닫기
End Sub

 

 

'MultiSelect:= True일 경우

    Dim fileName As Variant                                '모든 파일 넣을 배열 변수
                
    fileName = Application.GetOpenFilename("Text Files (*.txt),*.txt", , _
    "텍스트파일을 선택", MultiSelect:=True)           '텍스트 파일을 선택
   
    If TypeName(fileName) = "Boolean" Then Exit Sub    '취소 선택 시 매크로 종료
        
    For i = 1 To UBound(fileName)                       '선택한 파일 개수만큼 반복
        Open fileName(i) For Input As #1                '각 파일을 열기
            
        Close #1                                                 '열은 파일 닫기
    Next i
 

 

'Tab으로 구분된 파일 불러오기

Option Explicit

Sub import_Tab_Limited_Textfile()
 
  Dim fileName As String                                     '파일 이름을 넣을 변수
  Dim strInput As String                                      '각 행의 불러온 문자 넣을 변수
  Dim varTemp As Variant                                   '각 행을 tab으로 쪼개어 넣을 배열 변수
  Dim r As Long                                                '행(r)ow을 1씩 늘려갈 변수
  Dim c As Integer                                             '열(c)olumn을 1씩 늘려갈 변수 

  Application.ScreenUpdating = False                  '화면 업데이트 (일시)중지
  
  fileName = Application.GetOpenFilename("Text Files (*.txt),*.txt", , _
           "탭으로 구분된 텍스트파일")                     '파일을 열어서 파일명을 변수에 넣음

  If fileName = "False" Then Exit Sub                    '취소를 선택시 매크로 종료
 
  Open fileName For Input As #1                          '첫 번째 파일을 열기
  Line Input #1, strInput                                      '각 행을 불러와 strInput에 넣음
 

  Do Until EOF(1)                                              '파일의 마지막까지 실행
     varTemp = Split(strInput, vbTab)                    '불러온 행을 tab으로 나누어 배열에 넣음     
     r = r + 1                                                      '행을 1씩 늘려감
    
     For c = LBound(varTemp) To UBound(varTemp)  '배열 개수만큼 반복
        Cells(r, c + 1) = Val(varTemp(c))                '배열값을 셀에 뿌림
     Next c
    'Cells(r, UBound(varTemp) + 1) = varTemp       '문자인 경우 윗줄의 코드 대신 사용
  

     Line Input #1, strInput                                   '다음 행을 불러옴
  Loop                                                             '무한 반복
 

  Close #1                                                        '불러온 파일 닫기
End Sub

 

 

'특정 데이터가 있는 행부터 데이터 가져오기

Sub import_Textfiles_From_Certain_Row()
 
    Dim strName As String                                  '검색할 단어를 넣을 변수
    Dim lngNo As Long                                      '전체 가져올 행을 넣을 변수
    Dim fileNames As Variant                              '모든 파일 넣을 배열 변수
    Dim i As Integer                                           '반복 구문에 사용할 변수
    Dim strInput As String                                   '각 행의 불러온 문자 넣을 변수
    Dim varTemp As Variant                                '각 행을 tab으로 쪼개어 넣을 배열 변수
    Dim r As Long                                              '행(r)ow을 1씩 늘려갈 변수
    Dim cnt As Integer                                        '행 개수 카운터로 사용할 변수
    Dim c As Integer                                           '열(c)olumn을 1씩 늘려갈 변수
    Dim blnTF As Boolean                                  '시작행 판단한 변수
   
    Application.ScreenUpdating = False               '화면 업데이트 (일시) 중지

    ActiveSheet.UsedRange.ClearContents          '기존 데이터 삭제
   
    strName = "found"                                        '검색할 단어를 변수에 넣음
    lngNo = 3                                                    '검색 일치한 행부터 가져올 행개수
   
    fileNames = Application.GetOpenFilename("텍스트파일,*.txt;*.csv;*.prn", _
        Title:="텍스트 파일을 선택", MultiSelect:=True)
                                                                     '파일을 열어서 파일명을 변수에 넣음
   
    If TypeName(fileNames) = "Boolean" Then Exit Sub    '취소 선택 시 매크로 종료
       
    For i = 1 To UBound(fileNames)                     '선택한 파일 개수만큼 반복
        Open fileNames(i) For Input As #1             '각 파일을 열기
        Line Input #1, strInput                              '각 행을 불러와 strInput에 넣음
           
        Do Until EOF(1)                                       '파일의 마지막까지 실행
       
            If InStr(strInput, strName) Then              '행에 strName 포함되어 있으면
                blnTF = True                                    'blnTF 를 참으로 바꿈
            End If
           
            If blnTF = True Then                             'blnTF가 참인 경우에
                varTemp = Split(strInput, vbTab)         '불러온 행을 tab으로 나누어 배열에 넣음
                r = r + 1                                           '행을 1씩 늘려감
                cnt = cnt + 1                                    '카운터 1씩 늘려감
               
                For c = LBound(varTemp) To UBound(varTemp)  '배열 개수만큼 반복
                    Cells(r, c + 1) = varTemp(c)          '배열값을 셀에 뿌림
                Next c
            End If
           
            If cnt = lngNo Then Exit Do                    'lngNo 만큼 행을 가져오면 do 구문 종료
           
            Line Input #1, strInput                           '다음 행을 불러옴
        Loop                                                      '무한 반복
           
        cnt = 0                                                    '재사용 위하여 카운터 초기화
        blnTF = False                                          '시작 판단행 변수를 초기화
        Close #1                                                '열은 파일 닫기
    Next i
   
End Sub


반응형

+ Recent posts