2011-05-20 19 views
0

我並不是新的Excel VBA,但也不是專家。我在奇怪的問題,有人plz幫助我,我不能再想了。如何根據搜索字符串挑選先例和後代行.- X

我的Excel故事: 我在電子表格中有大約40,000行。行是在如下所述的圖案:

ROW1)來源> APPNAME1

ROW2)目的地>對應VALUE1

ROW3)目的地>對應值2

ROW4)來源> AppName2

row5)目的地>相應值3

ROW6)來源> AppName3

ROW7)目的地>對應VALUE1

現在,如果通過搜索AppName的讓我們是APPNAME1然後ROW2和ROW3應與ROW1一起復制到下一張片材。 如果我搜索Value1,那麼它應該將row1,row2,row3的row7和row6複製到下一個工作表。這意味着搜索字符串的先例和後代的行應複製到下一張表。

因爲我的名氣點小於10

是否有任何人誰可以引導和幫助我,我已經花了我3天這一點,但沒有得到任何結果,我無法提供樣紙。 我有一個非常關鍵的時間表準備這個清單我手動做它,它需要5-6天手動。我想自動化它,但卡住了。

這裏是我的代碼不工作:

Sub GenerateInventory() 
On Error GoTo ErrHandler: 
Set r = ActiveSheet.UsedRange 
nLastRow = r.Rows.Count + r.Row - 1 
Set r1 = Cells(2, 8) 
For i = 2 To nLastRow Step 1 
If InStr(Cells(i, 6), "CMRI") <> 0 Then 
Set r1 = Union(r1, Cells(i, 1)) 
End If 
Next 
r1.EntireRow.Select 
r1.EntireRow.Copy 
Sheets("MS4Inventory").Select 
Cells(100, 1).End(xlUp).Offset(1, 0).Select 
ActiveSheet.Paste 
Exit Sub 
ErrHandler: 
MsgBox Err.Number & ": " & Error.Description 

End Sub 

這個代碼是沒有超出該商標仍處於WIP。

+0

什麼都行你在這3天內試過了嗎?讓我們知道,否則我們不能幫你糾正它... – 2011-05-20 22:53:57

+0

你的例子很難理解。請向我們展示您的工作表樣本,並正確格式化,例如作爲代碼來獲取固定寬度的字體。 – 2011-05-20 22:55:43

+0

你不需要10個聲望來正確地格式化你的例子。只需將文本的樣本作爲文本寫入,將其格式化爲「代碼」,然後使用空格等將行和列對齊。我仍然不明白您的工作表是什麼樣的。單元格A2是否真的包含文本'「目的地>相應的值1」? – 2011-05-21 21:44:10

回答

0

您的示例數據和要求很難理解。

我修改了一下你的代碼,這可能會幫助你進步。
如果你可以發表你的數據片段和所需的結果,我們可以纔去編碼進度進一步

Sub GenerateInventory() 
    Dim r As Range, r1 As Range, rMS4Inventory As Range 
    Dim nLastRow As Long, i As Long 
    Dim wb As Workbook, sh As Worksheet, shMS4Inventory As Worksheet 

    On Error GoTo ErrHandler: 

    Set wb = ActiveWorkbook 
    Set sh = wb.ActiveSheet 
    Set shMS4Inventory = wb.Worksheets("MS4Inventory") 

    Set r = sh.UsedRange 
    nLastRow = r.Rows.Count + r.Row - 1 
    Set r1 = sh.Cells(2, 8) 
    For i = 2 To nLastRow Step 1 
     If InStr(sh.Cells(i, 6), "CMRI") <> 0 Then 
      Set r1 = Union(r1, sh.Cells(i, 1)) 
     End If 
    Next 
    Set rMS4Inventory = shMS4Inventory.Cells(100, 1).End(xlUp).Offset(1, 0).EntireRow 
    r1.EntireRow.Copy rMS4Inventory 
Exit Sub 
ErrHandler: 
    Resume 
    MsgBox Err.Number & ": " & Error.Description 

End Sub 
0

,讓我們抓住問題....

你要搜索什麼並返回屬於您搜索着陸的「段落」的三行

在假設所有段落都是TRIPLES的情況下,標記「段落」開頭的所有行具有相同的屬性: rownumber模3具有相同的常數值。因此,無論您的搜索是以哪種方式進行,您都需要返回,直到rownumber模3獲得與您的常數值相等的值。到達那裏後,你播放3行 - 並停止

現在編碼應該變得非常簡單....你開除搜索或通過其他方式將光標置於「的地方」,並觸發Sub Grab()

Sub Grab3Rows() 
Dim Idx As Long 
    Idx = Selection.Row 

    'find start of paragraph 
    Do While Idx Mod 3 <> 2 ' change this constant as per your sheet 
     Idx = Idx - 1 
    Loop 

    'select the 3 cells at the start of paragraph 
    Selection.Offset(Idx - Selection.Row, 0).Resize(3, 1).Select 

    'do the rest 
End Sub 

在假設段落n元組,幷包含在第一行字符串「源」,你可以做類似的事情:徘徊無論你搜索的土地,你,直到你在包含字符串「源」一行到達由排走後排,從那裏你玩了行,直到你再次達到包含「源」

Sub GrabByTextString() 
Dim Idx As Long 
    Idx = Selection.Row 

    'find start of paragraph 
    Do While Left(Selection.Offset(Idx - Selection.Row, 0), 6) <> "Source" 
     Idx = Idx - 1 
    Loop 

    'select the the start of paragraph 
    Selection.Offset(Idx - Selection.Row, 0).Select 

    'expand selection until we reach next paragraph start 
    Idx = 1 

    Do While Left(Selection(1, 1).Offset(Idx, 0), 6) <> "Source" 
     Idx = Idx + 1 
     Selection.Resize(Idx, 1).Select 
    Loop 

    'do the rest 
End Sub