2016-08-19 65 views
0

我有一個零件號碼列表,如下所示,每個零件號碼都有一個範圍起始值和最終值,它們需要替換零件號中的***。用VBA識別給定範圍

我想確定範圍的開始和結束值,在sheet2(RangeTable)上的範圍列表中查找它們,然後將其與單獨的零件編號連接起來,因此對於列A中的每個零件編號,範圍值在B列和C列中定義的數據將連接在sheet3(PartNumbers)上。

該代碼未標識範圍開始和結束值,並且正在爲範圍表中的所有值創建零件號。

Sub CompilePartNums() 

Dim WS1 As Worksheet 
Dim WS2 As Worksheet 
Dim WS3 As Worksheet 
Dim LR1 As Long 
Dim LR2 As Long 
Dim LR3 As Long 
Dim Ctr1 As Long 
Dim Ctr2 As Long 

Set WS1 = Worksheets("Tabelle1") 
Set WS2 = Worksheets("RangeTable") 
Set WS3 = Worksheets("PartNumbers") 

With WS1 
    LR1 = .Cells(.Rows.Count, "A").End(xlUp).Row 
End With 

With WS2 
    LR2 = .Cells(.Rows.Count, "A").End(xlUp).Row 
End With 

LR3 = 2 
For Ctr1 = 2 To LR1 
    For Ctr2 = 2 To LR2 
     Select Case WS2.Cells(Ctr2, 1) 
      Case WS1.Cells(Ctr1, 2) To WS1.Cells(Ctr1, 3) 
       WS3.Cells(LR3, 1) = replace(WS1.Cells(Ctr1, 1), "***", WS2.Cells(Ctr2, 1)) 
       LR3 = LR3 + 1 
     End Select 

    Next 
Next 

End Sub 

工作表Sheet1(Tabelle1)貌似這個並繼續向下ROW1210

Sheet1 (Tabelle1) Looks like this and continues down to ROW1210

Sheet2中(排列元素)看起來是這樣的,在這種需要的值留在這個順序不屬於連續

Sheet2 (RangeTable) looks like this, the values in this need to stay in this order which are not sequential

表Sheet 3(PartNumbers)是被輸出的結果,就應該在390停止但是它會繼續傳遞所有的RangeTable值。

Sheet3 (PartNumbers) is the results that are output, it should stop at 390 however it continues thru all the RangeTable values.

+0

我理解正確嗎?你在Tabelle1表的A列中有一個零件號碼清單,每個清單的格式都是'xxxx *** xxx'(或者可能只是'xxxx ***' - 可能沒有關係),並且RangeTable工作表A列中的另一份零件編號列表(格式相同)。在該表的B和C列中,您有一些值(比如B中的10和C中的22)。你想在PartNumbers表的A列產生記錄,一行說'xxxx10xxx',接下來說'xxxx11xxx'等,然後你想用Tabelle1表中的下一個零件號做同樣的事情? – YowE3K

+0

我想它會幫助人們,如果你發佈了你的問題和期望的解決方案的截圖。 –

+0

下面添加屏幕截圖以提供幫助。YowE3K這是正確的 – Atishk87

回答

0

我會張貼此作爲一個「答案」的時刻,只是因爲它太複雜了一條註釋解釋,但我認爲它威力東西與你問題。

你的Select Case聲明:

Select Case WS2.Cells(Ctr2, 1) 
    Case WS1.Cells(Ctr1, 2) To WS1.Cells(Ctr1, 3) 
     WS3.Cells(LR3, 1) = replace(WS1.Cells(Ctr1, 1), "***", WS2.Cells(Ctr2, 1)) 
     LR3 = LR3 + 1 
End Select 

這種說法實際上等同於

If WS2.Cells(Ctr2, 1) >= WS1.Cells(Ctr1, 2) And _ 
    WS2.Cells(Ctr2, 1) <= WS1.Cells(Ctr1, 3) Then 
    WS3.Cells(LR3, 1) = replace(WS1.Cells(Ctr1, 1), "***", WS2.Cells(Ctr2, 1)) 
    LR3 = LR3 + 1 
End If 

而且這種說法基本上是說,如果在排列元素表的A列的紀錄是更大大於或等於Tabelle1工作表B列中的值並且小於或等於Tabelle1工作表C列中的值,然後在部分編號工作表的A列中創建一個新單元格,其中Tabelle1的列A的值表(與該值中的任何「***」將被RangeTable表A列中的值所取代)。

考慮到您的工作表沒有任何列B或C中的任何東西,我無法理解您的代碼如何設法將任何內容寫入PartNumbers表單?!?!