VB(A)

[정규식] 텍스트 파일을 조건에 맞게 쪼개서 가져오기

당근쨈 2017. 12. 31. 23:26

http://cafe.naver.com/excelmaster/146535


띄어쓰기 없이 한줄로 나열된 텍스트를 조건에 맞게 쪼개서 가져오는 패턴

코드도 쓸데없이 많이 쪼갠 탓인지 길어졌군.

매크로 파일과 텍스트 파일을 한 폴더에 두고 실행하면 됨


Option Explicit
 
Private Final() As Variant
Private r As Integer
Private c As Integer
Sub Macro()
    
    Dim v() As String
    Dim MyTxtFile As String
 
    '텍스트 파일 불러오기
    Range("A1").CurrentRegion.Offset(1).ClearContents
    MyTxtFile = ThisWorkbook.Path & "\text.txt"
    
    v = OpenTxtFile(MyTxtFile)  '텍스트 파일을 불러와서 배열에 삽입하기
    Call SeperateText(v)    '조건에 맞게 배열을 쪼개기
    
    '셀에 출력
    Range("A2").Resize(r, c) = Final
    
    '변수 초기화­
    Erase Final
    r = 0: c = 0
    
End Sub
 
Function OpenTxtFile(TextFile As StringAs Variant
    '텍스트 파일을 배열에 삽입하기
 
    Dim TextArray As String
    Dim v() As String
    Dim i As Integer
    
    Open TextFile For Input As #1
    
    '텍스트 파일을 한줄씩 순환하며 배열에 삽입
    Do While Not EOF(1)
    
        Line Input #1, TextArray
        
        ReDim Preserve v(i)
        v(i) = TextArray
        i = i + 1
 
    Loop
    
    OpenTxtFile = v
    
    '변수 초기화
    Erase v
    TextArray = vbNullString
    Close #1
    
End Function
 
Sub SeperateText(tmp As Variant)
    '조건에 맞게 배열을 쪼개기
 
    Dim MySet As Object
    Dim SingleArray
    
    '셀 출력용 배열로 재선언
    ReDim Final(UBound(tmp), 3)
 
    '정규식을 선언하여 텍스트를 쪼갤 조건을 부여함
    With CreateObject("vbscript.regexp")
    
        .Global = True
        .Pattern = "([A-Z]+)([0-9,]+)\+?(-?\d+)\+?([-0-9.]+%)"  '종목 가격 증감 퍼센트
        
        For Each SingleArray In tmp
        
            If .test(SingleArray) = True Then
            
                Set MySet = .Execute(SingleArray)
              
                For c = 0 To 3
                    Final(r, c) = MySet(0).submatches(c)
                Next c
                
                r = r + 1
            
            End If
            
        Next SingleArray
        
    End With
 
End Sub
 
cs

통합 문서1.xlsm

text.txt


'VB(A)' 카테고리의 다른 글

도로명주소 가져오기  (0) 2018.02.13
여러 시트를 쉽게 이동하기  (0) 2018.01.05
웹페이지 파싱  (0) 2017.09.23
[월보용] 데이터 합치기  (0) 2017.09.01
월보 취합 서식  (0) 2017.08.29