使用VBA识别给定范围

时间:2016-08-19 07:19:24

标签: excel vba excel-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(RangeTable)看起来像这样,这个值需要按顺序保持不顺序

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

Sheet3(PartNumbers)是输出的结果,它应该在390处停止,但它会继续通过所有RangeTable值。

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

1 个答案:

答案 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表单?!?!