문제

오늘 오전에 제가 문의한 답변을 통해 다음과 같은 기능이 주어졌습니다.

내가 하려는 것은 VBA를 사용하여 Excel의 문자열에서 문자를 제거하는 것입니다.그러나 함수가 실행될 때마다 저장된 값이 지워지고 결과가 반환됩니다. #!VALUE 오류.무슨 일이 일어나고 있는지 알 수 없는 것 같습니다.대안을 설명하는 사람은 누구입니까?

Function ReplaceAccentedCharacters(S As String) As String
    Dim I As Long

With WorksheetFunction
For I = 1 To Len(S)
    Select Case Asc(Mid(S, I, 1))
        ' Extraneous coding removed. Leaving the examples which 
        ' do work and the one that is causing the problem.
        Case 32
            S = .Replace(S, I, 1, "-")
        Case 94
            S = .Replace(S, I, 1, "/")

        ' This is the coding that is generating the error.
        Case 34
            S = .Replace(S, I, 1, "")
        End Select

    Next I

End With

ReplaceAccentedCharacters = S

End Function

문자열에 다음이 포함된 경우 " (또는 10진수는 34, 16진수는 22...둘 다 사용했습니다) 따옴표를 제거해야합니다.그러나 대신 Excel에서는 이를 무시하고 여전히 다음을 반환합니다. " 어쨌든 표시해.

그런 다음 계속해서 교체하려고했습니다. .Replace() 다른 값을 가진 절.

        Case 34
            S = .Replace(S, I, 1, "/")
        End Select

위의 코드를 사용하면 스크립트는 실제로 "를 /로 바꿉니다.

결국 Stack Overflow에서 다음 예제를 찾았습니다.https://stackoverflow.com/a/7386565/692250

그리고 주어진 답변에서 제가 제공한 코드 예제와 유사하지만 아무것도 없는 동일한 코드 예제를 볼 수 있습니다.Excel에서는 여전히 따옴표를 무시하고 있습니다.심지어 중괄호를 사용하여 정의를 확장했지만 여전히 아무것도 얻지 못했습니다.

도움이 되었습니까?

해결책

이 기능은 한 문자를 다른 문자로 바꾸도록 설계되었습니다.문자를 아무것도 대체하지 않도록 설계되지 않았습니다.문자를 아무것도 없는 것으로 바꾸려고 하면 단어를 반복하는 카운터가 이제 (마지막 반복에서) 단어의 길이보다 큰 문자 위치를 찾습니다.이는 아무것도 반환하지 않으며 ASC(<아무것도 아님>) 오류가 발생합니다.코드가 실행되는 동안 문자열 길이가 변경되면 교체 루틴의 다른 오류도 발생합니다.

문자를 아무것도 바꾸지 않도록 루틴을 수정하려면 다음을 제안합니다.

Case 문에서:

Case 34
        S = .Replace(S, I, 1, Chr(1))

그리고 할당문에서:

ReplaceAccentedCharacters = Replace(S, Chr(1), "")

VBA 바꾸기는 워크시트 함수 바꾸기와 다릅니다.

다른 팁

이 시도:

Function blah(S As String) As String
    Dim arr, i

    'array of [replace, with], [replace, with], etc
    arr = Array(Chr(32), "-", Chr(94), "/", Chr(34), "")

    For i = LBound(arr) To UBound(arr) Step 2
        S = Replace(S, arr(i), arr(i + 1))
    Next i

    blah = S
End Function
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top