나눔터  
  HOME > 나눔터 > 묻고답하기 > 엑셀
엑셀
엑셀에 대한 질문과 답변을 올려주세요. 단, 취지에 맞지 않는 글은 운영자가 삭제합니다.
 "000 님, 도와주세요", "부탁 드립니다.", "급합니다!" 등과 같이 막연한 제목을 달지 말아주세요.
[필독] 빠르고 정확한 답변을 얻는 16가지 Tip !
[필독] 저작권법 개정에 따른 이용안내
작성자:  

 구석마을 (paxoh)

추천:  2
파일:     조회:  3030
제목:   [RE]불특정 형태의 테이블내 모든셀을 한번씩 재입력하는 VBA
     
  * 답변하시는 분들께 도움이 되도록 자신의 환경을 아래 항목 옆에 기재해 주세요.

 - 엑셀 버전(95,97,2000,xp,2003,2007):2010

* 아래줄에 질문을 작성하세요 >>

특정 서버로부터 다운 받은 엑셀내의 불특정 구간의 숫자가 항상 "텍스트 형태로 저장된 숫자" 라는 오류가 발생합니다. 
그래서 일일이 숫자로 변경을 하기 위해 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

==============[김인현님 글에 대한 답변입니다]==============

처음 반복문이 다시 시작될 때 i=0 추가하셔서
i값을 초기화 시키면 되겠네요. 행잡~~


Sub 텍스트형_숫자_오류_정리()
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

Range("A4").Activate

i = 0
j = 0

    Do While j < y
    
        i = 0
        
        Do While i < x
            a = ActiveCell                    '‘(현재 셀의 값을 a변수에 입력)
            ActiveCell = a                    '‘(a변수의 값을 현재 셀에 다시 입력)
            ActiveCell.Interior.ColorIndex = 5
            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
 
[불량 게시물 신고]  
김인현감사합니다. 덕분에 잘 해결됐습니다. 죄송하지만 혹시 "텍스트로 저장된 숫자" 셀만 찾아서 오류 정정 하는것도 할 수 있을까요? 테이블 사이즈가 커서 전체 셀을 돌리다 보니 시간이 엄청 오래 걸리네요..^^;;06-21 (09:53)
삭제 ■신고
구석마을두번째 Do While 안에
If IsNumeric(ActiveCell) = True And ActiveCell.NumberFormatLocal = "@" Then

End If

를 사용하셔서 숫자이면서 텍스트형식만 골라서 변경하도록 해보시면 될 듯
행잡~~
06-21 (14:28)
삭제 ■신고
구석마을선택하여 붙여넣기를 이용하는 것도 괜찮을 듯 하네요.
빈셀에 1 입력하시고 "복사하기"
편집해야할 영역 전체 선택하시고
"선택하여 붙여넣기"
연산 - 곱하기 - 확인

빈셀에 0이 입력되기는 하나 별 문제 없을 듯 하네요.
행잡~~
06-21 (14:35)
삭제 ■신고
        
  

작성일 : 2017-06-20(16:02)
최종수정일 : 2017-06-20(16:02)
 


 ◎ 관련글

  제 목   작성자   날짜
불특정 형태의 테이블내 모든셀을 한번씩 재입력하는 VBA 김인현 2017-06-20
[RE]불특정 형태의 테이블내 모든셀을 한번씩 재입력하는 VBA 조삿갓 2017-06-20
[RE]불특정 형태의 테이블내 모든셀을 한번씩 재입력하는 VBA 구석마을 2017-06-20