Skip to content

Instantly share code, notes, and snippets.

@halbuki
Last active March 10, 2026 20:49
Show Gist options
  • Select an option

  • Save halbuki/b732696f004e428cfd2cd0b14adc1278 to your computer and use it in GitHub Desktop.

Select an option

Save halbuki/b732696f004e428cfd2cd0b14adc1278 to your computer and use it in GitHub Desktop.
Excel Lambda functions for Power Query Number functions
/* USE NAMESPACE "Number" */
Abs = LAMBDA(
_number,
LET(
// Help
Help, TRIM(TEXTSPLIT(
"DESCRIPTION:->Returns the absolute value of a number\nVERSION:->1.0\nPARAMETERS:->_number as number",
"->",
"\n"
)),
// Error Messages
ErrorMessages, {"_number is not a number."},
// Check Inputs
_err1, IF(NOT(ISNUMBER(_number)), #VALUE!, FALSE()),
ErrorArray, VSTACK(ISERROR(_err1)),
Messages, FILTER(ErrorMessages, ErrorArray, ""),
// Procedure
Result, ABS(_number),
// Handle Error
Error, IF(OR(ErrorArray), 3, IF(OR(ISERROR(Result)), 2, 1)),
// Return Result
CHOOSE(Error, Result, Help, Messages)
)
);
Acos = LAMBDA(
_number,
LET(
Help, TRIM(TEXTSPLIT(
"DESCRIPTION:->Returns the arccosine of a number\nVERSION:->1.0\nPARAMETERS:->_number as number",
"->",
"\n"
)),
ErrorMessages, {"_number is not a number."},
_err1, IF(NOT(ISNUMBER(_number)), #VALUE!, FALSE()),
ErrorArray, VSTACK(ISERROR(_err1)),
Messages, FILTER(ErrorMessages, ErrorArray, ""),
Result, ACOS(_number),
Error, IF(OR(ErrorArray), 3, IF(OR(ISERROR(Result)), 2, 1)),
CHOOSE(Error, Result, Help, Messages)
)
);
Asin = LAMBDA(
_number,
LET(
Help, TRIM(TEXTSPLIT(
"DESCRIPTION:->Returns the arcsine of a number\nVERSION:->1.0\nPARAMETERS:->_number as number",
"->",
"\n"
)),
ErrorMessages, {"_number is not a number."},
_err1, IF(NOT(ISNUMBER(_number)), #VALUE!, FALSE()),
ErrorArray, VSTACK(ISERROR(_err1)),
Messages, FILTER(ErrorMessages, ErrorArray, ""),
Result, ASIN(_number),
Error, IF(OR(ErrorArray), 3, IF(OR(ISERROR(Result)), 2, 1)),
CHOOSE(Error, Result, Help, Messages)
)
);
Atan = LAMBDA(
_number,
LET(
Help, TRIM(TEXTSPLIT(
"DESCRIPTION:->Returns the arctangent of a number\nVERSION:->1.0\nPARAMETERS:->_number as number",
"->",
"\n"
)),
ErrorMessages, {"_number is not a number."},
_err1, IF(NOT(ISNUMBER(_number)), #VALUE!, FALSE()),
ErrorArray, VSTACK(ISERROR(_err1)),
Messages, FILTER(ErrorMessages, ErrorArray, ""),
Result, ATAN(_number),
Error, IF(OR(ErrorArray), 3, IF(OR(ISERROR(Result)), 2, 1)),
CHOOSE(Error, Result, Help, Messages)
)
);
Atan2 = LAMBDA(
_y, _x,
LET(
Help, TRIM(TEXTSPLIT(
"DESCRIPTION:->Returns the arctangent of the ratio _y/_x\nVERSION:->1.0\nPARAMETERS:->_y as number, _x as number",
"->",
"\n"
)),
ErrorMessages, {"_y is not a number."; "_x is not a number."},
_err1, IF(NOT(ISNUMBER(_y)), #VALUE!, FALSE()),
_err2, IF(NOT(ISNUMBER(_x)), #VALUE!, FALSE()),
ErrorArray, VSTACK(ISERROR(_err1), ISERROR(_err2)),
Messages, FILTER(ErrorMessages, ErrorArray, ""),
Result, ATAN2(_x, _y),
Error, IF(OR(ErrorArray), 3, IF(OR(ISERROR(Result)), 2, 1)),
CHOOSE(Error, Result, Help, Messages)
)
);
Cos = LAMBDA(
_number,
LET(
Help, TRIM(TEXTSPLIT(
"DESCRIPTION:->Returns the cosine of a number\nVERSION:->1.0\nPARAMETERS:->_number as number",
"->",
"\n"
)),
ErrorMessages, {"_number is not a number."},
_err1, IF(NOT(ISNUMBER(_number)), #VALUE!, FALSE()),
ErrorArray, VSTACK(ISERROR(_err1)),
Messages, FILTER(ErrorMessages, ErrorArray, ""),
Result, COS(_number),
Error, IF(OR(ErrorArray), 3, IF(OR(ISERROR(Result)), 2, 1)),
CHOOSE(Error, Result, Help, Messages)
)
);
Cosh = LAMBDA(
_number,
LET(
Help, TRIM(TEXTSPLIT(
"DESCRIPTION:->Returns the hyperbolic cosine of a number\nVERSION:->1.0\nPARAMETERS:->_number as number",
"->",
"\n"
)),
ErrorMessages, {"_number is not a number."},
_err1, IF(NOT(ISNUMBER(_number)), #VALUE!, FALSE()),
ErrorArray, VSTACK(ISERROR(_err1)),
Messages, FILTER(ErrorMessages, ErrorArray, ""),
Result, COSH(_number),
Error, IF(OR(ErrorArray), 3, IF(OR(ISERROR(Result)), 2, 1)),
CHOOSE(Error, Result, Help, Messages)
)
);
Exp = LAMBDA(
_number,
LET(
Help, TRIM(TEXTSPLIT(
"DESCRIPTION:->Returns the exponential of a number\nVERSION:->1.0\nPARAMETERS:->_number as number",
"->",
"\n"
)),
ErrorMessages, {"_number is not a number."},
_err1, IF(NOT(ISNUMBER(_number)), #VALUE!, FALSE()),
ErrorArray, VSTACK(ISERROR(_err1)),
Messages, FILTER(ErrorMessages, ErrorArray, ""),
Result, EXP(_number),
Error, IF(OR(ErrorArray), 3, IF(OR(ISERROR(Result)), 2, 1)),
CHOOSE(Error, Result, Help, Messages)
)
);
Factorial = LAMBDA(
_number,
LET(
Help, TRIM(TEXTSPLIT(
"DESCRIPTION:->Returns the factorial of a number\nVERSION:->1.0\nPARAMETERS:->_number as number",
"->",
"\n"
)),
ErrorMessages, {"_number is not a number."},
_err1, IF(NOT(ISNUMBER(_number)), #VALUE!, FALSE()),
ErrorArray, VSTACK(ISERROR(_err1)),
Messages, FILTER(ErrorMessages, ErrorArray, ""),
Result, IF(_number=1,1, _number * Number.Factorial(_number -1)),
Error, IF(OR(ErrorArray), 3, IF(OR(ISERROR(Result)), 2, 1)),
CHOOSE(Error, Result, Help, Messages)
)
);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment