【问题标题】:How to search, find, and select data from rows and copy to new sheet如何从行中搜索、查找和选择数据并复制到新工作表
【发布时间】:2015-06-02 10:48:24
【问题描述】:

我需要构建一个宏以在工作表 1 中找到所需的行,该行由 A 列中的值预先确定,然后将特定列的同一行中的值(本例中为 D:F)复制到表 2 上的预定位置。

不幸的是,我不能让宏总是引用相同的单元格,因为数据不会总是从 1A 开始,它可能从第 3 行或第 10 行或任何地方开始。这些列每次都应该保持在同一个位置,但我肯定需要宏来搜索 A 列中所需的内容。

另外,我不想复制整行,因为表 1 后面的列中有更多数据与我在表 2 中需要的内容完全无关。

下面是我需要发生的一个例子来更好地解释:

表 1(原始数据)

  |   A   |   B   |   C   |   D   |   E   |   F   |   G   |
--+-------+-------+-------+-------+-------+-------+-------+
1 | Title | M2011 | M2012 | M2013 | M2014 | M2015 |  TTM  |
2 |   1A  |   1B  |   1C  |   1D  |   1E  |   1F  |   1G  |
3 |   2A  |   2B  |   2C  |   2D  |   2E  |   2F  |   2G  |
4 |   3A  |   3B  |   3C  |   3D  |   3E  |   3F  |   3G  | 
5 |   4A  |   4B  |   4C  |   4D  |   4E  |   4F  |   4G  |

表 2(期望的结果)

  |   A   |   B   |   C   |   D   |  
--+-------+-------+-------+-------+
1 | Title | M2013 | M2014 | M2015 | 
2 |   2A  |   2D  |   2E  |   2F  | 
3 |   4A  |   4D  |   4E  |   4F  | 
4 |   3A  |   3D  |   3E  |   3F  |

【问题讨论】:

  • 你目前有什么代码?
  • 不幸的是,鉴于我不知道如何编写,与我所问的内容无关。到目前为止,我所要做的就是创建我需要的新工作表及其格式。

标签: vba excel


【解决方案1】:

这里有一段代码可以帮助你

Sub SetGrade()

Dim srcSheet As Worksheet
Dim trgtSheet As Worksheet
Dim foundVal As Object
Dim i

Set srcSheet = ThisWorkbook.Sheets(1)
Set trgtSheet = Workbooks("book2").Sheets(1)

For i = 1 To trgtSheet.Cells(trgtSheet.Rows.Count, "A").End(xlUp).Row 'iterate through column A in target sheet

    Set foundVal = srcSheet.Columns(1).Find(srcSheet.Range("a" & i).Value) 'take value from column a target sheet then look for it in column A sourcesheet

    srcSheet.Range(foundVal.Offset(0, 3), foundVal.Offset(0, 5)).Copy Destination:=trgtSheet.Range("B" & i) ' take cells columns D:F from found row and paste them into range starting at column B and row from which search criteria was taken

Next i

End Sub

您需要根据自己的情况调整工作簿名称等

【讨论】:

  • 我已将您的代码放入我的工作表中,但不确定如何得出所需的结果。我不太确定代码是否这样做(我对 excel 宏很陌生,但我没有看到代码在哪里根据 A 列的内容查找正确的行。
  • 基本上我需要它在 A 列中搜索一个值(比如在 1:250 的范围内),一旦找到该值,选择几列上的单元格(根据示例),将它们粘贴到所需的位置,然后重复我需要的下一行。我已经对工作簿名称进行了更改,但仍然看不到宏在哪里搜索我要查找的内容。
  • 我需要与以下代码等效的代码(用于其他代码),但要在行而不是列中搜索值,而不是复制整行,只需选择值 a几列结束。 Dim cell As Range For i = 1 To 200 Sheets("Download").Select If Cells(2, i).Value = "Symbol" Then Columns(i).Select Selection.Copy Sheets("Narrowed").Select Range ("A1").Select ActiveSheet.Paste End If
  • 在代码中添加了注释,应该可以消除您的疑虑
【解决方案2】:

我不知道如何让建议的公式搜索我需要的内容,所以我最终使用了它,然后删除了它提取的额外列。不是最花哨或最有效的方法,但完成了工作

 Sub DesperateTimes()
    Dim Cell As Range
    For i = 25 To 100
    Sheets("sheet1").Select
    If Cells(i, "A").Value = "Title" Then
    Rows(i).Select
    Selection.Copy
    Sheets("sheet2").Select
    Range("A1").Select
    ActiveSheet.Paste
    End If
    Sheets("sheet1").Select
    If Cells(i, "A").Value = "2A" Then
    Rows(i).Select
    Selection.Copy
    Sheets("sheet2").Select
    Range("A2").Select
    ActiveSheet.Paste
    End If
    Sheets("sheet1").Select
    If Cells(i, "A").Value = "4A" Then
    Rows(i).Select
    Selection.Copy
    Sheets("sheet2").Select
    Range("A3").Select
    ActiveSheet.Paste
    End If
    Sheets("sheet1").Select
    If Cells(i, "A").Value = "3A" Then
    Rows(i).Select
    Selection.Copy
    Sheets("sheet2").Select
    Range("A4").Select
    ActiveSheet.Paste
    End If
    Sheets("sheet2").Select
    Columns("E:EZ").Select
    Selection.ClearContents

    Next i

    End Sub

【讨论】:

    猜你喜欢
    • 2022-11-30
    • 1970-01-01
    • 2019-10-24
    • 2018-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-23
    • 1970-01-01
    相关资源
    最近更新 更多