느린 엑셀 문서 상세 상태

느린 엑셀 문서 상세 상태

맞춤형 MATLAB 시뮬레이터에서 출력을 처리하는 데 사용되는 제대로 최적화되지 않은 대규모 Excel 문서 세트를 상속받았는데 속도가 너무 느립니다. 열고, 다시 계산하고, 저장하는 속도가 느립니다. 그리고 이를 사용하면 속도가 느려집니다(열기/저장하는 데 최대 45분 소요). 더 나은 실행을 위해 최적화하는 것은 허용되었지만 특히 불태워서 다시 시작하는 것은 허용되지 않았습니다. 나는 이미 낮은 매달린 과일을 선택하여 서식을 개선하고, 중복된 수식을 제거하고, 오류를 수정, 제거 또는 포착했습니다.

프로세스가 너무 오래 걸리는 부분을 확인하기 위해 일종의 디버그 또는 자세한 로깅을 활성화할 수 있는 방법이 있습니까? 그러면 최소한의 이익을 추구하기보다는 노력에 집중할 수 있습니다.

답변1

귀하의 질문에 대답하자면, Excel에는 성능 로깅이나 디버그 출력이 없습니다. VBA 코드에서 타이머 기능을 실행하여 다양한 VBA 하위 항목, 함수 또는 매크로의 실행 시간을 측정할 수 있습니다(단, Excel 재계산은 직접 수행할 수 없음).

Excel 통합 문서의 속도를 최적화하기 위한 최고의 팁:

  1. 통합 문서 데이터 크기 비교(열, 행, 시트) 및 파일 크기. 불균형적으로 큰 파일에는 많은 양의 메모리를 차지하는 숨겨진 다이어그램이나 그림이 있을 수 있습니다. .xlsx의 이름을 .zip으로 바꾼 다음 폴더에 압축을 풀고 가장 큰 파일을 찾아 힌트를 얻을 수 있습니다.
  2. 다른 파일 형식으로 저장, 예를 들어 이전 .xls는 새 .xlsx에 저장되고, 새 .xlsx는 바이너리 .xlsb에 저장됩니다. 이는 대용량 데이터 세트의 로드 및 저장 시간이 긴 경우 특히 유용합니다.
  3. CPU 및 메모리 사용량 확인. CPU 이동이 많지 않고 메모리 사용량이 높으면 대부분 데이터가 많을 뿐 실제로 처리 집약적이지는 않음을 나타냅니다. RAM(RAM의 두 배) 및 디스크(SSD) 업그레이드와 결합된 바이너리 형식(.xlsb)이 도움이 될 것입니다. 또한 자동 저장/백업 설정을 확인하여 파일 작업 중에 파일이 저장/백업되는 횟수를 줄이세요.
  4. 만약에CPU 및 메모리 사용량높기 때문에 최적화를 위해 공식을 적용해야 할 가능성이 있습니다. 집중적인 수식 계산의 또 다른 징후는 초기 입력 셀 중 하나를 편집한 후 갑작스럽고 엄청난 속도 저하가 발생하는 반면 보기만 하는 동안에는 상대적으로 빠릅니다(초기 로딩 시간 제외).
  5. 휘발성 기능(OFFSET, INDIRECT, NOW, RAND 등)은 대형 스프레드시트의 종말입니다. 아래쪽에 있는 비어 있고 참조되지 않은 외로운 셀을 편집하여 확인할 수 있습니다. 이 편집으로 인해 몇 가지 지연이 시작되면 휘발성 기능이 원인일 가능성이 높습니다. 아 그리고 잊지 마세요조건부 서식휘발성도 있습니다.
  6. 휘발성 트리거자동 필터 변경, 셀 너비 및 높이 조정, 목표 탐색, 숨기기/숨기기 해제/삽입/삭제/이동/이름 변경(셀 및 시트), 연결 새로 고침(예: CSV)과 같은 (확산) 시트 전체 재계산을 유발하는 작업을 포함합니다. 파일 또는 DB, 명명된 셀 및 범위 변경. 이들 중 하나라도 VBA 매크로에서도 실행된다면 문제가 있는 것입니다.
  7. 재계산 설정성능에 큰 영향을 미칠 수 있습니다. 가능하다면 자동 재계산을 끄고 업데이트/편집 후에 수동으로 다시 계산하십시오. 반복적인 계산을 피하세요.
  8. 추적 종속 항목/선례수식 리본의 옵션을 사용하거나 CTRL+[ 및 CTRL+]를 사용합니다. 후자는 CTRL+[를 여러 번 누를 수 있고 종속 항목의 종속 항목을 결정할 수 있으므로 매우 유용합니다. 실제로는 진행하면서 선택되며(리본의 버튼에 의해 추가된 화살표와 대조) 원하는 대로 색상 코드/태그를 지정할 수 있습니다.
  9. 귀찮은 공식을 보여주거나 찾아보세요.수식 리본을 전환할 수 있습니다. >수식 표시(CTRL+~), 문제가 있는 수식을 쉽게 찾아냅니다. 통합 문서 전체를 작성할 수도 있습니다.찾다일시적인 기능의 경우(예: OFFSET 검색)
  10. 명명된 범위를 잊지 마십시오.일시적인 기능이 포함된 명명된 범위에 대해 이름 관리자를 확인하세요.
  11. 가다비휘발성. INDIRECT를 INDEX(..MATCH(..))로 바꾸고 OFFSET을 상대 이름 범위(예: "CellAbove" 이름 범위)로 바꿉니다.
  12. 데이터 메모리 최적화.감소시키다사용 범위(사용된 범위 내에 빈 행과 열이 없습니다). 다른 통합 문서나 다른 시트를 상호 참조하지 마세요. 데이터를 텍스트로 저장하지 마세요. 번호가 매겨진 데이터인지 확인하세요. 허수는 실제로 텍스트로 저장되므로 피하세요. Office 365를 사용하는 경우 LET를 사용하면 동일한 수식을 반복해서 다시 계산하지 않아도 됩니다. 예를 들어, =IF(LOG(A1)>B1,LOG(A1),B1)오히려 될 수 있습니다 =LET(x, LOG(A1), IF(x > B1, x, B1)). 또한 여러 셀에서 방정식의 동일한 부분을 반복해서 수행하는 경우 별도의 셀에서 계산하거나 이름을 정의하는 것이 좋습니다.
  13. 매크로/VBA 코드/자바스크립트 최적화. 각 하위 또는 함수 호출이 시작될 때 재계산/화면 업데이트/이벤트를 끕니다. 나머지 코드를 실행하고 다시 켜십시오.
  14. 사용블록 셀 읽기 및 쓰기. VBA/매크로/자바스크립트 코드에서는 특히 그렇습니다. 특히 화면 업데이트가 켜져 있는 경우 개별 셀 액세스가 느립니다. 답을 배열에 모아서 셀에 다시 쓰는 것을 차단해 보세요. 이와 관련하여 배열 수식(및 Excel 365의 유출)을 사용하여 Excel 수식에서 블록 r/w와 동일한 작업을 수행할 수 있습니다. 이것이 실제로 더 빠른지는 확인하지 않았지만 내 직감은 그렇다고 말합니다.
  15. 데이터 연결을 확인하세요.일부 연결은 통합 문서를 열면 자동 업데이트되도록 설정되어 있으며, 이로 인해 특히 온라인/네트워크 데이터를 새로 고칠 때 전체 로딩 시간이 크게 늘어날 수 있습니다.

답변2

통합 문서가 VBA를 사용한다고 가정하고 이 가정에 따라 답변을 게시하겠습니다.

대부분의 비용은 화면을 새로 고치거나 디스크/네트워크 공유에 파일을 쓰는 데 소요됩니다.

화면을 새로 고치려면 무거운 짐을 지고 있는 모듈을 감싸주세요.

Application.ScreenUpdating = True
    'Do Something
Application.ScreenUpdating = False

이러한 설정을 사용하면 아무 일도 일어나지 않는 것처럼 보이지만 코드 숨김은 계속 실행됩니다. 일부를 추가 debug.print하고 즉각적인 창을 모니터링하여 현재 위치를 확인할 수 있습니다.

또한 비활성화를 살펴보고 꼭 필요한 경우 Application.EnableEvents에만 사용할 수도 있습니다.Application.Calculation = xlAutomatic

디스크 비용과 관련하여. (아직 그렇지 않은 경우) 파일을 로컬 컴퓨터에 저장하고 가능하면 원본 MatLab 데이터를 저장하는 것이 좋습니다. 네트워크 공유에 대한 읽기/쓰기는 로컬 디스크에 비해 본질적으로 느립니다.

관련 정보