excel - 根据标题名称将两列相乘
问题描述
我正在尝试根据标题名称将两列相乘(每次都可以更改位置-因此固定的单元格范围不起作用)。
到目前为止,我得到了以下作品
Dim ws As Worksheet
Dim lrow As Long
Dim Amount, Bill, USD As Range
Dim Rngheaders As Range
Set ws = ThisWorkbook.Sheets("CSV Data PR")
Set Rngheaders = ws.Range("1:1")
lrow = ws.Cells(Rows.Count, 1).End(xlUp).Row - 1
Set Amount = ws.Rows(1).Find(What:="Amount")
Set Bill = ws.Rows(1).Find(What:="Bill.qty")
Set USD = ws.Rows(1).Find(What:="In USD")
ws.Range(USD.Address).Offset(1, 0).Resize(lrow) = Range(Amount.Address).Offset(1, 0) * Range(Bill.Address).Offset(1, 0)
这有效,除了它只计算第 2 行(我需要它逐行计算)。
所需的输出应类似于:
解决方案
请考虑为您的目的使用用户定义的函数。将函数的代码粘贴到标准代码模块中。
Function BillTotal(R As Long) As Double
' 07 Mar 2019
' returns -1 in case of error
Dim Amt As Long
Dim Qty As Long
Application.Volatile
On Error Resume Next
Amt = Application.WorksheetFunction.Match("amount", Rows(1), 0)
If Err.Number = 0 Then
Qty = Application.WorksheetFunction.Match("bill.qty", Rows(1), 0)
End If
If Err Then
BillTotal = -1
Else
BillTotal = Val(Cells(R, Amt).Value) * Val(Cells(R, Qty).Value)
End If
End Function
在您希望获得结果的单元格中,像这样编写函数调用。
=BillTotal(Row())
作为替代方案,您可以使用相同的功能来实现您的原始想法。只需在 For ... Next 循环中调用它并将结果写入由 R 和 C 定义的单元格,其中行号 R 由循环提供,C 可以从 MATCH 函数中获得,如我的函数所示。如果以这种方式使用,则Application.Volatile
不需要该行。
推荐阅读
- python - 如何优化带有熊猫数据框条件的双循环?
- php - 如何将多个数组的值相加
- mongodb - elasticsearch:从 mongodb 重新同步索引
- apache-spark - Spark 2.4 上带有字典的 UDF
- react-native - willFocus 事件何时发出?(反应导航)
- reactjs - i18next-xhr-backend 回退以在反应应用程序中出现网络错误后加载本地资源
- android - 卸载应用程序后卡在 Flutter 中安装 build\app\outputs\apk\app.apk...
- python - AttributeError:“DataFrame”对象没有属性“write”
- reactjs - Redux 是整个应用程序的单点故障吗?
- ionic-framework - 我正在处理离子项目在将离子应用程序中的视频压缩和水印上传到服务器之前