셀에서 단어를 가져오고 싶습니다. 예를 들어 A2 셀의 값은 "My name is jayson"입니다. 나는 단어를 얻고 싶다 : "이름"& "jayson". 3 자 미만의 단어는 제외하고 싶습니다. 수식/함수를 사용하여 Excel에서 어떻게 수행합니까?셀의 단어를 Excel에서 얻는 방법
감사합니다.
셀에서 단어를 가져오고 싶습니다. 예를 들어 A2 셀의 값은 "My name is jayson"입니다. 나는 단어를 얻고 싶다 : "이름"& "jayson". 3 자 미만의 단어는 제외하고 싶습니다. 수식/함수를 사용하여 Excel에서 어떻게 수행합니까?셀의 단어를 Excel에서 얻는 방법
감사합니다.
이 코드는 접합 할 데이터가 들어있는 시트에서 실행해야합니다. 난 당신이 열에서 작업하는 것으로 가정 한
코드
"텍스트 나누기"엑셀의를 사용하여 이러한 문자열을 분할 3,516,
{업데이트 : 추가 없음 루프 버전}
Original Code
Sub Spliced()
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Dim rng1 As Range
Dim objRegex
Dim X
Dim lngRow As Long
Set ws1 = Sheets(1)
Set rng1 = ws1.Range(ws1.[a1], ws1.Cells(Rows.Count, "A").End(xlUp))
Set ws2 = Sheets.Add
X = rng1.Value2
Set objRegex = CreateObject("vbscript.regexp")
With objRegex
.Pattern = "\b\w{1,3}\b"
.Global = True
End With
For lngRow = 1 To UBound(X)
X(lngRow, 1) = Application.Trim(objRegex.Replace(X(lngRow, 1), vbNullString))
Next
ws2.Range(rng1.Address) = X
ws2.Columns("A").TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Space:=True
End Sub
Updated:No loops
Sub Spliced_NoLoops()
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Dim rng1 As Range
Dim objRegex
Dim strDelim As String
Dim strOut As String
strDelim = "||"
Set ws1 = Sheets(1)
Set rng1 = ws1.Range(ws1.[a1], ws1.Cells(Rows.Count, "A").End(xlUp))
strOut = Join(Application.Transpose(rng1), strDelim)
Set ws2 = Sheets.Add
Set objRegex = CreateObject("vbscript.regexp")
With objRegex
.Pattern = "\b\w{1,3}\b"
.Global = True
End With
ws2.Range(rng1.Address) = Application.Transpose(Split(Application.Trim(objRegex.Replace(strOut, vbNullString)), "||"))
ws2.Columns("A").TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Space:=True
End Sub
,536,
+1 하하! 정규 표현식 사용! 단순히 그것을 사랑해 !!!! –
코드의'.TextToColumns'는 나에게 아이디어를주었습니다. '.TextToColumns'를 먼저 사용하고 autofilter를 사용하여 4 자 미만의 단어를 제거하는 방법은 어떨까요? 루프를 반복하지 않아도되므로 시간을 절약 할 수 있습니까? 이것에 대한 당신의 생각은 무엇입니까? –
@SiddharthRout autofilter를 사용하고 사용 된 모든 열을 지워야하기 때문에 테스트 문자열의 길이에 따라 상당한 수 있습니다. 나는 변종 배열이 더 빠를 것이라고 생각한다. 아마도 가능성있는 레코드 크기를 가진 머리카락을 나누어 주겠지 만 – brettdj
당신은
은 다음과 대략 수행이 함수에 셀 - 투 - 분할의 범위를 통과 ... 당신이 그렇게 처음부터 코딩 시도했다 표시되지 않습니다 :
항상 실행하기 전에 작업을 저장하십시오 모든 VBA. 건배, 행복한 코딩.
function splitter(byref rng as range)
dim return_value as collection
set return_value = new collection
dim split_result as variant
dim idx as integer
split_result = split(rng.value, " ")
for idx = lbound(split_result) to ubound(split_result)
if len(split_result(idx)) > 2 then
return_value.add(split_result(idx))
end if
next
splitter = return_value
end function
Windows 나 Mac OS를 직접 테스트 할 수는 없지만 거의 그렇지 않은 경우 구문이 정확해야합니다.
그것은'# NAME? '을 제공합니다. 나는이 함수를 다음과 같이 사용했다.'= splitter (C5 : C6)' –
아, 이것은 사용자 정의 함수 (UDF)이다. "사용자 정의 기능에 액세스하기"(http://www.fontstuff.com/vba/vbatut01.htm)를 참조하십시오. 제 사과를 받아 들여야합니다. 실행해야하지만, 내일 언젠가 다시 체크인 할 것입니다.귀하의 프로젝트와 함께 행운을 빈다. – bernie
결과를 어떻게 보이게할까요? 예를 들어, 하나의 셀에 "name jayson"을 원하십니까? –
각 셀에 하나씩, 예를 들어 결과는 두 번째 시트에있을 수 있습니다 : A1 : 이름, A2 : jayson. 나중에이 값을 사용하겠습니다. :) –