태그 보관물: worksheet-function

worksheet-function

셀에서 특수 문자를 식별하는 Excel 수식이 있습니까? 열을 만들려고합니다. 의사 코드 수식은 =IF (cellname contains

대괄호, 콜론, 세미콜론, 쉼표 등의 특수 문자를 제거하기 위해 파일 이름을 수동으로 제거해야하는 약 3500 개의 문서가 있습니다.

Excel에 덤프 한 텍스트 파일이 있으며 특수 문자가 포함 된 경우 파일 이름을 수정하도록 플래그를 지정하는 열을 만들려고합니다. 의사 코드 수식은

=IF (cellname contains [^a-zA-z_-0-9], then "1", else "0")

대소 문자에 관계없이 AZ, 0-9,-또는 _ 이외의 문자가 포함 된 경우 행에 플래그를 지정합니다.

누구든지 나를 위해 일할 수있는 것을 알고 있습니까? if빠르고 쉬운 것이 있다면 코드 작성과 대규모 진술에 주저합니다 .



답변

코드가 없습니까? 그러나 너무 짧고 쉽고 아름답고 … 🙁

RegEx 패턴 [^A-Za-z0-9_-]은 모든 셀에서 모든 특수 문자를 제거하는 데 사용됩니다.

Sub RegExReplace()

    Dim RegEx As Object
    Set RegEx = CreateObject("VBScript.RegExp")
    RegEx.Global = True

    RegEx.Pattern = "[^A-Za-z0-9_-]"
    For Each objCell In ActiveSheet.UsedRange.Cells
        objCell.Value = RegEx.Replace(objCell.Value, "")
    Next

End Sub

편집하다

이것은 내가 당신의 원래 질문에 도달 할 수있는 한 가깝습니다.

두 번째 코드는 =RegExCheck(A1,"[^A-Za-z0-9_-]")2 개의 인수가 있는 사용자 정의 함수 입니다. 첫 번째는 확인할 셀입니다. 두 번째는 확인할 RegEx 패턴입니다. 패턴이 셀의 문자와 일치하면 1을 리턴하고 그렇지 않으면 0을 리턴합니다.

먼저 ALT+로 VBA 편집기를 열고 F11모듈 (!)을 삽입하고 아래 코드를 붙여 넣으면 다른 일반 Excel 수식과 같이 사용할 수 있습니다 .

Function RegExCheck(objCell As Range, strPattern As String)

    Dim RegEx As Object
    Set RegEx = CreateObject("VBScript.RegExp")
    RegEx.Global = True
    RegEx.Pattern = strPattern

    If RegEx.Replace(objCell.Value, "") = objCell.Value Then
        RegExCheck = 0
    Else
        RegExCheck = 1
    End If

End Function

RegEx를 처음 사용하는 사용자의 경우 패턴을 설명하겠습니다. [^A-Za-z0-9_-]

[] stands for a group of expressions
^ is a logical NOT
[^ ] Combine them to get a group of signs which should not be included
A-Z matches every character from A to Z (upper case)
a-z matches every character from a to z (lower case)
0-9 matches every digit
_ matches a _
- matches a - (This sign breaks your pattern if it's at the wrong position)

답변

nixda의 코드와 유사한 것을 사용하여 셀에 특수 문자가있는 경우 1을 반환하는 사용자 정의 함수가 있습니다.

Public Function IsSpecial(s As String) As Long
    Dim L As Long, LL As Long
    Dim sCh As String
    IsSpecial = 0
    For L = 1 To Len(s)
        sCh = Mid(s, L, 1)
        If sCh Like "[0-9a-zA-Z]" Or sCh = "_" Then
        Else
            IsSpecial = 1
            Exit Function
        End If
    Next L
End Function

UDF (사용자 정의 함수)는 설치 및 사용이 매우 쉽습니다.

  1. ALT-F11은 VBE 창을 엽니 다
  2. ALT-I ALT-M은 새로운 모듈을 엽니 다
  3. 내용을 붙여 넣고 VBE 창을 닫습니다.

통합 문서를 저장하면 UDF도 함께 저장됩니다. 2003 년 이후 Excel 버전을 사용하는 경우 파일을 .xlsx가 아닌 .xlsm으로 저장해야합니다.

UDF를 제거하려면 다음을 수행하십시오.

  1. 위와 같이 VBE 창을 엽니 다
  2. 코드를 지우다
  3. VBE 창을 닫습니다

Excel에서 UDF를 사용하려면

= 특별 (A1)

일반적으로 매크로에 대한 자세한 내용은 다음을 참조하십시오.

http://www.mvps.org/dmcritchie/excel/getstarted.htm

http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx

http://www.cpearson.com/excel/WritingFunctionsInVBA.aspx

UDF 관련 사항

이 기능을 사용하려면 매크로를 활성화해야합니다 !


답변

다음은 레코드에 특수 문자를 표시하는 조건부 서식 솔루션입니다.

아래의 (매우 긴) 수식을 사용하는 데이터에 새로운 조건부 서식 규칙을 적용하면됩니다. 여기서 A1파일 이름 열의 첫 번째 레코드는 다음과 같습니다.

=SUMPRODUCT((CODE(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1))<48)*(CODE(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1))<>45))+SUMPRODUCT((CODE(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1))>57)*(CODE(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1))<65))+SUMPRODUCT((CODE(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1))>90)*(CODE(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1))<97)*(CODE(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1))<>95))+SUMPRODUCT((CODE(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1))>122)*1)

이 수식은 각 파일 이름의 각 문자를 확인하고 해당 ASCII 코드가 허용되는 문자 값을 벗어나는지 확인합니다. 불행히도, 허용되는 문자 코드가 모두 연속적이지는 않기 때문에 수식에서 SUMPRODUCTs의 합을 사용해야 합니다. 수식은 잘못된 문자 수를 반환합니다. 0보다 큰 값을 반환하는 모든 셀에 플래그가 지정됩니다.

예:


답변

특수 문자를 찾기 위해 다른 접근법을 사용했습니다. 허용되는 각 문자에 대해 새 열을 만든 다음 다음과 같은 수식을 사용하여 허용 된 문자가 각 행 항목 (Z2)에 몇 번 있었는지 계산했습니다.

AA2=LEN($Z2)-LEN(SUBSTITUTE($Z2,AA$1,""))
AB2=LEN($Z2)-LEN(SUBSTITUTE($Z2,AB$1,""))
...

그런 다음 각 행에서 허용되는 문자 수를 합한 다음 행 항목의 총 길이와 비교했습니다.

BE2=LEN(Z2)
BF2=SUM(AA2:BC2)-BE2

마지막으로 마지막 열 (BF2)을 기준으로 음수 값을 찾아서 수정이 필요한 열로 연결했습니다.


답변