셀 내에 다음 문자열이 있다고 가정 해 보겠습니다.
E. Stark, T. Lannister, A. Martell, P Baelish, B. Dondarrion 및 J. Mormont. Westeros의 과도한 노출 수준은 산발적 인 계절성 기후에 기여합니다. Nat. Proc. 아카. Sci. (2011) 3 : 142-149.
그리고 여기서 제목 만 추출하고 싶습니다. 내가 고려하고있는 접근 방식은 "이 문자열에서 텍스트를 가져 오지만 길이가 50 자 이상인 경우에만"이라는 스크립트를 작성하는 것입니다. 이렇게하면 "Stark, T"및 "Martell, P"와 같은 항목이 아닌 제목 만 반환됩니다. 지금까지 가지고있는 코드는 다음과 같습니다.
Sub TitleTest()
Dim txt As String
Dim Output As String
Dim i As Integer
Dim rng As Range
Dim j As Integer
Dim k As Integer
j = 5
Set rng = Range("A" & j) 'text is in cell A5
txt = rng.Value 'txt is string
i = 1
While j <= 10 'there are five references between A5 and A10
k = InStr(i, txt, ".") - InStr(i, txt, ". ") + 1 'k is supposed to be the length of the string returned, but I can't differenciate one "." from the other.
Output = Mid(txt, InStr(i, txt, "."), k)
If Len(Output) < 100 Then
i = i + 1
ElseIf Len(Output) > 10 Then
Output = Mid(txt, InStr(i, txt, "."), InStr(i, txt, ". "))
Range("B5") = Output
j = j + 1
End If
Wend
End Sub
물론 "."두 개가 아니면 잘 작동 할 것입니다. 나는 완전한 정보를 얻으려고 노력했다. InStr
같은 문자를 두 번 찾지 못하도록 함수 를 작성 하는 방법이 있습니까? 내가 잘못된 방식으로 진행하고 있습니까?
미리 감사드립니다.
편집 : 작동 할 수있는 또 다른 접근 방식 (가능한 경우)은 한 문자가 " any lower case letter
." 일 수있는 경우 입니다. 및 ".". 이것이 가능할까요? 나는 이것이 어떻게 이루어질 수 있는지에 대한 예를 찾을 수 없습니다 ...
여기 있습니다. 원하는대로 정확하게 작동합니다. 귀하의 코드로 판단하면 필요에 따라 매우 빠르게 조정할 수 있습니다.
Option Explicit
Sub ExtractTextSub()
Debug.Print ExtractText("E. Stark, T. Lannister, A. Martell, P Baelish, B. Dondarrion, and J. Mormont. Increased levels of nudity across Westeros contributes to its sporadic seasonal climate. Nat. Proc. Aca. Sci. (2011) 3: 142-149.")
End Sub
Public Function ExtractText(str_text As String) As String
Dim arr As Variant
Dim l_counter As Long
arr = Split(str_text, ".")
For l_counter = LBound(arr) To UBound(arr)
If Len(arr(l_counter)) > 50 Then
ExtractText = arr(l_counter)
End If
Next l_counter
End Function
편집 : 5 표는 즉시 내 코드를 개선하도록 만들었습니다. :) 이것은 50자를 생각하지 않고 가장 긴 문자열을 반환합니다. 또한 오류 처리기 및 점에 대한 상수. 또한 추출 끝에 점을 추가합니다.
Option Explicit
Public Const STR_POINT = "."
Sub ExtractTextSub()
Debug.Print ExtractText("E. Stark, T. Lannister, A. Martell, P Baelish, B. Dondarrion, and J. Mormont. Increased levels of nudity across Westeros contributes to its sporadic seasonal climate. Nat. Proc. Aca. Sci. (2011) 3: 142-149.")
End Sub
Public Function ExtractText(str_text As String) As String
On Error GoTo ExtractText_Error
Dim arr As Variant
Dim l_counter As Long
Dim str_longest As String
arr = Split(str_text, STR_POINT)
For l_counter = LBound(arr) To UBound(arr)
If Len(arr(l_counter)) > Len(ExtractText) Then
ExtractText = arr(l_counter)
End If
Next l_counter
ExtractText = ExtractText & STR_POINT
On Error GoTo 0
Exit Function
ExtractText_Error:
MsgBox "Error " & Err.Number & Err.Description
End Function
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다