2012-01-02 3 views
2

엑셀에서 더블 스페이스 이후에 모든 데이터를 삭제하기 위해 찾기와 바꾸기를 사용하려고합니다. 이 데이터의 예로는 '*.'엑셀 더블 스페이스 이후의 모든 데이터 삭제

오픈 오피스에서
The Apples are Green 
The Bannanas are Yellow 
The Strawberries are Red 

내가 을 검색 할 수 있습니다 ...

The Apples are Green They are supplied by John The Bannanas are Yellow They are supplied by Tom The Strawberries are Red They are supplied by Jason 

내가 데이터는 다음과 같이 할 ...
과로 교체 아무것도 작동하지 않지만 Excel에서는 그렇지 않습니다.

결국 매크로로 작업하고 싶지만 지금은 찾기 및 바꾸기와 함께 작동 시키려고합니다. 아무도 도와 줄 수 있습니까?

답변

2

달성하려는 작업을 수행하는 다른 방법이 있습니다. 나는 그것이 당신에게 FindReplace보다 많은 통제력을 준다는 것을 안다.

' Get the contents of the cell 
Dim s As String 
s = Range("A1").Value 
' Now write back only what precedes the double space 
Range("A1").Value = Left(s, InStr(s, " ") - 1) 

위는 단 하나의 셀에서만 작동합니다.많은 세포를 통해 동일한 작업을 수행하기 위해, 당신이 할 수 있습니다 : 다른 답변에서 지적 된 바와 같이

Dim cell As Range 
For Each cell In Range("A1:A3") 
    cell.Value = Left(cell.Value, InStr(cell.Value, " ") - 1) 
Next cell 

, 당신은 규칙적인 공간에 의한 골칫거리가 아닌 휴식 공간 (Chr(160))를 교체해야합니다 전에 더블을 검색 공간 :

Dim cell As Range 
For Each cell In Range("A1:A3") 
    cell.Value = Left(cell.Value, _ 
     InStr(Replace(cell.Value, Chr(160), " "), " ") - 1) 
Next cell 

편집 주소 @ 크리스 neilsen의 코멘트 : 당신의 표적 세포 중 일부는 이중 공백이없는 경우에, 당신은을 위해

확인해야합니다 그 전에 01를 사용하는 에러 인상 그것을 않도록기능 : 표적 세포의 일부는 두 공간을 포함하는 수식을 포함하는 매우 원격 기회에서 지금

Dim cell As Range 
Dim i As Long 
For Each cell In Range("A1:A5") 
    i = InStr(Replace(cell.Value, Chr(160), " "), " ") 
    If i > 0 Then 
     cell.Value = Left(cell.Value, i - 1) 
    End If 
Next cell 

(예 : =A1 & "<space><space>" & A2)이 수식은 값으로 대체됩니다. 이를 방지하려면 조건부를 If i > 0 And Not cell.HasFormula Then으로 변경하십시오.

+1

다음과 같은 몇 가지 문제가 있습니다. 1. 2를 포함하지 않는 모든 호출 값 공백으로 인해 오류가 발생합니다. 2. 수식이 값으로 대체됩니다 –

+0

물론 이죠, 문제는 쉽게 해결됩니다. 그러나이 솔루션은 질문에 지정된 문제를 해결하고 OP가 질문에 지정된 내용과 내용이 다른 범위에이 문을 적용하기로 결정하는 경우에만 "문제"를 줄 것입니다. –

3

' *' 검색 (즉, <space><space>*이다)

참고 샘플 텍스트 번째 '공간'실제로
'아니요 체류 공간'없는 두 공간 서열 제공 (ASCII 코드 160) .
이가이

Sub DeleteAfterDoubleSpace() 
    Dim ws As Worksheet 

    Set ws = ActiveSheet 

    ' Replace any non-break spaces 
    ws.Cells.Replace What:=Chr(160), Replacement:=" ", LookAt:=xlPart 
    ' Replace double space* 
    ws.Cells.Replace What:=" *", Replacement:="", LookAt:=xlPart 
End Sub 
+0

나는 그것을 시도했지만 성공적으로 그것을 대체하지 않는 항목을 각각 찾습니다. 대체 상자에 넣어야 할 구체적인 것이 있습니까? – fightstarr20

+0

'Replace'상자가 비어있는 경우 –

+1

두 개의 공백이 포함 된 수식이 포함 된 셀 (예 :'= ""이후)이 포함 된 수식을 포함하는 셀은 편집> 바꾸기는하지만 매크로를 기록하는 동안 (당신에게 유사한 코드를 산출 함)이 똑같은 매크로를 재생하면 수식이 무시되고 오류가 발생하지 않습니다. 이상한. –

3

할 공간으로 '노 휴식 공간을'치료,

코드에서이 작업을 수행하려면 검색 상자 (숫자 키패드) 유형 Alt-0160에이를 입력하려면 크리스에게 약간 다른 접근 방식. space space을 검색하기 전에 모든 비 분리 공백을 제거합니다.

문자열에 비 분리 문자가 포함되어있는 것이 문제입니다. 공백은 코드 32입니다. 비 구분 영역은 코드 160입니다. 문자열에 space space이 없기 때문에 space space을 찾을 수 없습니다.

는 다음과 같은 시도 :

Sub DeleteAfterDoubleSpace() 

    Dim Pos As Integer 
    Dim Rng As Range 

    With Sheets("xxxxx") 

    ' Replace any non-break spaces 
    .Cells.Replace What:=Chr(160), Replacement:=" ", LookAt:=xlPart 

    ' Find the first cell containing double space, if any 
    Set Rng = .Cells.Find(" ", .Range("A1"), xlValues, xlPart, xlByRows, xlNext) 
    Do While True 
     If Rng Is Nothing Then 
     ' All double spaces removed, exit. 
     Exit Do 
     End If 
     Pos = InStr(Rng.Value, " ") ' Find position of double space within cell 
     ' Extract first Pos-1 characters from cell and set cell to those characters. 
     Rng.Value = Mid(Rng.Characters, 1, Pos - 1) 
     Set Rng = .Cells.FindNext(Rng) ' Find the next double space 
    Loop 

    End With 

End Sub 

P.S.을

나는 워크 시트의 A1 셀하기 위해 문자열을 붙여 그래서 다음과 같은 루틴을 호출하여 비 휴식 공간을 발견 :

Call DsplDiag(Range("A1") 

첫 번째 문자열의 출력은 다음과 같습니다

T h e  A p p l e s  a r e  G r e e n    T h e 
54 68 65 20 41 70 70 6C 65 73 20 61 72 65 20 47 72 65 65 6E 20 A0 54 68 65 

    y  a r e  s u p p l i e d  b y  J o h n   
79 20 61 72 65 20 73 75 70 70 6C 69 65 64 20 62 79 20 4A 6F 68 6E A0 

녹색과 마지막에 두 개의 A0이 있음을 알 수 있습니다. A0는 160에 대한 16 진수입니다.

Sub DsplDiag(DsplStg As String) 

    ' Output the string DsplStg to the immediate window in both display and 
    ' hexadecimal formats 

    Dim CharChar As String 
    Dim CharInt As Integer 
    Dim CharStg As String 
    Dim CharWidth As Integer 
    Dim HexStg As String 
    Dim Pos As Integer 
    Dim Printable As Boolean 

    CharStg = "" 
    HexStg = "" 

    For Pos = 1 To Len(DsplStg) 
    CharChar = Mid(DsplStg, Pos, 1) 
    CharInt = AscW(CharChar) 
    Printable = True 
    If CharInt > 255 Then 
     CharWidth = 4 
     ' Assume Unicode character is Printable 
    Else 
     CharWidth = 2 
     If CharInt >= 32 And CharInt <> 127 Then 
     Else 
     Printable = False 
     End If 
    End If 
    HexStg = HexStg & " " & Right(String(CharWidth, "0") & _ 
              Hex(CharInt), CharWidth) 
    If Printable Then 
     CharStg = CharStg & Space(CharWidth) & CharChar 
    Else 
     CharStg = CharStg & Space(CharWidth + 1) 
    End If 
    If Pos Mod 25 = 0 Then 
     Debug.Print CharStg 
     Debug.Print HexStg 
     Debug.Print 
     CharStg = "" 
     HexStg = "" 
    End If 
    Next 

    Debug.Print CharStg 
    Debug.Print HexStg 

End Sub