我正在尝试制作帐单表。它具有Cust_ID(唯一字段),区域,模式,重量,金额列。我有不同的Excel工作簿,每个客户都有费率和区域。数量取决于区域,重量和&区。
现在,假设我有10个客户,他们分别有10个区域,分别为10种模式和10种重量板块。我从中获得金额:
=INDIRECT("'[Customer_Rate_2015.xlsx]"&A2&"'!"&O2)
A2 - 客户ID,O2 - 计费表中的单元格,根据模式引用权重区域并返回单元格地址
选择O2:
=IF(F2="air",IF(E2=0.1,CONCATENATE(LEFT(RIGHT(CELL("address",'[Customer_Rate_2015.xlsx]1001'!$E$3),3),1),RIGHT(CELL("address",'[Customer_Rate_2015.xlsx]1001'!$E$3),1)),""))
现在,对于每种模式和区域和重量,都有单独的费率 我必须通过上面的公式获得每个细胞的价值。
是否有更好的或替代的方式,因此可以选择间接公式中O2
的值,所以我不必编写那些100多个IF语句?
答案 0 :(得分:0)
使用数据库存储数据,然后使用“区域”,“重量”和“模式”参数创建查询,以获取计算金额的速率。如果你不知道如何使用数据库,学习,它并不难,它是你可以给自己的最好的礼物,你可以亲吻怪物嵌套if语句再见..(几乎:)
您 也可以使用VBA查询您的Excel工作表。
执行此操作的功能看起来像这样(需要参考 Microsoft ActiveX数据对象)
Function GetRate(Weight, Zone, Mode)
On Error GoTo errorhandler
Dim con As ADODB.Connection
Dim rs As ADODB.Recordset
Set con = New ADODB.Connection
Set rs = New ADODB.Recordset
con.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & ThisWorkbook.FullName & ";" & _
"Extended Properties=""Excel 8.0;HDR=Yes;"";"
SqlState = "Select Rate FROM [MyRatesSheet$] WHERE [Zone]=" & Zone & _
" AND [Weight]=" & Weight & _
" AND [Mode]='" & Mode & "'"
rs.Open SqlState, con, adOpenForwardOnly, adLockReadOnly
If Not rs.EOF Then GetRate = rs(0)
GoTo cleanup
errorhandler:
GetRate = Err.Description
cleanup:
If rs.State = adStateOpen Then rs.Close
If con.State = adStateOpen Then con.Close
If Not rs Is Nothing Then Set rs = Nothing
If Not con Is Nothing Then Set con = Nothing
End Function
您将在工作表中使用
引用=GetRate(H18,I18,J18)