Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 如何将包含多个公式的单元格区域移动到另一张图纸_Vba_Excel_Excel Formula - Fatal编程技术网

Vba 如何将包含多个公式的单元格区域移动到另一张图纸

Vba 如何将包含多个公式的单元格区域移动到另一张图纸,vba,excel,excel-formula,Vba,Excel,Excel Formula,我有一张Excel表格,它从一开始就很小,后来越来越大 左半部分是数据的表格区域。右边有一堆计算过的单元格总数,总和,不同的分析…-这已经变得相当复杂 当我滚动到表格列表的底部添加新行时,我再也看不到计算区域了-糟糕的设计 我不知道如何冻结右半部分 所以我试着把右半部分复制到另一张纸上。现在的问题是: 最初输入时没有图纸名称参考的所有公式 问题 是否有办法将一系列单元格从一张工作表移动到另一张工作表,并使所有指向未移动单元格的公式保持从原始工作表读取并添加对它们的工作表引用?如果选择要冻结区域左

我有一张Excel表格,它从一开始就很小,后来越来越大

左半部分是数据的表格区域。右边有一堆计算过的单元格总数,总和,不同的分析…-这已经变得相当复杂

当我滚动到表格列表的底部添加新行时,我再也看不到计算区域了-糟糕的设计

我不知道如何冻结右半部分

所以我试着把右半部分复制到另一张纸上。现在的问题是:

最初输入时没有图纸名称参考的所有公式

问题
是否有办法将一系列单元格从一张工作表移动到另一张工作表,并使所有指向未移动单元格的公式保持从原始工作表读取并添加对它们的工作表引用?

如果选择要冻结区域左下角的单元格,并选择“冻结窗格”,则冻结窗格应起作用。如果您仍然需要在右侧部分滚动,则冻结窗格右侧的拆分按钮应该可以工作。另一种选择可能是引用新工作表中的单元格,并将公式保留在原始工作表中,例如新工作表=原始工作表中的A1!A1。如果没有公式中引用的工作表,我认为没有办法移动公式并保留原始工作表引用。

如果选择要冻结区域左下角的单元格,然后选择“冻结窗格”,则冻结窗格应该可以工作。如果您仍然需要在右侧部分滚动,则冻结窗格右侧的拆分按钮应该可以工作。另一种选择可能是引用新工作表中的单元格,并将公式保留在原始工作表中,例如新工作表=原始工作表中的A1!A1。如果没有公式中引用的表格,我不认为有办法移动公式并保留原始表格引用。

如果我正确理解您的问题:

可以使用公式剪切该区域,并将其粘贴到新图纸中的同一区域。然后复制新工作表中的公式并将其粘贴回原始区域。完成了


之后,您可以删除新工作表中的行/列,以获得右上角的公式。

如果我理解您的问题正确:

可以使用公式剪切该区域,并将其粘贴到新图纸中的同一区域。然后复制新工作表中的公式并将其粘贴回原始区域。完成了

之后,您可以删除新工作表中的行/列,以在右上角获取公式。

编辑:根据OP请求向公式添加工作表名称引用 正则表达式取自 从引用的替换模式

您需要在工具>参考中添加Microsoft VBScript正则表达式5.5的参考

工作实例 这将拾取代码中其他地方的数字和字母序列(如果它们存在的话),尽管此处可能需要进行一些健全性检查

范围需要相同大小。我保持它非常基本,因为您没有提供任何代码来使用

Dim rng1 as Range, rng2 as Range
Dim x as long, y as long, r as long, c as long
Dim RegEx As Object

Set RegEx = CreateObject("VBScript.RegExp")
On Error Resume Next

RegEx.Global = True
RegEx.Pattern = "\b[A-Z]{1,3}[0-9]{1,4}\b"

set rng1 = Workbooks("BookName").Worksheets("SheetName1").Range("A1:B2")     'target cells
set rng2 = Workbooks("BookName").Worksheets("SheetName2").Range("AA1:AB2")   'contains the formula

r = rng.rows.count
c = rng.columns.count

For x = 1 to r
 For y = 1 to c
  rng2.Cells(x, y).formula = RegEx.Replace(rng1.Cells(x, y).formula,"SheetName2$&")
 Next y
Next x

On Error GoTo 0
写在psuedo,所以这是未经测试,但应该工作。强制将公式作为字符串处理,以确保它不会自动更新,但如果出现错误,只需从循环中删除&即可。

编辑:在OP请求后向公式添加工作表名称引用 正则表达式取自 从引用的替换模式

您需要在工具>参考中添加Microsoft VBScript正则表达式5.5的参考

工作实例 这将拾取代码中其他地方的数字和字母序列(如果它们存在的话),尽管此处可能需要进行一些健全性检查

范围需要相同大小。我保持它非常基本,因为您没有提供任何代码来使用

Dim rng1 as Range, rng2 as Range
Dim x as long, y as long, r as long, c as long
Dim RegEx As Object

Set RegEx = CreateObject("VBScript.RegExp")
On Error Resume Next

RegEx.Global = True
RegEx.Pattern = "\b[A-Z]{1,3}[0-9]{1,4}\b"

set rng1 = Workbooks("BookName").Worksheets("SheetName1").Range("A1:B2")     'target cells
set rng2 = Workbooks("BookName").Worksheets("SheetName2").Range("AA1:AB2")   'contains the formula

r = rng.rows.count
c = rng.columns.count

For x = 1 to r
 For y = 1 to c
  rng2.Cells(x, y).formula = RegEx.Replace(rng1.Cells(x, y).formula,"SheetName2$&")
 Next y
Next x

On Error GoTo 0

写在psuedo,所以这是未经测试,但应该工作。强制公式作为一个字符串来处理,以确保它不是自动更新的,但是如果它是错误的,只需在循环中移除“&”。

你可能想考虑使用相机工具:@ Jojin方法会起作用,但是你是否考虑过使用S拆开?还是新窗口?你试过剪切粘贴吗?这样一来,所有的内容都应该保留到新工作表中。@ian0411,当然我尝试了:-D,但问题是,复制的单元格指向新工作表的单元格。我想让它们指向原始地址。@ThomasInzina相机工具是一个非常酷的功能!谢谢!我必须潜入其中。。。广告分割:这只是水平分割,不是吗?使用并排视图的新窗口是一种很好的方法。您可能想考虑使用相机工具:“Jojin方法会起作用,但是您是否考虑过使用S拆股?”还是新窗口?你试过剪切粘贴吗?这样一来,所有的内容都应该保留到新工作表中。@ian0411,当然我尝试了:-D,但问题是,复制的单元格指向新工作表的单元格。我想去看电影
将它们指向原始地址。@ThomasInzina相机工具是一个非常酷的功能!谢谢!我必须潜入其中。。。广告分割:这只是水平分割,不是吗?带有并排视图的新窗口是一个很好的方法。我假设他们希望将公式移动到新的工作表中,但将目标数据保留在原来的位置。。。可能是错的,因为这篇文章相当含糊不清。这也是我所理解的。。。。试着像我写的那样剪切、粘贴和复制回去,它将完全做到这一点。我假设他们想将公式移动到新的工作表中,但将目标数据保留在原来的位置。。。可能是错的,因为这篇文章相当含糊不清。这也是我所理解的。。。。试着像我写的那样剪切、粘贴和复制回去,它会做到这一点。拆分和冻结可能会奏效,但包含计算单元的区域几乎一直到屏幕底部,而且还在增长。。。这是可行的,但我的表格数据的可滚动区域只有几行高……你的第二种方法正是我现在所做的。我复制了这张表,并用另一张表中同一单元格的纯引用替换了表格数据。所有的计算都很好,插入都在另一个地方完成。然后我使用新窗口和并排*而不同步滚动。拆分和冻结可能会起作用,但包含计算单元的区域几乎一直到屏幕底部-并且还在增长。。。这是可行的,但我的表格数据的可滚动区域只有几行高……你的第二种方法正是我现在所做的。我复制了这张表,并用另一张表中同一单元格的纯引用替换了表格数据。所有的计算都很好,插入都在另一个地方完成。然后我使用新窗口和并排*而不同步滚动。但这会像纯复制粘贴一样移动公式吗?我需要改变他们的方式,所有的公式和公式的一部分!指向复制范围之外的地址时,会将图纸名称添加到其地址。我认为,这是不可能的,至少在一个负担得起的方法中是不可能的。Thx@Shnugo请看一看,看看编辑后的答案是否符合场景,我只是添加了一个小正则表达式以包含工作表名称啊抱歉,没有向上滚动并查看接受的答案^^^,但这将-类似于纯复制和粘贴-按原样移动公式?我需要改变他们的方式,所有的公式和公式的一部分!指向复制范围之外的地址时,会将图纸名称添加到其地址。我认为,这是不可能的,至少在一个负担得起的方法中是不可能的。Thx@Shnugo请看一看,看看编辑后的答案是否符合场景,我只是添加了一个小正则表达式来包含工作表名称啊,对不起,没有向上滚动查看已接受的答案^^