如果列包含特定文本,则使用VBA将复制列A与我的单元格文本匹配

时间:2014-09-18 07:23:01

标签: vba

如果Sheet2中的C列包含字符串“ciao”,则复制到D列,A列与该单元格匹配。

更具体地说,这是一个例子:

    col A:         
    row1: 1        
    row2: 2        
    row3: 3        
    row4: 4        

    col C:        
    row1: one        
    row2: ciao        
    row3: three        
    row4: ciao        

    col D:  (what I want)      
    row1:        
    row2: 2        
    row3:        
    row4: 4        

这是我复制整行的代码。但我想只复制匹配的A列:

   Dim bottomC As Integer
   bottomC = Sheets("Sheet2").Range("C" & Rows.Count).End(xlUp).Row

   Dim c As Range
   For Each c In Sheets("Sheet2").Range("C1:C" & bottomC)
       If c.Value = "ciao" Then
           c.EntireRow.Copy Worksheets("Sheet2").Range("D" & Rows.Count).End(xlUp).Offset(1)
       End If
    next c

谁能帮帮我?

2 个答案:

答案 0 :(得分:1)

这遍及C的每个实例,如果c匹配" Ciao"它将单元格2的值向左(A列)复制到右侧的单元格(D列)

您还应该使用更多描述性变量名称&在模块的开头声明所有变量 - 这样可以更容易地发现任何错误。

我会按如下方式编写此代码:

Dim lastrow As Integer
Dim Myrange As Range

   lastrow = Sheets("Sheet2").Range("C" & Rows.Count).End(xlUp).Row

   For Each Myrange In Sheets("Sheet2").Range("C1:C" & lastrow)
       If Myrange = "ciao" Then Myrange.Offset(0, 1) = Myrange.Offset(0, -2)

    Next Myrange

答案 1 :(得分:1)

Dim bottomC As Integer
bottomC = Sheets("Sheet2").Range("C" & Rows.Count).End(xlUp).Row

Dim cRow As Long

Dim c As Range
For Each c In Sheets("Sheet2").Range("C1:C" & bottomC)
    If c.Value = "ciao" Then
        cRow = c.Row
        Sheets("Sheet2").Range("D" & cRow).Value = c.Offset(, -2).Value
    End If
next c

这应该有效。

编辑:我测试了c.Row并且它有效。