|
* 질문 >>
특정 서버로부터 다운 받은 엑셀내의 불특정 구간의 숫자가 항상 "텍스트 형태로 저장된 숫자" 라는 오류가 발생합니다.
그래서 일일이 숫자로 변경을 하기 위해 VBA를 작성 했는데 어느 정도에 셀까지만 작동을 하고 이 이후것은 작동을 하지 않습니다.
어느 부분이 잘못인지 파악 부탁드립니다.
Sub 텍스트형_숫자_오류_정리()
'
' 매크로1 매크로
' 부정형 테이블을 읽어 들여서 각 셀들마다 읽어들이기/다시 셀에 쓰기 등을 반복
' 셀의 끝까지 진행하여 오류 나오는 텍스트형 숫자를 오류 없게 만들기
'
Dim a As String '(a 라는 변수를 지정)
Dim b As String '(b 라는 변수를 지정)
Dim x As Integer '(x 라는 변수를 지정)
Dim y As Integer '(y 라는 변수를 지정)
Dim i As Integer '(i 라는 변수를 지정)
Dim j As Integer '(j 라는 변수를 지정)
ActiveCell.SpecialCells(xlLastCell).Select
x = ActiveCell.Row - 3
y = ActiveCell.Column
'MsgBox x
'MsgBox y
Range("A4").Activate
i = 0
j = 0
Do While j < y
Do While i < x
a = ActiveCell '‘(현재 셀의 값을 a변수에 입력)
ActiveCell = a '‘(a변수의 값을 현재 셀에 다시 입력)
ActiveCell.Offset(1, 0).Select '‘(현재 셀에서 우측으로 한칸 이동)
i = i + 1
' MsgBox "i=" & i
Loop
i = 4 ' 실제 자료가 있는 셀 위치부터 시작함, 각 컬럼의 4번째 행부터 자료 검색
j = j + 1
' MsgBox "j=" & j
Cells(4, j).Select
a = ActiveCell '‘(현재 셀의 값을 a변수에 입력)
ActiveCell = a '‘(a변수의 값을 현재 셀에 다시 입력)
ActiveCell.Offset(0, 1).Select '‘(현재 셀에서 아래로 한칸 이동)
Loop '‘(반복)
End Sub
==============[김인현님 글에 대한 답변입니다]==============
테이블 크기를 계산하는 x, y, i, j 중 특히 행을 담당하는 x와 i는
Long 형으로 선언하는 것이 안전합니다.
엑셀 2007 이후 버전(xlsx 형식)의 경우 최대 행 수가
65535까지 가능하기 때문에 Integer로는 32768행부터 오류가 발생합니다.
Offset 함수가 오른쪽, 아래쪽 이동 방법이 반대로 되어 있습니다.
Offset(행, 열)로 써야 하므로, Offset(0,1)이 오른쪽 이동입니다.
차라리 activecell이나 Offset으로 제어하는 것보다는
Cells 개체를 직접 사용하는 것이 더 효율적일 것입니다.
그리고, 이중 반복문이 좀 이상하게 얽혀 있네요.
일부 영역은 했던 곳을 중복으로 작업하고
일부는 빠지게 되어 있습니다.
그리고, 이런 목적이라면 Do 루프보다는 For 루프가 훨씬 깔끔하고
속도도 빠릅니다.
------- 수정 프로그램 -----
Sub 텍스트형_숫자_오류_정리()
Dim a As String '(a 라는 변수를 지정)
Dim b As String '(b 라는 변수를 지정)
Dim x As Long ' 테이블의 행 크기
Dim y As Integer ' 테이블의 열 크기
Dim i As Long ' 행번호 반복 제어 변수
Dim j As Integer ' 열번호 반복 제어 변수
ActiveCell.SpecialCells(xlLastCell).Select
x = ActiveCell.Row
y = ActiveCell.Column
For i = 4 To x
For j = 1 To y
Cells(i, j).Select ' i행 j열 셀을 선택
a = ActiveCell '‘(현재 셀의 값을 a변수에 입력)
ActiveCell = a '‘(a변수의 값을 현재 셀에 다시 입력)
Next j
Next i
End Sub
|
|