Excel宏在工作表中查找文本值,复制相应列,并将整列粘贴到另一个工作表上

时间:2015-05-14 07:24:37

标签: excel vba excel-vba

我已经设置了一个Excel文件,我将其他工作簿中的数据粘贴到sheet 1,然后将sheet 2设置为使用

显示某些值
A1 =IF(NOT(ISBLANK(Sheet1!B1)),Sheet1!B2,"") 

在整个工作表中(单元格引用根据我的需要而变化)。

通常情况下,这对我很有用,问题是有时当我下载新的原始数据并复制到sheet 1时,sheet 1中的列因为添加了随机新列和sheet 2中断的公式,因为它只是设置为引用我选择的表1中的相应列,而不是我需要的实际数据。

以下是一个例子:

第1页(第1天)(只是将原始数据复制到我的工作簿)

  |   A   |   B   |   C   |   D   |   E   |   F   |
--+-------+-------+-------+-------+-------+-------+
1 | Cat 1 | Cat 2 | Cat 3 | Cat 4 | Cat 5 | Cat 6 |
2 |   1A  |   1B  |   1C  |   1D  |   1E  |   1F  |
3 |   2A  |   2B  |   2C  |   2D  |   2E  |   2F  |
4 |   3A  |   3B  |   3C  |   3D  |   3E  |   3F  |

表2(第1天)(使用先前提到的公式的期望输出)

  |   A   |   B   |   C   |
--+-------+-------+-------+
1 | Cat 2 | Cat 6 | Cat 4 |
2 |   1B  |   1F  |   1D  |
3 |   2B  |   2F  |   2D  |
4 |   3B  |   3F  |   3D  |

第1页(第2天)(第二天左右复制原始数据)

  |   A   |   B   |   C   |   D   |   E   |   F   |   G   |
--+-------+-------+-------+-------+-------+-------+-------+
1 | Cat 1 |Random | Cat 2 | Cat 2 | Cat 4 | Cat 5 | Cat 6 |
2 |   1A  |   1X  |   1B  |   1C  |   1D  |   1E  |   1F  |
3 |   2A  |   2X  |   2B  |   2C  |   2D  |   2E  |   1F  |
4 |   3A  |   3X  |   3B  |   3C  |   3D  |   3E  |   1F  |

表2(第2天)(由于新的不需要的列而产生的结果)

  |   A   |   B   |   C   |
--+-------+-------+-------+
1 |Random | Cat 5 | Cat 3 |
2 |   1X  |   1E  |   1C  |
3 |   2X  |   2E  |   2C  |
4 |   3X  |   3E  |   3C  |

由于我正在处理超过100列数据,有时甚至有近2万行,因此在每次获取新数据时,要么在表1中搜索已更改的列,要么修改我的公式,这是不切实际的。第2页。

所以我的问题是,是否有人可以建议一种在Excel中编写宏的方法,以便在工作表1的第1行中搜索文本值,复制包含该值的整个列,并将整个列粘贴到{{ 1}?我对Excel中的公式使用相当自信,但几乎没有关于宏的知识,并且非常感谢一些帮助。

1 个答案:

答案 0 :(得分:1)

Can you try using this macro:

Sub Macro1()
'
' Macro1 Macro
'

    Dim cell As Range
    For i = 1 To 50
        Sheets("Sheet1").Select
        If Cells(1, i).Value = "Cat 2" Then
        Columns(i).Select
        Selection.Copy
        Sheets("Sheet2").Select
        Range("A1").Select
        ActiveSheet.Paste
        End If
        If Cells(1, i).Value = "Cat 6" Then
        Columns(i).Select
        Selection.Copy
        Sheets("Sheet2").Select
        Range("B1").Select
        ActiveSheet.Paste
        End If
        If Cells(1, i).Value = "Cat 4" Then
        Columns(i).Select
        Selection.Copy
        Sheets("Sheet2").Select
        Range("C1").Select
        ActiveSheet.Paste
        End If
    Next i
End Sub