Excel - 选择列的末尾+其他行

时间:2014-07-09 17:03:02

标签: excel vba excel-vba

我正在尝试创建一个宏来选择我的工作表中的某些数据。我有一张表格,其中包含以下数据:

Windows("Item checkout workbook_New.xlsx").Activate
Range("A2:G300").Select
Selection.Copy
Windows("VLookup test.xlsx").Activate
Sheets("Sheet1").Select
Range("A2:G2").Select
ActiveSheet.Paste
Application.CutCopyMode = False

Sheets("Sheet1").Range("A2:G300").Copy Sheets("Sheet2").Range("A2")
Sheets("Sheet2").Select
Application.CutCopyMode = False

输入此数据后,我有两列H2:H300I2:I300,其中已包含用于Vlookup的公式,可从A2:G300获取信息。

我当时需要做的是只选择相关数据并将其复制回Windows("Item checkout workbook_New.xlsx")。根据相关数据,我只需要选择包含A2:G300范围内数据的单元格以及匹配的H2:I300单元格。看到所有H2:I300个单元格都有数据,我不知道如何做到这一点。我尝试创建一个宏,使用END来选择所有列A,然后选择与它一起使用的行,但这就是我得到的,你可以看到它不起作用:

Range("A2").Select
Range(Selection, Selection.End(xlDown)).Select
Range("A2:I78").Select
Selection.Copy

我对VBA并不擅长,因此很难动起来,但我觉得应该有办法让它发挥作用。任何建议都会很棒!

2 个答案:

答案 0 :(得分:1)

Range("A2").Select
Range(Selection, Selection.End(xlDown)).EntireRow.Select
Selection.Copy
Windows("Item checkout workbook_New.xlsx").Activate
Sheets("Sheet1").Select
Range("A2").Select
ActiveSheet.Paste
Application.CutCopyMode = False

搞定了!

答案 1 :(得分:0)

基于你自己的答案,似乎我可能误解了你的问题。我收集的是你正在寻找一种在工作表中选择相关单元格的方法。相关单元可以属于两个范围之一。在一个范围内,应选择非空单元格。在另一个范围中,应选择与值匹配的单元格。 (您只需添加复制/粘贴代码)

我在下面解决了这个问题。

Sub test()
    'store results here
    Dim result As Range

    setupTest
    'check this range and return items that are not empty
    selectMatchingCells Range("A1:D1"), result
    'check this range and return items that match value
    selectMatchingCells Range("B2:C4"), result, "hi"
    result.Select
End Sub

Function setupTest()
    Range("A1").Value = "anything"
    Range("c1").Value = "may go"
    Range("D1").Value = "here"
    Range("B2").Value = "hi"
    Range("B3").Value = "but not here"
End Function

Function selectMatchingCells(search As Range, result As Range, Optional searchValue As String = "")
    For Each cell In search
        'are we checking that cell value matches string, or if cell has a value at all?
        If searchValue = vbNullString Then
            'check if cell is not empty
            If IsEmpty(cell) = False Then selectCell result, cell
        Else
            'check if value matches
            If cell.Text = searchValue Then selectCell result, cell
        End If
    Next cell
End Function

Function selectCell(result As Range, cell As Variant)
    'check if result range already exists or not
    If result Is Nothing Then
        'make range equal to cell
        Set result = cell
    Else
        'add cell to existing range
        Set result = Union(result, cell)
    End If
End Function

请更清楚,以避免误传,谢谢!