Excel 또는 배치-텍스트 수정 자동화 시도 (다수의 변경, 각각 하나 이상의 문자)


0

텍스트 줄이 많습니다. 텍스트 파일이나 Excel 스프레드 시트에 넣을 수 있습니다. 그들은 많은 변화가 필요합니다. 이전과 이후의 예는 다음과 같습니다.

Input:  I'm buying one!  Only $39 .....
Output: I'm buying one - Only USD 39

즉, HTML 코드 아포스트로피로 변환있어, 느낌표는 중복 공간이 밖으로 제거하고, 공간 하이픈되었다 $가되었다 USD, 및 종료 dotsspaces아무 것도 남아 있지 때까지 제거되었다.

두 가지 다른 프로세스가 필요할 수 있습니다. 먼저 모든 발생에 대한 간단한 문자 대체와 여러 인스턴스를 계속 줄이는 반복 절차 (예 : 더 이상 두 공백 조합이 없을 때까지 두 공백을 하나로 변환).

이상적으로는 Excel 스프레드 시트 에서처럼 "이전"에 대한 하나의 셀과 "이후"에 대한 하나의 셀이있는 쉽게 편집 가능한 목록이 있습니다. 또는 최소한 작업의 간단한 대체 부분에 이상적입니다.

다양한 게시물에서 많은 매크로와 스크립트를 보았지만 대부분은 대상이 아니며 일부는 이해할 수 없습니다. 어떤 제안?


이 예제를 코드로 입력해야합니다. 한 줄을 시작하려면 "입력"을, 다음 줄을 시작하려면 "출력"을 의미했습니다. 또한 HTML 코드-앰퍼샌드 파운드 39 세미콜론이 아포스트로피로 변환 된 것을 알 수 있습니다.
Ray Woodcock

notepad ++ 또는 프로그래머 메모장과 같은 고급 텍스트 편집기에서 열어 보셨습니까?
Raystafarian

답변:


1

나는 종종 이런 것들을 위해 Microsoft Word를 사용합니다. 검색 및 바꾸기는 매우 강력하며 대체 처리를 위해 Excel보다 쉽다는 것을 알았습니다. 또한 NoteTab ( http://www.notetab.com/ ) 이라는 메모장 교체 앱을 사용합니다 . 무료 "라이트"버전이 있습니다. Notetab의 장점은 여러 파일을 쉽게 검색 할 수 있다는 것입니다.


Word에는이 목적을 위해 몇 가지 단점이 있다고 생각합니다. 하나는 눈에 띄는 전환 테이블을 사용하여 솔루션을 자동화하는 방법을 잘 모르겠다는 것입니다. 다른 하나는 한 응용 프로그램에서 파일 이름을 바꾸기 위해 배치 파일을 작성한다는 것입니다. 명령 줄에는 "이전"과 "이후"가 모두 포함되어야하지만 Word의 자동화 된 솔루션은 모든 것을 대체하는 경향이 있다고 생각합니다. "이전"이 변경되어 배치 명령이 작동하지 않습니다.
Ray Woodcock

1

모든 텍스트가 제공 한 샘플과 같은 경우 작동합니다. Excel에서 텍스트 파일을 열고 새 시트를 추가하여 대체 용어 표 (헤더 포함)를 작성하십시오. 첫 번째 열을 "이전"용어로, 두 번째 열을 "이후"용어로 읽도록 설정했습니다. 이 작업을 마친 후 Alt+ F11를 눌러 VBA 편집기 창을 엽니 다. 새 모듈을 삽입하고 다음 코드에 붙여 넣습니다.

Option Explicit
Sub cleanupText()

Dim allTxt() As Variant, sublist() As Variant
Dim i As Long, j As Long, k As Long, tdots As Integer

'Store data from sheets in arrays.
allTxt = Sheets(1).UsedRange.Value
sublist = Sheets(2).UsedRange.Offset(1, 0).Resize(Sheets(2).UsedRange.Rows.Count - 1, Sheets(2).UsedRange.Columns.Count).Value

For i = 1 To UBound(allTxt, 1)
    For j = 1 To UBound(allTxt, 2)
        'Loop through replacement terms and make replacements to data in array.
        For k = 1 To UBound(sublist, 1)
            allTxt(i, j) = Replace(allTxt(i, j), sublist(k, 1), sublist(k, 2))
        Next k
        allTxt(i, j) = Trim(allTxt(i, j))
        'Remove series of trailing periods.
        If Right(allTxt(i, j), 1) = "." Then
            tdots = 1
        Else
            tdots = 0
        End If
        Do While tdots = 1
            allTxt(i, j) = Left(allTxt(i, j), Len(allTxt(i, j)) - 1)
            If Right(allTxt(i, j), 1) = "." Then
                tdots = 1
            Else
                tdots = 0
            End If
        Loop
        allTxt(i, j) = Trim(allTxt(i, j))
    Next j
Next i
'Print cleaned up results in array onto sheet.
ActiveSheet.UsedRange.Value = allTxt
End Sub

코드를 실행 한 다음 파일을 텍스트로 저장하십시오.


이 답변은 최고의 잠재력을 가진 것으로 보입니다. 당시에는 사용하지 않았지만 다음에이 특정 종류의 작업으로 돌아올 때 다시 사용하겠습니다. 감사!
Ray Woodcock

0

http://www.sobolsoft.com/excelremove/

이것은 원하는 것을 정확하게 수행하는 멋진 애드온 (Excel 용)입니다. 작성 시점에 30 달러의 비용이 소요되므로 수시로 또는 지속적으로 많이 사용하는 것이 좋지만, 이것이 한 번만 사용하는 경우 가치가 없을 수 있습니다.

사용자가 선택한 문자 제거 / 바꾸기를 선택하면 작동합니다. 바꾸기를 선택하고 바꿀 문자를 말한 다음 무엇을 말하고 붐으로 바꿀 수 있습니다. 선택한 모든 셀을 통과하여 변경합니다. 공간을 추가하여 물건을 깨끗하게 만들 수도 있습니다.


그러나 사용자가 한 번에 하나의 작업을 수동으로 선택 해야하는 것처럼 보입니다. 이러한 작업 중 일부는 TRIM입니다. 일부 작업의 경우 동일한 작업을 수행하기 위해 수식을 작성하는 것보다 조금 더 쉬울 수 있지만 드물게 수행되는 작업에서 30 달러에 합격 할 수 있습니다.
Ray Woodcock
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.