自动转换excel表公式从显式单元格引用到结构化单元格引用?

时间:2016-11-28 07:51:50

标签: excel vba

我有一个包含公式的excel表,例如

=M9-C9*10-D9*10-C9*H9/100

我想将这些公式转换为使用公式中使用表列名称的结构化单元格引用,例如这个假公式:

=[Sales Amount]-[Profit]*10-[Costs]*10-[Profit]*[Risk]/100*10-[Capital]*[Gross]/100

有没有办法自动转换所有显式列名(M9)以使用结构化引用([Sales Amount])。

容易出错并手动执行。

(关于Using structured references with Excel tables的信息)

2 个答案:

答案 0 :(得分:0)

编辑:您可以遍历要替换的显式单元格引用。在玩这个之前一定要备份你的文件!

Sub replaceformulas2()
    Dim c As Object

    For Each c In Selection.Cells
        With c

            .Formula = Replace(.Formula, "$", "") 'delete the cell-fixation
            .Formula = Replace(.Formula, "E2", "Yourtable[Sales Amount]")
            .Formula = Replace(.Formula, "F2", "Yourtable[Profit]")
            ' ...and so on

        End With
    Next c
End Sub

注意:

  • 您可以添加更多表达式来替换
  • 意识到,在替换A10BA5之类的内容之前,您必须更换A1B5 等单元格,原因显而易见。对于A1:A100等范围也是如此。
  • 而不是Selection.Cells您可能希望使用Table1.UsedRange.CellsTable1.Range("A1:B100").Cells
  • 之类的内容
  • 您可以Debug.Print .Formula首先了解您拥有的所有不同公式
  • 如果你喜欢,你可以
    • 遍历表格标题
    • 获取A1 - 标题的坐标
    • 复制要替换的A1 - 字符串,例如,将其调整为第9行,如示例所示
    • 使用标题单元格的.Value替换任何替换字符串的出现次数
    • 然而,这可能是对工作簿进行一次性大修的过多努力

答案 1 :(得分:0)

我知道这个问题是前一段时间提出的,但是我只是解决了这个问题。我想我会分享。

首先将您的数据转换为表格。 (如果需要,您可以创建多个表,但是您需要在随后的顺序中指定表名作为引用的一部分)。

在另一张纸上,我创建了一个参考表,其中包含两列,分别由旧参考和新参考组成。为了生成旧的引用,我在列中使用了一个方程式:

=SUBSTITUTE(ADDRESS(1,COLUMN(),4),"1","") 

,然后将其连接到第一行的编号。

[谢谢:https://www.excelforum.com/excel-general/857983-how-to-return-the-column-letter-of-cell-reference.html]

对于第二列,我使用了要创建结构化引用的表标题中的copy and paste special; values; transpose

然后我从这里使用了宏Sub Multi_FindReplace()https://www.thespreadsheetguru.com/the-code-vault/2014/4/14/find-and-replace-all

就是这样。完成第一行。然后,我可以填写表格以完成表格。

(注意,如果您有固定的引用(即使用$),则可能需要先删除它们,因为结构化引用中不需要它们。如果需要固定引用到表外的位置,如果您不小心将其删除,则可以使用上述过程的变体将它们放回原处。)