我有一个零件编号列表,如下所示,每个零件编号都有一个范围起始值和结束值,需要替换零件号中的***。
我正在尝试识别范围起始值和结束值,在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
Sheet2(RangeTable)看起来像这样,这个值需要按顺序保持不顺序
Sheet3(PartNumbers)是输出的结果,它应该在390处停止,但它会继续通过所有RangeTable值。
答案 0 :(得分: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
该陈述基本上是说如果RangeTable表的A列中的记录大于或等于Tabelle1表的B列中的值,并且小于或等于Tabelle1表中C列中的值,然后在PartNumbers表的A列中创建一个新单元格,其值为Tabelle1表格的A列(该值中的任何&#34; ***&#34;替换为RangeTable A列中的值片)。
考虑到您的工作表中没有任何表格在B或C列中有任何,我无法理解您的代码如何设法将任何内容写入PartNumbers表单?!?!