There is way of translating a function like the one presented in the question without necessarily having to write the Python yourself.
Libraries such as PyCel, Formulas, xlcalculator and Koala use an AST to translate Excel formulas into Python.
I am the project owner of xlcalculator so I will use that library in a demonstration. That said the other libraries are well capable of this particular task. Each library has different heritage and so they have different strengths.
Usually the above mentioned libraries read an Excel file, translates the formulas into Python and then provides functionality to evaluate. Xlcalculator can also parse a specially crafted dict which is what I'm taking advantage of here.
from xlcalculator import ModelCompiler
from xlcalculator import Model
from xlcalculator import Evaluator
input_dict = {
"Sheet1!B16" : "Column1",
"Sheet1!B17" : 512.96,
"Sheet1!B18" : 307.41,
"Sheet1!B19" : 413.76,
"Sheet1!B20" : 323.65,
"Sheet1!B21" : 376.84,
"Sheet1!B22" : 368.79,
"Sheet1!B23" : 367.77,
"Sheet1!B24" : 345.65,
"Sheet1!C16" : "OP results",
"Sheet1!C17" : 10,
"Sheet1!C18" : 3,
"Sheet1!C19" : 7,
"Sheet1!C20" : 4,
"Sheet1!C21" : 5,
"Sheet1!C22" : 5,
"Sheet1!C23" : 5,
"Sheet1!C24" : 4,
"Sheet1!D16" : "Actual Output (Parfait)",
"Sheet1!D17" : '=IF(B17="", "", MIN(MAX(CEILING((B17-MIN(B$17:B$46))/((MAX(B$17:B$46)-MIN(B$17:B$46))/10),1),1),10) )',
"Sheet1!D18" : '=IF(B18="", "", MIN(MAX(CEILING((B18-MIN(B$17:B$46))/((MAX(B$17:B$46)-MIN(B$17:B$46))/10),1),1),10) )',
"Sheet1!D19" : '=IF(B19="", "", MIN(MAX(CEILING((B19-MIN(B$17:B$46))/((MAX(B$17:B$46)-MIN(B$17:B$46))/10),1),1),10) )',
"Sheet1!D20" : '=IF(B20="", "", MIN(MAX(CEILING((B20-MIN(B$17:B$46))/((MAX(B$17:B$46)-MIN(B$17:B$46))/10),1),1),10) )',
"Sheet1!D21" : '=IF(B21="", "", MIN(MAX(CEILING((B21-MIN(B$17:B$46))/((MAX(B$17:B$46)-MIN(B$17:B$46))/10),1),1),10) )',
"Sheet1!D22" : '=IF(B22="", "", MIN(MAX(CEILING((B22-MIN(B$17:B$46))/((MAX(B$17:B$46)-MIN(B$17:B$46))/10),1),1),10) )',
"Sheet1!D23" : '=IF(B23="", "", MIN(MAX(CEILING((B23-MIN(B$17:B$46))/((MAX(B$17:B$46)-MIN(B$17:B$46))/10),1),1),10) )',
"Sheet1!D24" : '=IF(B24="", "", MIN(MAX(CEILING((B24-MIN(B$17:B$46))/((MAX(B$17:B$46)-MIN(B$17:B$46))/10),1),1),10) )'
}
compiler = ModelCompiler()
my_model = compiler.read_and_parse_dict(input_dict)
evaluator = Evaluator(my_model)
print(evaluator.evaluate("Sheet1!C16"))
print("Sheet1!C17", evaluator.evaluate("Sheet1!C17"))
print("Sheet1!C18", evaluator.evaluate("Sheet1!C18"))
print("Sheet1!C19", evaluator.evaluate("Sheet1!C19"))
print("Sheet1!C20", evaluator.evaluate("Sheet1!C20"))
print("Sheet1!C21", evaluator.evaluate("Sheet1!C21"))
print("Sheet1!C22", evaluator.evaluate("Sheet1!C22"))
print("Sheet1!C23", evaluator.evaluate("Sheet1!C23"))
print("Sheet1!C24", evaluator.evaluate("Sheet1!C24"))
print()
print(evaluator.evaluate("Sheet1!D16"))
print("Sheet1!D17", evaluator.evaluate("Sheet1!D17"))
print("Sheet1!D18", evaluator.evaluate("Sheet1!D18"))
print("Sheet1!D19", evaluator.evaluate("Sheet1!D19"))
print("Sheet1!D20", evaluator.evaluate("Sheet1!D20"))
print("Sheet1!D21", evaluator.evaluate("Sheet1!D21"))
print("Sheet1!D22", evaluator.evaluate("Sheet1!D22"))
print("Sheet1!D23", evaluator.evaluate("Sheet1!D23"))
print("Sheet1!D24", evaluator.evaluate("Sheet1!D24"))
>python stackoverflow.py
OP results
Sheet1!C17 10
Sheet1!C18 3
Sheet1!C19 7
Sheet1!C20 4
Sheet1!C21 5
Sheet1!C22 5
Sheet1!C23 5
Sheet1!C24 4
Actual Output (Parfait)
Sheet1!D17 10.0
Sheet1!D18 1
Sheet1!D19 6.0
Sheet1!D20 1.0
Sheet1!D21 4.0
Sheet1!D22 3.0
Sheet1!D23 3.0
Sheet1!D24 2.0