VBA检查行的值然后另一个值并粘贴如果为真

时间:2016-12-09 23:41:47

标签: excel vba excel-vba

我有一个零件编号列表,其中包含简短说明和详细说明。列表的格式是在第一列中有一个部件号。在第二列中有一个描述代码。在第三列中有描述。描述是基于前面的描述代码的名称,简短描述或长描述。

查看截图示例: Original Dataset

如您所见,某些部分有三个描述,其中一部分没有。

我正在尝试从工作表1中获取数据并将信息粘贴到具有合并且正确的行结构的工作表2中。部件号,名称,短,长。

请参见屏幕截图示例:New Dataset

以下是我一直在使用的一些代码。我觉得我很接近或至少在正确的轨道上,但它肯定不起作用,目前正在抛出一个没有错误。

Dim i As Long

For i = 1 To Rows.Count
With ActiveWorkbook
.Sheets("Parts List").Range("A1").Select
    If .Sheets("Parts List").Cells(i, 1).Value = .Sheets("Product Description").Cells(i, 1) Then
    If .Sheets("Product Description").Cells(i, 2).Value = "DES" Then
    .Sheets("Parts List").Cells(i, 2).Value = .Sheets("Product Description").Cells(i, 2).Value
    ElseIf .Sheets("Product Description").Cells(i, 2).Value = "EXT" Then
    .Sheets("Parts List").Cells(i, 5).Value = .Sheets("Product Description").Cells(i, 2).Value
    ElseIf .Sheets("Product Description").Cells(i, 2).Value = "MKT" Then
    .Sheets("Parts List").Cells(i, 3).Value = .Sheets("Product Description").Cells(i, 2).Value
End If
Next i
End With

非常感谢任何和所有帮助。我真的只是试图让它循环通过这一张并提取东西并将它们放在另一张纸上。听起来很容易。

1 个答案:

答案 0 :(得分:1)

我会对您的代码进行一些小的更改,主要是为了保留您在目标表上写入哪一行的计数器,以及相当多的外观变化:

Dim srcRow As Long
Dim dstRow As Long

Dim srcWs As Worksheet
Dim dstWs As Worksheet

Set srcWs = ActiveWorkbook.Worksheets("Product Description")
Set dstWs = ActiveWorkbook.Worksheets("Parts List")
dstRow = 9  'Initially point to the header row

'Only do your For loop for cells that contain a product code, rather than
'for the 1 million rows in the worksheet
For srcRow = 1 To srcWs.Range("A" & srcWs.Rows.Count).End(xlUp).Row
    '.Sheets("Parts List").Range("A1").Select  'Not needed
    If dstWs.Cells(dstRow, "A").Value <> srcWs.Cells(srcRow, "A") Then
        'Increment destination row
        dstRow = dstRow + 1
        'Store part number
        dstWs.Cells(dstRow, "A").Value = srcWs.Cells(srcRow, "A").Value
    End If
    'Store other data
    Select Case srcWs.Cells(srcRow, "B").Value
        Case "DES"
            dstWs.Cells(dstRow, "B").Value = srcWs.Cells(srcRow, "C").Value
        Case "EXT"
            dstWs.Cells(dstRow, "E").Value = srcWs.Cells(srcRow, "C").Value
        Case "MKT"
            dstWs.Cells(dstRow, "C").Value = srcWs.Cells(srcRow, "C").Value
    End Select
Next

您收到的“下一步没有赞成”错误是由于If语句不匹配(您的第一个If语句没有相应的End If)和您的{{1} } block在你的With循环内开始,但在循环结束后结束。通过始终/一致地缩进代码,可以轻松获取这种类型的错误。下面是原始代码缩进后的样子:

For