programing

범위.Chr(1)에 대해 바꾸기는 항상 참입니다.

mailnote 2023. 4. 26. 23:33
반응형

범위.Chr(1)에 대해 바꾸기는 항상 참입니다.

지금 저는 혼란스러워요.는 이 질문에 대한 답을 만들려고 했습니다.

몇 가지 테스트를 실행함으로써, 저는 그것을 알아차렸습니다.

ActiveSheet.Cells.Replace Chr(1), "", xlPart, , True, , False, False

시트를 완전히 지웁니다.에 있어서는 말이 됩니다.Chr(42)은 어느것이것입니다.* 왜 ㅠㅠㅠㅠㅠChr(1)?

그 이유를 아는 사람?일종의 2등/숨겨진 자리 표시자인가요?
, 잘못된 했을 것입니다

그 이유는 사이의 차이에서 추론할 수 있습니다.

  • NUL: 문자가 없습니다.데이터가 없는 저장 장치의 표면(예: 플래터 표면)에서 시간을 채우거나 공간을 채우는 데 사용됩니다.데이터 와이퍼를 프로그래밍할 때(파괴 및 비파괴 모두) 이 문자를 사용하여 할당되지 않은 공간을 삭제하여 삭제된 데이터가 다른 사용자나 프로그램에 의해 복구되지 않도록 합니다.

  • SOH : 주소 또는 라우팅 정보를 포함할 수 있는 머리글의 시작을 나타내는 데 사용됩니다.

  • STX : 이 문자는 텍스트의 시작을 나타내는 데 사용되며, 이러한 방식으로 제목의 끝을 나타내는 데도 사용됩니다.

정의 소스


이러한 문자(처음 32개)는 기호를 표시하는 것이 아니라 다양한 프린터 및 디스플레이 제어 작업을 수행하기 때문에 제어 문자라고 불리는 것으로 이미 다양한 의견이 제기되었습니다.

하둡에서 SOH는 특히 CSV 파일을 읽을 때 필드 구분자로 자주 사용됩니다.또한 메모장++에서 Excel 파일(일반 xlsx, 즉 이진법으로 압축 해제하지 않고)을 열고 제어 문자를 인쇄하면 SOH 문자가 많이 표시됩니다.보안 기능 때문에 실제 데이터를 볼 수 없습니다.

chr(0) = SOH는 TEXT를 포함하는 모든 셀의 메모리 주소에 대한 포인터입니다.

그리고.

chr(1) = NUL은 NULL 또는 공백 셀을 포함하는 모든 셀의 메모리 주소에 대한 포인터입니다.

아래 이미지에 표시된 다양한 명령에 따라 위의 설명을 살펴보겠습니다.TOP-LEFT는 원래 데이터 범위이며, 범위를 사용하는 SOH, NUL 및 ASTARIS(*)에 대한 교체 작동 방식을 보여주는 예입니다.기능을 교체합니다.

SOH EXCEL에서 모두 바꾸기


그렇다면, Chr(0)과 Chr(1)이 주소 포인터일 뿐이라면 왜 Excel Cell의 값을 대체할 수 있으며 chr(1)이 chr(42)과 어떻게 다르게 작동합니까?

이 문제는 Excel 워크시트의 구조 때문에 발생합니다.새 Excel 워크북을 열 때 Excel 셀은 표시되지 않습니다.그것은 완전히 시각적으로 그리고 시스템의 하드하고 소프트한 기억 속에 있습니다.

그러나 Cell B2에 어떤 것을 입력하면 B2까지 제곱한 모든 BLANK CELL에는 Chr(0)이 있는 포인터가 할당되고 Cell B2에는 Chr(1)이 있는 포인터가 할당됩니다.

이제 셀 B2의 내용을 삭제하면 다른 셀 B2와 함께 NUL 또는 Chr(0) 포인터가 할당됩니다.

이것이 Cells를 사용하여 내용을 삭제하는 이유이기도 합니다.멀리 떨어진 셀을 사용했지만 셀을 사용하여 삭제하지 않은 경우 ClearContents는 메모리의 셀을 지우지 않고 Excel 워크북이 부풀어 오릅니다.지우기 또는 Ctrl+Delete.


이제 Excel이 주어진 명령으로 내용을 바꾸거나 워크시트를 지우는 이유는 분명합니다.또한 별표(*)와 SOH[또는 Chr(0)] 사이의 차이를 이해하는 것이 중요합니다.

별표(*)는 셀의 내용을 최소 길이 0으로 바꿉니다.

Chr(0)이 SOH로 셀을 식별하는 동안, 즉 값을 포함하는 셀을 식별한 다음 포인터의 대상에서 값을 바꿉니다.

차이점은 결과가 아니라 교체할 셀을 찾거나 식별하는 방법입니다.


Chr(1) = SOH 및 Chr(42) = *를 사용하여 50만 개의 셀(A1 ~ CZ5000)을 교체하는 데 걸리는 시간을 기록하는 가설을 검증하기 위해 작은 매크로를 만들었습니다.

TEXT(즉, SOH)로 셀의 주소를 지정하는 포인터를 사용하는 것은 ASTARIS(*)보다 시간이 적게 걸리는 것으로 나타났습니다.

텍스트를 바꾸는 데 걸리는 시간


Sub Replace_Timer()

    Sheet3.Activate

    Dim startTime, endTime
    Dim i As Integer

        Sheet3.Range("A1:CZ5000").Value = "A"

    For i = 1 To 25
        startTime = Timer
            Sheet3.Cells.Replace Chr(1), "X", xlPart, xlRows, False
        endTime = Timer
        Sheet4.Cells(i + 1, 2).Value = endTime - startTime 'Execution time in miliseconds

        startTime = Timer
            Sheet3.Cells.Replace Chr(42), "Z", xlPart, xlRows, False
        endTime = Timer

        Sheet4.Cells(i + 1, 3).Value = endTime - startTime 'Execution time in miliseconds
    Next

    Sheet4.Activate

End Sub

ASCII 1은 'SOH'(제목 시작)이고 ASCII 2 'STX'는 헤더의 끝, 데이터 스트림의 시작을 의미합니다.이렇게 하면 파일의 실제 데이터 앞에 있는 주소, 메모 등을 '숨길' 수 있습니다.Excel이 파일의 시작 부분에서 시작하여 모든 것을 포함하도록 명령을 해석하는 것 같습니다.

답을 찾은 것 같아요.
내가 어떻게 찾았는지.
저는 "Alt+1"(숫자 패드에서 1개)을 입력하고 "?"(질문 표시)를 받았습니다.
이제 아래 코드를 입력하면 시트가 지워집니다.

ActiveSheet.Cells.Replace "?", "", xlPart, , True, , False, False

ASCII 1은, 많은 사람들에 의해 확인된 것처럼, 응용 프로그램에 의해 각 문자에 대한 헤딩의 시작으로 해석되었습니다.그러나 특수 문자는 일부 다른 문자로 이스케이프될 수 있습니다('~'는 엑셀에서 이스케이프 문자입니다). 여기를 선택하십시오.

저는 당신이 코드에서 chr(1)로 대체하는 것을 피해야 한다고 생각합니다.

언급URL : https://stackoverflow.com/questions/45602726/range-replace-is-always-true-for-chr1

반응형