2017-02-22 70 views
2

我有一個excelsheet列'範圍',其中我有隨機順序的多行文本。我需要在多行文本中找到特定的前綴並將其粘貼到下一列。Excel宏多行查找條件並插入

目標是按照DS> FP> NP> HE等順序查找前綴,其中如果DS前綴不存在FP等等。

試片的結果看起來如下: -

enter image description here

我有下面的代碼到現在爲止,請幫我解決這個任務: -

Sub Rangess() 

    Dim colNum As Integer 
    colNum = ActiveSheet.rows(1).Find(What:="Range", LookAt:=xlWhole).Column 
    ActiveSheet.Columns(colNum + 1).Insert 
    ActiveSheet.Cells(1, colNum + 1).Value = "NEW" 

End Sub 
+0

您可以使用拆分來分隔多行文本,然後使用左來獲取前兩個字母。要找到前綴,可以使用Select ... Case函數或多個if語句(如果您願意)。 – Matts

+0

感謝matts,我是宏觀製作的新手,請你幫我解決 – sapna

+0

當然我可以幫忙,但請研究並嘗試自己編寫代碼。 – Matts

回答

1

你可以使用我已經測試過的下面的代碼您提供的測試用例及其工作正常。

Sub Test() 
    Dim colNum As Integer 
    colNum = ActiveSheet.Rows(1).Find(What:="Range", LookAt:=xlWhole).Column 
    ActiveSheet.Columns(colNum + 1).Insert 
    ActiveSheet.Cells(1, colNum + 1).Value = "NEW" 

    'counting no of rows 
    Dim No_Of_Rows As Long 
    No_Of_Rows = ActiveSheet.UsedRange.Rows.Count 

    Dim Range_col_val As Variant 
    Dim split_Range_col As Variant 
    Dim Range_splited_cell_val As Variant 
    Dim Prefix As Variant 
     Prefix = Array("DS", "FP", "NP", "HE") 
    Dim FLAG As Boolean 
    Dim j As Integer 



    'Looping for rows 

    For i = 2 To No_Of_Rows 

     'Extracting Data from col Range 

     Range_col_val = Cells(i, colNum).Value 
     split_Range_col = Split(Range_col_val, vbLf) 
     j = 0 
     ActiveSheet.Cells(i, colNum + 1).Value = split_Range_col(0) 
     FLAG = False 
     While FLAG = False And j < 5 
      'Looping for Each Line in Col Range 
      For k = LBound(split_Range_col) To UBound(split_Range_col) 
       Range_splited_cell_val = split_Range_col(k) 
       If (Range_splited_cell_val Like Prefix(j) & "*") Then 
        ActiveSheet.Cells(i, colNum + 1).Value = Range_splited_cell_val 
        FLAG = True 
       End If 
      Next k 
      j = j + 1 
     Wend 
    Next i 
End Sub 

編輯代碼以寫入第一行,如果沒有選擇工作。

+0

謝謝mohit如果我的選擇在多元文本中沒有出現,並且我想要使用什麼第一行被粘貼在NEW列 – sapna

+0

我已經編輯了上面的代碼,只需要在開始時設置第一行,所以如果找到匹配,那麼col值將會改變,否則它將是Range的第一行 – Mohit

1

嘗試:

Sub test() 

Dim colNum As Long 
    colNum = ActiveSheet.Rows(1).Find(What:="Range", LookAt:=xlWhole).Column 
    ActiveSheet.Columns(colNum + 1).Insert 
    ActiveSheet.Cells(1, colNum + 1).Value = "NEW"   


Dim Arr As Variant 
Dim Lr As Long, R As Long 
Dim i As Long, n As Long 
Dim V As String, F As String 

Lr = Cells(Rows.Count, colNum).End(xlUp).Row  
Arr = Array("DS", "FP", "NP", "HE") 

For R = 2 To Lr 
    V = Cells(R, colNum).Value 
    For i = 0 To UBound(Arr) 
    n = InStr(V, Arr(i)) 
    If n <> 0 Then 
     F = Mid(V, n) 
     If InStr(F, vbLf) <> 0 Then F = Split(F, vbLf)(0) 
     Cells(R, colNum + 1).Value = F 
     Exit For 
    End If 
    Next 
Next 

End Sub 
+0

謝謝Fadi如果我的選擇中沒有任何一個出現在多元文本中,並且我希望將第一行粘貼到NEW列中 – sapna