【问题标题】:Inserting Excel formula that refers to alternative columns插入引用替代列的 Excel 公式
【发布时间】:2017-10-12 11:57:52
【问题描述】:

我正在尝试将以下公式 ='External Costs B0'!F73 插入连续列中工作表的同一行,但是在工作表“外部成本”中使用单元格引用“F73” " 指代备用列,例如 F73、H73、J73、L73 等。

这是带有注释公式的电子表格的屏幕截图

Screen Capture of formula sheet

这是我尝试过的代码,但我正在努力弄清楚如何让替代列引用工作。

Dim CostColumns As Long

'选择单元格开始插入公式

Range("E26").Select

'从“外部成本 B0”表中的 F (6) 列开始,然后逐个交替列

For CostColumns = 6 To 600 Step 2
    ActiveCell.Formula = "= ""'External Costs B0'!"" & Rows(73)Columns(CostColumns)"

移动到下一个单元格以插入公式并将列引用前进 2 列

    ActiveCell.Offset(0, 1).Select
Next CostColumns

最终结果是我在许多帖子中看到的相同错误:

应用程序定义或对象定义的错误。

以下是我尝试过但没有成功的公式插入的许多其他语法。任何帮助是极大的赞赏。根据上面的示例,以下引用的是外部成本 B0 表中的第 40 行而不是第 73 行。

Range("E26").Select
 For CostColumns = 6 To 66 Step 2
    'ActiveCell.FormulaR1C1 = "= worksheets("""External Costs B0""").Cells(40,6).Value"
    'ActiveCell.FormulaR1C1 = "='External Costs B0'!R[14]C[CostColumns]"
    'Range("E26:AK26").FormulaR1C1 = "='External Costs B0'!R[14]C[CostColumns]"
    'ActiveCell.FormulaR1C1 = "= worksheets('External Costs B0')!" & " Rows(40)Columns(CostColumns)"
    'Range("E26:AK26").FormulaR1C1 = "='External Costs B0'!R[14]C[+2]"
    'Range("E26:AK26").FormulaR1C1 = "=Wksht.Cells(40,CostColumns) &"
    'Range("E26:AK26").Formula = "=worksheets('External Costs B0'!)" & ".Cells(40,6)"
    'ActiveCell.Formula = "= worksheets('External Costs B0'!).Cells(40,6).Value"
     ActiveCell.Offset(0, 1).Select
Next CostColumns

【问题讨论】:

    标签: excel excel-formula vba


    【解决方案1】:

    使用这个:

    ActiveCell.Formula = "='External Costs B0'!" & Cells(73, CostColumns).Address(0, 0)
    

    问题在于 Rows(73) 和 Columns(CostColumns) 都返回一个 Range 对象,您无法将其连接到字符串。

    【讨论】:

    • 非常感谢。这行得通,一旦有你的智慧的人指出,解释似乎很明显。
    • @HobbyHacker,我给出的解决方案是为了快速解决问题。查看其他答案以了解什么是好的做法。
    【解决方案2】:

    如果您使用FormulaR1C1 并且没有像以下子项中的选择,它会更容易: (请根据您的需要更改 R、RowOffset 和 FormulaUntilColumn)

    Sub Formulas()
    Dim I As Integer
    Const R As Long = 9     'row
    Const RowOffset As Integer = -8
    Const ForumulaUntilColumn As Long = 7
        For I = 1 To ForumulaUntilColumn
            Cells(R, I).FormulaR1C1 = "=R[" & RowOffset & "]C[" & I - 1 & "]"
        Next I
    End Sub
    

    P.S.:添加工作簿和表名,就像在 '=' 和 'R[' 之间的任何其他公式中一样

    【讨论】:

    • 谢谢@Jochen 这提供了很大的灵活性,感谢您的意见
    【解决方案3】:

    此代码会将您的公式放入单元格Sheet1!A1:AD1

    A1 中的公式将为='External Costs B0'!$A$73
    在 B1 中,它将是 ='External Costs B0'!$C$73,依此类推,直到单元格 AD1 中的 ='External Costs B0'!$BG$73

    Sub PasteFormula()
    
        Dim CostColumns As Long
        Dim y As Long
    
        'Starting column for External Costs reference
        CostColumns = 1
    
        With ThisWorkbook.Worksheets("Sheet1")
            For y = 1 To 30
                .Cells(1, y).FormulaR1C1 = "='External Costs B0'!R73C" & CostColumns
                CostColumns = CostColumns + 2
            Next y
        End With
    
    End Sub
    
    • 要更新代码更改Sheet1 到您需要的任何工作表 出现的公式。
    • CostColumn=1 更改为正确的列 您希望公式引用的数字。
    • y = 1 To 30 更改为 您希望公式出现在正确的列中。

    代码使用 R1C1 语法,因为如果您只需要处理行号和列号,更新公式会更容易R73C2 是第 73 行第 2 列例如。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-12
      相关资源
      最近更新 更多