复制列中的特定值

时间:2018-01-14 16:00:46

标签: excel vba excel-vba copy

我需要一些VBA帮助。我想复制列中的值。 参考图片,我想在值为" Dept / Branch code:144"时开始复制。因为这是唯一的值是一致的并且停止复制,直到单元格值为" Total"。请帮忙!!!!我无法使用范围进行复制,因为te范围在其他工作簿中可能不一致。

Excel Data

Sub Copycolumn()
For i = 1 To 100
If Left(Cells(i, "A").Value, 21) = ("Dept/Branch code: 144") Then
Cells(i, "A").Copy Destination:=Range("C1")
End If
Next
End Sub 

4 个答案:

答案 0 :(得分:0)

如果要在新列表中保存单元格的位置,请尝试此操作

Cells(i, "A").Copy Destination:=Range("C" & i)

如果你想在新列表中创建单元格,那么你的代码应该是这样的:

Sub Copycolumn()
n = 0
For i = 1 To 100
If Left(Cells(i, "A").Value, 21) = ("Dept/Branch code: 144") Then
n = n + 1
Cells(i, "A").Copy Destination:=Range("C" & n)
End If
Next
End Sub 

答案 1 :(得分:0)

你可以使用范围!下面的代码将找到开始复制的第一行,然后使用它来查找" Total *"的第一个实例,然后将该范围复制到单元格C1

Sub gogo()
    START_ROW = Application.WorksheetFunction.Match("Dept/Branch code: 144*", Range("A:A"), 0)
    END_ROW = Application.WorksheetFunction.Match("Total*", Range("A" & START_ROW & ":A5000"), 0) + START_ROW - 1
    Range("A" & START_ROW & ":A" & END_ROW).Copy
    Range("C1").PasteSpecial
End Sub

此代码不使用任何循环,它只是利用Excel内置的超快速功能来查找MATCH,因此如果你有一张表有一个MATCH,它会快得多吨条目

另请注意,在" Total"结尾处使用外卡*和"部门/分行代码:144"做这场比赛所以你不必去除弦乐。

答案 2 :(得分:0)

您可以使用Range对象,您可以使用Find功能查找"Dept/Branch code: 144"的第一个单元格以及要复制的最后一个单元格"Total"

<强>代码

Option Explicit

Sub Copycolumn()

Dim StartRng As Range, FinishRng As Range, CopyRng As Range

With Sheets("Sheet1") ' modify "Sheet1" to your sheet's name
    Set StartRng = .Columns(1).Find(what:="Dept/Branch code: 144", LookIn:=xlValues, LookAt:=xlPart)
    If StartRng Is Nothing Then ' check if Find failed
        MsgBox "Unable to Find `Dept/Branch code: 144`", vbCritical
        Exit Sub
    End If

    Set FinishRng = .Columns(1).Find(what:="Total", LookIn:=xlValues, LookAt:=xlPart)
    If FinishRng Is Nothing Then ' check if Find failed
        MsgBox "Unable to Find `Total`", vbCritical
        Exit Sub
    End If

    ' set the range to be copied
    Set CopyRng = .Range(.Cells(StartRng.Row, 1), .Cells(FinishRng.Row, 1))

    ' copy the Range
    CopyRng.Copy Destination:=.Range("C1")

End With

End Sub

答案 3 :(得分:0)

如果您的“部门/分支代码”没有重复项,您可以在一行中完成所需的工作

Columns(1).Find("*144*", , xlValues, xlWhole).Resize(10).Copy Range("C1")
相关问题