VB(A)

정규식을 활용한 to by 사용법

당근쨈 2015. 12. 22. 00:06

파란 셀 안에 to 가 있고 by 도 있다.

어디에도 있을 수 있다는 가정 하에.

사용자정의 함수와 단추를 이용한 두가지 예제.

정규식을 이용하여 to 와 by의 유무를 파악하였다.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
Option Explicit
Sub Macro()
 
    Dim v, smV
    Dim R%()
    Dim i%, j%, k%
    Dim intStart%, intEnd%
    Dim MySet As Object
    Dim rnG As Range
    
'   정규식 선언. 숫자만 걸러냄
    With CreateObject("VBscript.Regexp")
        .Global = True
        .Pattern = "(\d+)"
        
'       선택 영역 중 데이터가 있는 영역만 순환
        For Each rnG In Selection.SpecialCells(2)
        
'           띄어쓰기를 기준으로 숫자를 나누어서 배열에 담음
            v = Split(rnG, " ")
            j = 0
        
'           나뉜 배열을 순환
            For Each smV In v
            
                If .test(smV) = True Then
                    
                    Set MySet = .Execute(smV)   '정규식 실행
                    intStart = MySet(0'시작 숫자는 정규식의 첫 그룹
                    k = 1   '순환문의 기본단위
                    
                    Select Case MySet.Count
                        Case 1  '숫자만 있을 때
                            intEnd = MySet(0)
                            
                        Case 2  'to만 있을 때
                            intEnd = MySet(1)
                            
                        Case 3  'by까지 있을 때
                            intEnd = MySet(1)
                            k = MySet(2)
                    End Select
                
'                   to, by 의 유무에 따라 다르게 배열에 삽입
                    For i = intStart To intEnd Step k
                        ReDim Preserve R(j)
                        R(j) = i
                        j = j + 1
                    Next i
                End If
            Next smV
            
'           선택 셀의 오른쪽 두칸부터 한 셀에 하나의 숫자를 출력
            rnG.Offset(, 2).Resize(, UBound(R) + 1= R
        Next rnG
    End With
End Sub
cs


151221 to-by 문법 변환 질의.xlsm