Skip to content

Instantly share code, notes, and snippets.

@nsolnit
nsolnit / xlUnitsModule.code-snippets
Last active February 23, 2026 20:14
Excel function module for unit parsing and conversion
// --- Unit parsing and conversion ---
// Check a compound unit string for valid registry entries. Not intended for workbook use
// Strips parentheses, exponents, and sign characters; splits on * and /; checks each
// component unit name against ureg_units.
// Returns "OK" if all components are found, or "Undefined Units :: a, b, ..." for all bad names.
UnitDefCheck = LAMBDA(ustring,
LET(
stripped, REGEXREPLACE(ustring, "[()\d+\-\s]", ""),
@nsolnit
nsolnit / PipeModule.code-snippets
Last active February 24, 2026 17:59
Plumbing and Piping Tools
/**Pipe ID (in.) based on Hazen-Williams formulation
given Head Loss (ft. hd.), flow (GPM), Hazen Williams Roughness Coefficient (),
and length (ft.) [100']*/
HazenWilliamsDiam = LAMBDA(Head, GPM, [RC], [Length],
LET(RC_, IF(ISOMITTED(RC), 140, RC),
L, IF(ISOMITTED(Length), 100, Length),
(4.52 * (GPM/RC_)^1.852*L / (Head/2.31)) ^ (1/4.8704)
)
);
@nsolnit
nsolnit / AirModule.code-snippets
Last active February 24, 2026 17:58
Named Excel Lambdas for Air Systems
// Excel formula module with functions for air systems
/**Rectangular duct equivalent diameter (Huebscher) for static pressure loss*/
// See https://www.engineeringtoolbox.com/equivalent-diameter-d_205.html
RectDuctEqDiam = LAMBDA(WIDTH, HEIGHT,
1.30*(WIDTH*HEIGHT)^0.625/(WIDTH+HEIGHT)^0.25);
/** Equivalent rectangular duct dimension given equivalent diameter and fixed dimension (inches) -
Currently no array support*/
RectDuctEqWidth = LAMBDA(DIAM, HEIGHT,
@nsolnit
nsolnit / xlGeneralModule.code-snippets
Last active February 24, 2026 18:00
Toolbox of named excel lambdas
/**Cumulative sum over array*/
CSUM = LAMBDA(arr,
SCAN(0,arr,LAMBDA(a,c,a+c)));
/**Ignores Null ref (empty, space or 0), returns "" or VAl if provided*/
IFN = LAMBDA(REF,FUN,[VAL],
IF(OR(REF="",REF=" ",REF=0),IF(ISOMITTED(VAL),"",VAL),FUN)
);
/**1D linear interpolation, set SORTED=0 for unsorted data - presorting data recommended*/
@nsolnit
nsolnit / xInterp.txt
Last active June 15, 2023 10:05
Named EXCEL lambdas for one and two dimensional linear interpolation
/**Basic 1D linear generator from 2 pts*/
LEXT = LAMBDA(X,XS,YS,
LET(X_1,INDEX(XS,1),
X_2, INDEX(XS,2),
Y_1, INDEX(YS,1),
Y_2, INDEX(YS,2),
Y_1+(X-X_1)*(Y_2-Y_1)/(X_2-X_1)
)
);