2016-08-19 43 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表单?!?!