2013-05-22 52 views
1

我有一組包含排列在列中的ID號的說明。例如:Excel VBA - 查找一組字符並將其設置爲字符串

列A

這與它ID12345的ID號的描述。

這是帶ID號的說明ID66666。

這是ID99999中帶有ID號的說明。

Id號碼總是格式爲「IDXXXXX」我想以某種方式修剪掉每個這些單元格中的所有文本,並留下該ID號碼。

我的想法: 這可以通過找到一個像「ID ?????」這樣的字符串來完成嗎?並將其設置爲一個變量,然後用該變量替換單元格的內容?或者通過刪除單元格中的所有字符 - 除了「ID ?????」

任何幫助,將不勝感激,謝謝。

+1

使用正則表達式來獲得後面的ID號碼。 –

+0

任何機會的例子或資源,我可以使用如何做到這一點? – user2408171

回答

2

我爲你寫的代碼將遍歷A列中的所有項目。它將把每個單元格中的所有單詞分成一個數組。如果單詞長度爲7或8個字符,則可能是IDxxxxx。它將執行一些檢查以確定它是否真的與IDxxxxx語法匹配。如果是這樣,它會替換單元格的內容,只用ID刪除所有剩餘的文本。

Sub ReplaceContentWithIDs() 

    Dim ws As Worksheet 
    Set ws = Sheets("Sheet1") ' or your sheet name 
    Dim rng As Range 
    Dim i&, lr&, j& 
    Dim arr 
    Dim str$ 

    lr = ws.Range("A" & Rows.Count).End(xlUp).Row 
    ' starting from 1 - if you have headers change to 2 
    For i = 1 To lr 
     Set rng = ws.Range("A" & i) 
     arr = Split(CStr(rng.Value), " ") 
     For j = LBound(arr) To UBound(arr) 
      str = arr(j) 
      If (Len(str) = 7) Or (Len(str) = 8) Then 
       If (StrComp(Left(str, 2), "ID", vbTextCompare) = 0) And _ 
       IsNumeric(Right(Left(str, 7), 5)) Then 
        ' found it 
        If Len(str) = 8 Then 
         rng.Value = Left(str, 7) 
        ElseIf Len(str) = 7 Then 
         rng.Value = str 
        End If 
       End If 
      End If 
     Next j 
     Set rng = Nothing 
    Next i 

End Sub 
+1

這工作非常該死的完美。謝謝你的時間! – user2408171

+0

@ user2408171熱烈歡迎 – 2013-05-22 08:22:45

1

我把這個作爲我的智力挑戰,並考慮到這一天結束時,通過Aladdinpgc01看到公式上的Excel先生論壇,我做了一些工作,並與本想出了後CSE(數組公式):

=IF(ISNUMBER(LOOKUP(9.99999999999999E+307,SEARCH({"ID0","ID2","ID3","ID4","ID5","ID6","ID7","ID8","ID9"},A1))),MID(A1,LOOKUP(9.99999999999999E+307,SEARCH({"ID0","ID2","ID3","ID4","ID5","ID6","ID7","ID8","ID9"},A1)),7),"") 

我也有一些運氣這個CSE數組公式:

=IF(ISNUMBER(SEARCH("ID"&{1,2,3,4,5,6,7,8,9},$A$1)),MID(A$1,SEARCH("ID"&{1,2,3,4,5,6,7,8,9},$A$1),7)) 
+0

不錯的努力。然而,這些公式不適用於'IDxxxxx.'末尾的'.'('dot')的情況。另外,該操作只想替換單元格的內容 - 他可以通過刪除列A來實現if該公式是在列B所以不是主要的東西 – 2013-05-22 16:53:16

+0

是的,他們肯定需要一點調整(如包括一個'替代'功能可能用於其他角色),以及許多牙齒和幾個香菸中斷gnashing :) –

+0

下一個我可能會看看可能的**正則表達式**解決方案,但這是另一天... –

相關問題