我已经设置了一个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中的公式使用相当自信,但几乎没有关于宏的知识,并且非常感谢一些帮助。
答案 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