Excel VBA-按标题搜索列并粘贴到新表中

时间:2018-11-03 23:42:52

标签: excel vba copy copy-paste paste

我是VBA的新手...试图按名称搜索特定的列并将其粘贴到新的工作表中。

到目前为止,我的内容似乎比较笨拙,没有复制或粘贴所需的列,而是我当前在剪贴板上的内容!

理想情况下,我将能够搜索3个不同的列并将其粘贴到新工作表上。

任何帮助将不胜感激

Dim CheckText As String
Dim CheckRow As Long
Dim FindText As Range
Dim CopyColumn As String
CheckText = “Bsp” 'Bsp is an example header
CheckRow = 1 'Row with desired header
Dim oldsheet As Worksheet

Set oldsheet = ActiveSheet
Sheets.Add(After:=Sheets(Sheets.Count)).Name = "Pivot"
oldsheet.Activate
ActiveSheet.Select
'trying here to create a new sheet, name it and go back to the first sheet
Set FindText = Rows(CheckRow).Find(CheckText)
If FindText Is Nothing Then
MsgBox "Bsp not found"
End If

CopyColumn = Cells(CheckRow, FindText.Column).Column
Columns(CopyColumn).Select.Copy

Sheets("Pivot").Select

ActiveSheet.Paste

2 个答案:

答案 0 :(得分:2)

这只是一个通用示例,您可以根据需要进行调整。该代码将查找名为Some String的列标题。 如果找到此列,我们接下来确定最后一行,复制该列(向下到最后一行),然后将该列粘贴到A1表上的单元格Pivot中。

  1. 使用范围变量Found存储列标题属性(即位置)
  2. 检查标题是否实际找到! If Not Found is Nothing(翻译:已找到)
  3. 使用Found.Column来引用适合Cells属性的列索引,因为语法是Cells(Row Index, Column Index)

Option Explicit

Sub Test()

Dim ws As Worksheet: Set ws = ThisWorkbook.Sheets("Sheet1") '<== Sheet that has raw data
Dim LRow As Long, Found As Range

Set Found = ws.Range("A1:Z1").Find("Some String") '<== Header name to search for

If Not Found Is Nothing Then
    LRow = ws.Cells(ws.Rows.Count, Found.Column).End(xlUp).Row
    ws.Range(ws.Cells(1, Found.Column), ws.Cells(LRow, Found.Column)).Copy
    Sheets("Pivot").Range("A1").PasteSpecial xlPasteValues '<== Sheet to paste data
End If

End Sub

您将要修改Range.Find方法上的某些选项。可以找到详细信息here

答案 1 :(得分:0)

我最终使用此代码来尝试搜索另一个标头并将其复制并粘贴 显式选项

Sub Test()


Dim ws As Worksheet

Set ws = ActiveSheet
Sheets.Add(After:=Sheets(Sheets.Count)).Name = "Pivot"
ws.Activate
ActiveSheet.Select

Dim LRow As Long, Found As Range

Set Found = ws.Range("A1:EM1").Find("Bsp") '<== Header name to search for


If Not Found Is Nothing Then
LRow = ws.Cells(ws.Rows.Count, Found.Column).End(xlUp).Row
ws.Range(ws.Cells(1, Found.Column), ws.Cells(LRow, Found.Column)).Copy
Sheets("Pivot").Range("A1").PasteSpecial xlPasteValues '<== Sheet to paste data
End If

ws.Activate
ActiveSheet.Select

Set Found = ws.Range("A1:EM1").Find("Sog")

If Not Found Is Nothing Then
LRow = ws.Cells(ws.Rows.Count, Found.Column).End(xlUp).Row
ws.Range(ws.Cells(1, Found.Column), ws.Cells(LRow, Found.Column)).Copy
Sheets("Pivot").Range("B1").PasteSpecial xlPasteValues

End If

End Sub