[엑셀] 텍스트파일 import하는 기본코드 (엑셀 VBA 매크로)

2016. 8. 25. 11:28·기타
반응형

출처: 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

첨부파일
  • 첨부파일import_Text_With_Offset.xlsm
  • 첨부파일Tab으로_구분된_파일.zip


반응형
저작자표시 (새창열림)

'기타' 카테고리의 다른 글

[엑셀] 엑셀 vlookup 함수 여러개 조건 만족값 찾기예제(index,match)  (0) 2016.09.02
[엑셀] VBA에서 Text 파일 저장하기 (UTF-8 로 저장하기)  (0) 2016.08.25
[엑셀] 엑셀 VBA 예제5 값에 따라 셀 색깔 바꾸는 엑셀 매크로  (0) 2016.08.25
[엑셀] 엑셀 VBA 예제1 텍스트 파일(.txt) 엑셀에 입력하기  (0) 2016.08.25
[엑셀] 엑셀 #N/A안나오게 하는 방법  (0) 2016.07.29
'기타' 카테고리의 다른 글
  • [엑셀] 엑셀 vlookup 함수 여러개 조건 만족값 찾기예제(index,match)
  • [엑셀] VBA에서 Text 파일 저장하기 (UTF-8 로 저장하기)
  • [엑셀] 엑셀 VBA 예제5 값에 따라 셀 색깔 바꾸는 엑셀 매크로
  • [엑셀] 엑셀 VBA 예제1 텍스트 파일(.txt) 엑셀에 입력하기
호레
호레
창업 / IT / 육아 / 일상 / 여행
    반응형
  • 호레
    Unique Life
    호레
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 법률
        • 기본
        • 개인정보보호법
        • 정보통신망법
        • 전자금융거래법
        • 전자금융감독규정
        • 신용정보법
        • 온라인투자연계금융업법
      • 창업
        • 외식업 관련
        • 임대업 관련
        • 유통업 관련
        • 세무 관련
        • 마케팅 관련
        • 기타 지식
        • 트렌드
        • Youtube
      • IT기술 관련
        • 모바일
        • 윈도우
        • 리눅스
        • MAC OS
        • 네트워크
        • 빅데이터 관련
        • A.I 인공지능
        • 파이썬_루비 등 언어
        • 쿠버네티스
        • 기타 기술
      • 퍼블릭 클라우드 관련
        • Azure
        • GCP
        • AWS
      • 정보보안 관련
        • QRadar
        • Splunk
        • System
        • Web
      • 기타
        • 세상 모든 정보
        • 서적
      • 게임 관련
        • 유니티
      • 부동산
      • 맛집 찾기
        • 강남역
        • 양재역
        • 판교역
        • ★★★★★
        • ★★★★
        • ★★★
        • ★★
        • ★
      • 결혼_육아 생활
        • 리얼후기
        • 일상
        • 육아
        • 사랑
        • Food
      • 영어
        • 스피킹
        • 문법
        • 팝송
        • 영화
      • K-컨텐츠
        • 드라마
        • 영화
        • 예능
      • 독서
      • 프로젝트 관련 조사
        • 시스템 구축
        • 로그 관련
        • 웹
        • APT
        • 모의 해킹
        • DB
        • 허니팟
        • 수리카타
        • 알고리즘
        • FDS
      • 기업별 구내 식당 평가
        • 한국관광공사
        • KT telecop
        • KT M&S
        • KT powertel
        • KT cs 연수원
        • 진에어
      • 대학 생활
        • 위드윈연구소
        • 진로 고민
        • 채용정보
        • 자동차
        • 주식
        • 악성코드
        • 게임 보안
      • 쉐어하우스
  • 블로그 메뉴

    • 홈
    • 게임 관련
    • IT 기술 관련
    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    AWS
    보안가이드
    판교맛집
    상호관세
    이재곧죽습니다
    판교
    복리후생
    마케팅
    수제버거맛집
    유니티
    수제버거
    쥬쥬랜드
    돈까스
    점심
    런치
    무역전쟁
    판교역
    대통령
    맛집
    수제버거존맛
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
호레
[엑셀] 텍스트파일 import하는 기본코드 (엑셀 VBA 매크로)
상단으로

티스토리툴바