엑셀 자동 채우기 관련 에러

익명
2024-04-01T08:07:13+00:00

수고 많으십니다.

거두절미하고 말씀드리자면,

저는 특정 목적에 따라 아래의 코드를 작성해서 사용하고 있습니다(해당 코드는 전체의 일부분).

해당 코드에서 rng_Start.AutoFill Destination:=rng_End, Type:=xlFillDefault 이런 명령을 사용하는데,

문제는 가끔씩 해당 명령어가 수식을 자동채우기하는 것이 아니라 첫 셀의 값을 자동 채우기를 하는 일이 벌어지는 경우가 있습니다.

해당 경우는 주로 CPU 사용율이 매우 높을 때(100%) 발생합니다.

해결 방법이 있을까요?

다른 방법을 쓸 수도 있겠지만 개발 시간이 넉넉치 않네요..

코드----------------------------------------------------------------

Function AutoFill_TemplateShtBasedOnDataShtRng( _

                                                sht\_Template As Worksheet, \_ 

                                                sht\_Data As Worksheet, \_ 

                                                Optional headerRow\_Template As Long = 1, \_ 

                                                Optional headerRow\_Data As Long = 1, \_ 

                                                Optional startCol\_Template As Long = 1, \_ 

                                                Optional startCol\_Data As Long = 1, \_ 

                                                Optional ErrMsg As String \_ 

                                            ) 

Dim startRow As Long 

Dim lastRow As Long 

Dim startCol As Long 

Dim lastCol As Long 

Dim rng\_Start As Range 

Dim rng\_End As Range 

On Error GoTo Catch 

startRow = headerRow\_Template + 1 

lastRow = GetLastRow(sht\_Data, headerRow\_Data, startCol\_Data) + headerRow\_Template - headerRow\_Data 

startCol = startCol\_Template 

lastCol = GetLastCol(sht\_Template, headerRow\_Template) 

Set rng\_Start = sht\_Template.Range(sht\_Template.Cells(startRow, startCol), sht\_Template.Cells(startRow, lastCol)) 

Set rng\_End = sht\_Template.Range(sht\_Template.Cells(startRow, startCol), sht\_Template.Cells(lastRow, lastCol)) 

If rng\_End.Rows.Count > 1 Then: rng\_Start.AutoFill Destination:=rng\_End, Type:=xlFillDefault 

Application.Calculate 

GoTo Finally 

Catch:

ErrMsg = Err.Description 

GoTo Finally 

Finally:

End Function

Microsoft 365 및 Office | Excel | 기타 | Windows

잠긴 질문. 이 질문은 Microsoft 지원 커뮤니티에서 마이그레이션되었습니다. 질문이 도움이 되었는지 여부에 대해 응답할 수는 있지만, 메모나 회신을 추가하거나 질문을 따를 수는 없습니다.

댓글 0개 설명 없음

답변 1개

정렬 기준: 가장 유용함
  1. 익명
    2024-04-02T11:32:23+00:00

    이 응답은 자동으로 번역되었습니다. 따라서 문법 오류 또는 이상한 표현이 있을 수 있습니다.

    안녕하세요 윤대영님

    Microsoft 커뮤니티에 오신 것을 환영합니다.

    해당 문제는 VBA에서 AutoFill 메서드의 동작이 예상과 다르게 작동하는 경우에 발생할 수 있습니다. 특히, CPU 사용률이 높을 때 Excel의 반응 속도가 느려지면서 자동 채우기 기능이 예상치 못한 방식으로 실행될 수 있습니다. 이러한 상황에서는 다음과 같은 해결 방안을 고려할 수 있습니다:

    **1->**Application.Calculation 상태 변경

    Excel의 계산 모드를 변경하여, 스크립트 실행 도중 불필요한 계산을 최소화하고 성능을 개선할 수 있습니다. 작업 시작 전에 계산 모드를 xlCalculationManual로 설정하고, 작업 완료 후에는 원래의 계산 모드(xlCalculationAutomatic)로 복구하는 방법입니다.

    Dim originalCalcMode As Long <br><br><br><br> originalCalcMode = Application.Calculation <br><br><br><br> Application.Calculation = xlCalculationManual <br><br><br><br> ' 코드 실행 <br><br><br><br> Application.Calculation = originalCalcMode

    **2->**ScreenUpdating 상태 변경

    Excel의 화면 갱신을 임시로 중지하여 성능을 개선할 수도 있습니다. 화면 갱신이 필요 없는 코드 실행 시간 동안 Application.ScreenUpdatingFalse로 설정하고, 작업이 완료된 후에 다시 True로 설정합니다.

    Application.ScreenUpdating = False <br><br><br><br> ' 코드 실행 <br><br><br><br> Application.ScreenUpdating = True

    3-> 대안적 자동 채우기 로직 구현

    AutoFill 메서드 대신, 반복문을 사용하여 수식이나 데이터를 직접 채워넣는 방법입니다. 이 방법은 더 많은 제어를 할 수 있으며, CPU 사용률이 높은 환경에서도 더 안정적으로 동작할 수 있습니다. 예를 들어, 첫 행의 수식을 나머지 행에 복사하는 로직을 구현할 수 있습니다.

    Dim i As Long <br><br><br><br> For i = startRow + 1 To lastRow <br><br><br><br> <br><br><br><br> Next i

    4 -> 계산 후 강제 적용

    Application.Calculate를 사용하여 코드 실행 후 즉시 계산을 강제 실행할 수 있습니다. 이 방법은 코드 중간에 적용될 수 있으며, 특히 큰 데이터 세트에 대해 자동 채우기를 수행한 후 유용할 수 있습니다.

    위의 해결 방안들을 시도해보시길 바랍니다. 성능 문제와 예기치 않은 동작은 상황에 따라 다를 수 있으므로, 여러 접근 방법을 시험해보고 가장 효과적인 방법을 선택하는 것이 중요합니다.

    PC에 CPU 부하를 증가시키는 소프트웨어가 있는 경우 해당 소프트웨어도 닫는 것이 좋습니다. 그리고 추가 기능이 너무 많아서 문제가 발생하는 것은 아닌지 생각해 보세요. 추가 기능 문제를 해결하려면 Excel 안전 모드로 진입하여 하나씩 취소한 후 CPU가 올바른 리소스 사용으로 돌아가는 데 도움이 되는지 관찰해 보시기 바랍니다. .

    1. Office의 안전 모드를 사용하도록 설정하는 팁은 -<Windows PC 안전 모드에서 Office 앱 열기 - Microsoft 지원>
    2. PC 성능 향상에 대한 팁은 -<Windows에서 PC 성능을 개선하는 팁 - Microsoft 지원>

    또한 이 특정 파일을 공유해 볼 수도 있으며, 이를 통해 확인할 특정 데이터가 있는 경우 더 많은 솔루션을 찾을 수 있습니다. 파일이 비공개인 경우 비공개 메시지를 통해 나와 공유할 수 있습니다. 브라우저 오른쪽 상단에서 확인하세요.
    이미지

    문안 인사,

    아이슬린 |Microsoft 커뮤니티 지원 전문가


    * 여러분의 인내와 협조에 깊은 감사를 드립니다.

    이 대답이 도움이 되었나요?

    댓글 0개 설명 없음