我想從單元格中獲取單詞。例如,單元格A2的值爲「我的名字是jayson」。我想要得到的話:「名字」&「傑森」。我想排除少於3個字符的單詞。我如何在Excel中使用公式/函數來做到這一點?如何從excel中的單元格中獲取單詞
謝謝。
我想從單元格中獲取單詞。例如,單元格A2的值爲「我的名字是jayson」。我想要得到的話:「名字」&「傑森」。我想排除少於3個字符的單詞。我如何在Excel中使用公式/函數來做到這一點?如何從excel中的單元格中獲取單詞
謝謝。
該代碼應該從包含要拼接的數據的工作表運行。我假設你在列工作一個
代碼
變體陣列用於使這一種有效的方法
012拆分這些字符串{更新:增加了無環路版本}
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
+1哈哈!使用正則表達式!只是喜歡它! – 2012-03-30 08:10:15
代碼中的'.TextToColumns'給了我一個想法。如何先使用'.TextToColumns',然後使用自動篩選去除少於4個字符的單詞?將節省時間,因爲我們將不必循環?你對此有何看法? – 2012-03-30 09:25:04
@SiddharthRout,因爲您必須自動過濾,然後清除所有使用的列,根據測試字符串的長度,這可能相當可觀。我認爲變體陣列會更快 - 雖然可能會分裂毛髮給出可能的記錄大小 – brettdj 2012-03-30 09:32:37
你不告訴你已經嘗試過的東西,從地上爬起來,以便編碼...
傳遞細胞與分裂的範圍內,以這個函數做大致有以下幾種:
請始終運行之前保存您的工作任何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)' – 2012-03-30 02:20:57
啊,這是一個用戶自定義函數(UDF)。請參閱「訪問您的自定義函數」(http://www.fontstuff.com/vba/vbatut01.htm)請接受我的道歉,我必須運行,但明天某個時候會再回來。祝您的項目好運。 – bernie 2012-03-30 02:26:53
你想讓結果看起來像什麼,例如,你想在一個單元格中使用「name jayson」嗎? – 2012-03-30 02:01:12
每個單元格中有一個,例如結果可以在第二個表格中:A1:name,A2:jayson。我將在稍後使用該值。 :) – 2012-03-30 02:23:07