2015-11-27 7 views
0

Я пытаюсь сделать биллинговый стол. Он имеет столбцы Cust_ID (уникальное поле), зону, режим, вес, количество. У меня есть разные книги Excel со ставками и зонами для каждого клиента. Сумма зависит от Зоны, вес & зоны.Лучший способ сделать биллинговый стол?

Теперь, скажем, у меня десять клиентов, у которых есть десять зон отдельно, для каждого из десяти режимов и десяти весовых плит. Я получить сумму из:

=INDIRECT("'[Customer_Rate_2015.xlsx]"&A2&"'!"&O2) 

A2 - идентификатор клиента, 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

Вы можете свернуть назад - я очень мало понимаю, что вам нужно. – pnuts

ответ

0

Используйте базу данных для своих данных, а затем создайте запрос с параметрами Zone, Weight и Mode, чтобы получить курс для расчета суммы. Если вы не знаете, как использовать базу данных, учитесь, ее не сложно и ее лучший подарок, который вы когда-либо могли бы себе дать, и вы можете поцеловать чудовищное гнездо, если заявления прощат .. (почти :)

Вы можете также используют VBA для запроса вашего листа Excel с вашими тарифами.

Функция сделать это будет выглядеть примерно так (требуется ссылка на Microsoft ActiveX Data Objects)

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) 
Смежные вопросы