728x90

자막에서 두사람의 대화인 경우 대쉬(-)를 넣어서 구분되어 있다.

-But if you just... -Rapunzel, we're done talking about this.
-그렇지만 만약… -라푼젤, 이제 이 이야긴 그만하자
-Trust me,... -Rapunzel.
-믿어주세요 전… -라푼젤
-...I know what I'm -Rapunzel.
-알아요 전… -라푼젤
-Oh, come on. -Enough with the lights, Rapunzel.
-제발요 엄마 -너에게 다른 인생이란 없어 라푼젤


이런 자막인 경우에 VBA 를 이용하여 분리 저장을 해봤다.

내가 잘 몰라서 그런지 몰라도 위에서 부터 아래로 For 문을 돌리면 끝까지 처리가 안된다.

그래서 맨 아래줄부터 위로 처리하는 로직으로 구현을 하고 테스트를 해봤다.


자막에 - 가 들어가 있는데 1개만 들어간 경우가 있다. 이 경우에는 - 를 제거해주고

- 가 두개 들어간 경우에는 개수를 먼저 표시한 다음에

자막 대사를 분리 저장하는 로직으로 구현했다.


Sub dash_check()    '// 대쉬가 들어간 것만 표시
    Dim r&, sRow&, eRow&, k&, j&, v
    Application.ScreenUpdating = False
    sRow = 2
    eRow = Cells(Rows.Count, "A").End(3).Row
    For r = sRow To eRow Step 1
        On Error Resume Next
        If InStr(Cells(r, 1), "-") Then     '// 셀에 대쉬(-)가 포함되어 있으면
            v = Split(Cells(r, 1), "-")     '// Split 함수를 이용하여 배열로 저장
            If UBound(v) = 1 Then       '// 배열의 개수를 파악하여 1개, 즉 대쉬(-)가 1개만 들어간 경우이면
                If Left(Cells(r, 1), 1) = "-" Then  '// 셀의 첫번째가 대쉬(-) 이면
                    Cells(r, 1) = Trim(Mid(Cells(r, 1), 2, Len(Cells(r, 1))))   '// 두번째 이후의 값을 다시 셀에 저장하라
                End If
            Else
                Cells(r, "D") = UBound(v)
                j = j + 1
            End If
        Else
            Cells(r, "D") = vbNullString
        End If
    Next r
    MsgBox "총 " & k + j & "개 표시  " & j & "개 " & k & "개"
End Sub

Sub subtitle_cellsplit()
'// 대쉬(-)가 2개 들어간 자막을 분리하여 저장 처리
'// 대쉬(-)가 들어간 자막은 아래부터 위로 처리를 해야 제대로 저장됨
    Dim r&, sRow&, eRow&, k&, j&, v, ss
    Application.ScreenUpdating = False
    sRow = 2
    eRow = Cells(Rows.Count, "A").End(3).Row
    For r = eRow To sRow Step -1
        If Cells(r, 4) = 2 And InStr(Cells(r, 1), "-") And Cells(r - 1, 4) = 2 And InStr(Cells(r - 1, 1), "-") Then
            ss = Split(Cells(r - 1, 1), "-")
            v = Split(Cells(r, 1), "-")
            Cells(r - 1, 1).Value = Trim(ss(1))
            Cells(r - 1, 1).Offset(2).EntireRow.Insert
            Cells(r - 1, 1).Offset(2).Value = Trim(ss(2))
            Cells(r, 1).Value = Trim(v(1))
            Cells(r, 1).Offset(2).EntireRow.Insert
            Cells(r, 1).Offset(2).Value = Trim(v(2))
            r = r - 1
        End If
            k = k + 1
    Next r
    MsgBox "총 " & k & "번 반복"
End Sub






블로그 이미지

Link2Me

,