2016-03-22 3 views
0

Я здесь новый, и я думал, что задал вопрос, который, конечно же, не найден в Справочном центре Microsoft, и что я не смог найти решение.Excel Расчет относительной позиции

Я пытаюсь рассчитать вероятность на вещи, и, по большей части, Excel очень полезен в этом. Я сталкиваюсь с проблемами, поскольку добавляю дополнительные переменные.

В моем листе в настоящее время сравниваются броски кубиков 4 8-сторонних кубиков. 2 кости имеют определенные символы, а две другие кости имеют разные символы. Некоторые символы отрицают друг друга, и в конце я прихожу к номеру выхода урона. При сравнении 2 или 3 кубиков возможные комбинации ограничены. 3 кости, имеющие 512 возможностей. Теперь у 4 есть 4096 возможностей, и это только повысится. Вот почему мне нужно то, о чем я прошу.

Есть ли способ для ячейки понять текущую позицию в отношении блока ячеек, в котором он находится сейчас?

Например: Я вычисляю возможность повторного запуска, но это произойдет только в половине случаев, а это значит, что существует 12 возможностей одной матрицы с параметром повтора. Таким образом, текущая таблица возможностей, которую я разрабатываю, будет состоять из 96 отдельных таблиц из 96 возможных результатов. В таблице 1/1 будет сравниваться первая строка таблицы с двумя игральными костями атаки против первой строки таблицы раунда защиты 2 кубиков. Строка 1 Столбец 1 этой таблицы даст результат R1C1 таблицы Attack против R1C1 таблицы Обороны. R1C2 таблицы будет давать результат R1C1 таблицы Attack против R1C2 таблицы Обороны. R2C1 этой таблицы даст результат R1C2 таблицы Attack против R1C1 таблицы защиты и т. Д.

Я знаю, как сделать ссылку на таблицы, поэтому я сделал это так, как только я построю один стол, я могу скопировать и вставить его, чтобы построить другой 96. Но, сравнивая больше рулонов кости, это быстро станет слишком громоздким для обработки. Если есть способ для ячейки понять, где это относительное положение находится в данном блоке ячеек (то есть R2C1 моей таблицы примеров понимает, что это R2C1), это значительно снизит мою нагрузку и позволит мне продолжить построение этих таблиц вероятности, поэтому o может лучше понимать компромиссы в определенных областях.

Любая помощь очень ценится.

+1

Я уже что-то сделал, прежде чем проверять некоторые факторы. Независимо от того, получаете ли вы решение, я настоятельно рекомендую вам просто прекратить попытки сделать это с помощью Excel и использовать язык программирования - например, VBA. Выполнение многомерных блоков IF-THEN на 2D-сетке очень болезненно. –

+1

Я согласен с @ Grade'Eh'Bacon в том, что VBA, безусловно, путь. Я сделал некоторые симуляции битв RISK в VBA с очень маленькими проблемами. Легко написать VBA, чтобы отправить вывод в строки в Excel. –

+0

это вам поможет? '= CELL (" address ")' – aFast

ответ

0

Вот Excel UDF, который я написал для расчета основных кубиков%. Это может не работать непосредственно для вашего примера с отрицательными/условными результатами, но у него есть гибкость для тестирования более чем одной кости и количества боковых кубиков, поэтому это может вдохновить вас на некоторые идеи. Как предполагали предыдущие комментарии, если вы дали точные параметры, вы, вероятно, могли бы получить конкретный пример. Мой пример возвращает%. В настоящее время он измеряет вероятность только одного результата, но вы можете сделать более одной формулы на ячейку =DiceRollOdds(3,2)+DiceRollOdds(4,2) (для измерения вероятности 3 и 4), или вы можете изменить код, чтобы получить что-то более конкретное.

Function DiceRollOdds(OutcomeToCheck As Integer, NumberOfDice As Integer, Optional SidesOnDice As Integer) As Double 
Dim SuccessResult As Integer, FailedResult As Integer, SingleDice As Integer, RollResult As Integer 

If SidesOnDice = 0 Then 
    SidesOnDice = 6 
End If 

Dim Rolls As Integer 

For Rolls = 1 To (SidesOnDice^NumberOfDice) 
RollResult = 0 
    For SingleDice = 0 To NumberOfDice - 1 

     RollResult = Int(Rolls/SidesOnDice^SingleDice) Mod SidesOnDice + 1 + RollResult 
    Next SingleDice 

If RollResult = OutcomeToCheck Then 
    SuccessResult = SuccessResult + 1 
Else 
    FailedResult = FailedResult + 1 
End If 

Next Rolls 

DiceRollOdds = SuccessResult/(FailedResult + SuccessResult) 

End Function 
Смежные вопросы