我有一张Excel表单,它从小开始变得越来越大。
左半部分是数据的表格区域。右边有一堆计算单元格(总计,总和,不同的分析...... - 这已经变得相当复杂......)
当我滚动到表格列表的底部添加新行时,我再也看不到计算区域了 - 设计不好......
我不知道如何冻结右半...
所以我试图将右半边复制到另一张纸上。现在问题是:
最初输入时没有工作表名称引用的所有公式。
有没有办法将一系列单元格从一个工作表移动到另一个工作表,并保持所有公式指向未移动的单元格仍然从原始工作表读取(添加工作表参考) ?
答案 0 :(得分:2)
如果我理解你的问题是正确的:
您可以使用公式剪切区域并将其粘贴到新工作表中的相同区域。然后复制新工作表中的公式并将其粘贴回原始区域。完成。
之后,您可以删除新工作表中的行/列,以使公式位于右上角。
答案 1 :(得分:1)
如果您选择要冻结的区域左下方的单元格,则冻结窗格应该有效,然后选择冻结窗格。如果您仍需要在右侧部分滚动,则拆分(冻结窗格右侧的按钮)应该有效。另一个选项可能是引用新工作表中的单元格并将公式保留在原始工作表中(例如,新工作表中的A1 = OriginalWorksheet!A1
)。如果没有公式中引用的工作表,我认为没有办法移动公式并保留原始工作表参考。
答案 2 :(得分:1)
编辑:在OP请求后向公式添加工作表名称引用
取自this answer on superuser 的正则表达式
从here on MSDN
您需要添加" Microsoft VBScript正则表达式5.5"的引用。在工具>参考文献
中RegEx used here的工作示例 如果它们存在,这将在代码中的其他位置拾取数字和字母序列,因此这里可能需要进行一些完整性检查。
范围必须相同。我保持它非常基本,因为你还没有提供任何代码可以使用。
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中写道所以这是未经测试但应该有效。 强制将公式作为字符串处理,以确保它不会自动更新,但如果错误只是从循环内删除 "" &
。