将特定列复制到excel中的新工作表

将特定列复制到excel中的新工作表,excel,excel-formula,excel-2010,vba,Excel,Excel Formula,Excel 2010,Vba,我对excel相当陌生,想知道是否有一种更简单的方法来执行我所做的常规剪切复制粘贴。我的工作表如下所示: Fruits Nuts Veggies Apple Walnut Potato Banana Chestnut Broccoli Fruits Nuts Apple Walnut Banana Chestnut 第一行是标题。是否有方法在工作表1中搜索行名称,一旦找到,它会将整个列(包含行名称)复制到新工作表中

我对excel相当陌生,想知道是否有一种更简单的方法来执行我所做的常规剪切复制粘贴。我的工作表如下所示:

Fruits    Nuts      Veggies
Apple     Walnut    Potato
Banana    Chestnut  Broccoli
Fruits    Nuts      
Apple     Walnut    
Banana    Chestnut
第一行是标题。是否有方法在工作表1中搜索行名称,一旦找到,它会将整个列(包含行名称)复制到新工作表中?例如,我可以搜索“水果”,它会复制整个水果列。新工作表中的结果应如下所示:

Fruits    
Apple     
Banana
如果我再次搜索坚果,结果应该如下:

Fruits    Nuts      Veggies
Apple     Walnut    Potato
Banana    Chestnut  Broccoli
Fruits    Nuts      
Apple     Walnut    
Banana    Chestnut

这应该行得通。只需将Sheet1和Sheet2更改为您拥有的SheetName即可

Option Explicit

Private Sub FindTextAndCopyToNewWS()
Dim ws As Worksheet, targetWks As Worksheet
Dim FindString As Variant
Dim rng As Range, sourceColumn As Range, targetColumn As Range
Dim lastCol As Long, lColumn As Long

Set ws = ThisWorkbook.Worksheets("Sheet1")

FindString = InputBox("Search for value")

If Trim(FindString) <> "" Then
Set rng = ws.Cells.Find( _
                 What:=FindString, _
                 LookIn:=xlValues, _
                 LookAt:=xlPart, _
                 SearchOrder:=xlByRows, _
                 SearchDirection:=xlNext, _
                 MatchCase:=False, _
                 SearchFormat:=False)

If Not rng Is Nothing Then

    Set sourceColumn = ThisWorkbook.Worksheets("Sheet1").Columns(rng.Column)

    Set targetWks = ThisWorkbook.Worksheets("Sheet2")
    lastCol = targetWks.Cells(1, targetWks.Columns.Count).End(xlToLeft).Column

    If targetWks.Cells(1, 1) = "" Then
        Set targetColumn = ThisWorkbook.Worksheets("Sheet2").Columns(lastCol)
    Else
        Set targetColumn = ThisWorkbook.Worksheets("Sheet2").Columns(lastCol + 1)
    End If

    sourceColumn.Copy Destination:=targetColumn

Else
    MsgBox "Nothing found"
End If
End If
End Sub
选项显式
私有子FindTextAndCopyToNewWS()
将ws作为工作表,将Targetworks作为工作表
变暗FindString
Dim rng作为范围,sourceColumn作为范围,targetColumn作为范围
调暗lastCol的长度,L列的长度
设置ws=ThisWorkbook.Worksheets(“Sheet1”)
FindString=InputBox(“搜索值”)
如果修剪(FindString)“,则
Set rng=ws.Cells.Find(_
什么:=查找字符串_
LookIn:=xlValues_
看:=xlPart_
搜索顺序:=xlByRows_
SearchDirection:=xlNext_
MatchCase:=假_
SearchFormat:=False)
如果不是,那么rng什么都不是
设置sourceColumn=ThisWorkbook.Worksheets(“Sheet1”).Columns(rng.Column)
Set targetworks=此工作簿。工作表(“表2”)
lastCol=targetWks.Cells(1,targetWks.Columns.Count).End(xlToLeft).Column
如果targetworks.Cells(1,1)=“”,则
设置targetColumn=ThisWorkbook.Worksheets(“Sheet2”).Columns(lastCol)
其他的
Set targetColumn=ThisWorkbook.Worksheets(“Sheet2”).Columns(lastCol+1)
如果结束
sourceColumn.Copy目标:=targetColumn
其他的
MsgBox“未找到任何内容”
如果结束
如果结束
端接头

谢谢Niclas。但是如果我们想搜索和复制多个东西呢?我们可以使用excel公式吗?理想情况下,每次我使用搜索时,搜索应该添加到新工作表的后续列中。因此,每次搜索水果或蔬菜时,它都应该将整个列复制到sheet2,并将复制的副本添加到现有的副本之后?是的,这是正确的。我修改了这个问题,以显示一个输出示例。@SageMohan现在就试试看,行了!最后一件事,既然我知道我需要复制哪些栏目,有没有办法对这些栏目名称进行硬编码,这样我就不必经常点击搜索了?例如,当我在工作表1上运行宏时,水果和蔬菜应该自动复制到新工作表中。