如果row包含指定的值,则将ID复制到第一列

时间:2015-10-20 15:27:34

标签: excel vba excel-vba for-loop

如果一行包含值“car”,我试图将ID单元格的内容复制到A1。

例如,如果行D12包含“car”,我想将单元格B12的内容复制到A12。

目前这是我的代码:

Dim lastRow As Long
Dim cell As Range

lastRow = Range("A" & Rows.Count).End(xlUp).Row + 1

For Each cell In Range("D2:D" & lastRow)
If InStr(1, cell.Value, "CAR") <> 0 Then
            cell.Offset(0, -3).Value = "test"
    End If
Next

所以目前代码中找到的行是“car”,但是使用值“test”填充单元格。我正在努力研究如何引用/复制单元格。

这是因为我的工作表的第一列需要将值连接为ID,我不想将其应用于此字符串。

感谢您的任何建议/帮助!

2 个答案:

答案 0 :(得分:1)

插入到A列中的“test”的原因是代码所指定的内容。需要更改代码以反映需要的内容。

如果需要B列的内容,则将字符串“test”替换为:

cell.Offset(0, -2).Value

所以整行都会读到:

cell.Offset(0, -3).Value = cell.Offset(0, -2).Value

由于您在D列中进行迭代,cell位于D列。偏移部分表示“从D列移动三个位置并将值从两列放置”。或者同一行上的A列,它是D列中当前单元格左侧的3个单元格,并将B列中的值放在同一行上,即D列中当前单元格左侧的2个单元格。 / p>

答案 1 :(得分:1)

另一种快速方法是使用autifilter。 例如:

Sub Button1_Click()
    Dim lastRow As Long
    Dim rng1 As Range, rng2 As Range

    Application.ScreenUpdating = 0
    lastRow = Range("D" & Rows.Count).End(xlUp).Row + 1

    Columns("D:D").AutoFilter Field:=1, Criteria1:="=*Car*"

    Set rng1 = Range("A2:A" & lastRow).SpecialCells(xlCellTypeVisible)
    Set rng2 = Range("B2:B" & lastRow).SpecialCells(xlCellTypeVisible)

    rng1.Value = rng2.Value

    ActiveSheet.AutoFilterMode = 0

End Sub