오늘 해볼건 랜덤으로 생성된 4자리 숫자(번호판 4자리) 를 텍스트가 아닌 이미지로 인식하여 그것을 통해 텍스트를 추출하는 작업을 해볼것이다.
엑셀이 텍스트인데 왜 이걸 이미지로 인식해서 다시 텍스트로 긁어오냐는 식의 어의없음은 탑재를 안하길 바란다.
OCR 엔진의 인식률은 좋은 편이다. 물론 이걸 사용하려면 윈도우10이어야 하고 윈도우에서 언어 패키지를 설치하여야 한다. 요즘 OCR엔진들은 학습도 가능하다고 하는데 이건 학습이 안된다고 한다. 참고하길 바란다.
처음에 OCR 영역을 설정하게 되면 영어와 숫자는 큰 무리없이 바로 마우스 포인트 옆에 스캔한 결과를 보여주는 tooltip이 생긴다. 이걸 클립보드에 담아서 각 해당 영역에 뿌려주는 코드이다.
완벽하지는 않지만 생각보다 인식률이 좋은 편이니 간단하게 사용하기에는 좋을 듯 하다.
더보기
Option Explicit
Sub 주차관제()
Dim rNum$, Num&, i&, n&: n = 1
Dim rngAll As Range
Dim rngA As Range
Dim rngX As Range
Dim rngT As Range: Set rngT = [k2]
Dim ReNum$
Set rngAll = [b6:h6] '= 영역설정
[k1].CurrentRegion.Offset(1).ClearContents '= 초기화
Do Until n >= 50 '= 총 50차례 스캔
Num = Application.RandBetween(1, 9999) '= 1부터 9999까지의 랜덤 순번
rNum = Application.Text(CStr(Num), "0000") '= 4자리를 유지해라
i = 0 '= 번호가 들어갈 열 번호 초기화
Set rngX = [b6] '= 처음 번호가 들어올 영역
For Each rngA In rngAll '= 자리수를 반복해라
If i >= 4 Then Exit For '= 자리수가 4자리가 되면 for문을 종료해라
i = i + 1 '= 자리수를 증가해라
rngX = Mid(rNum, i, 1) '= 각 자리에 하나씩 숫자들을 집어넣어라
Set rngX = rngX.Offset(0, 1) '= 열을 한 칸씩 옮겨가라
Next rngA
On Error Resume Next
rngT.PasteSpecial '= OCR값을 붙여넣어라 / 만일 스캔값이 없다면 그냥 넘겨라
On Error GoTo 0
rngT.Next = Now() '= 현재 시간을 넣어라
Set rngT = rngT.Offset(1) '= 스캔을 출력할 영역을 행기분으로 한칸 내려라
Application.Wait (Now + TimeValue("0:00:02")) '= 2초간 딜레이를 줘라
n = n + 1 '= 전체 스캔 변수를 +1해라
Loop
End Sub
OCR 영역은 응용파일로 되어 있으니 독립적으로 사용해도 된다.
'VBA' 카테고리의 다른 글
[VBA] 패턴을 순환하는 정규식을 만들어보자 (0) | 2022.08.31 |
---|---|
[VBA] 사이즈표 만들기(feat. 더블클릭 이벤트) (0) | 2022.08.26 |
[VBA] 고급필터를 이용한 옵션선택 (0) | 2022.08.04 |
[VBA] 프린트 영역설정 (0) | 2022.07.13 |
[VBA] 코스피 200 가져오기(네이버 증권, Callbyname) (0) | 2022.06.27 |
댓글