One error check firing at a cell: the check, and the facts that make it fire.
Remarks
Evidence, never a verdict: what the cell breaks and where, so the reader can judge it. A
pattern break is sometimes the right cell in a wrong run. There is no confidence.
The evidence a cell's finding carries is the same for every cell of a filled run that breaks
the same way, so a row of breaks is one region of the anomalies feature. Positions are
therefore relative to the cell, in R1C1 (R[-1]C is the cell above).
check
evidence
formula
axis ('row' / 'column') the run lies along; expected, the R1C1 formula both neighbors share; thickness, the cells across the break (Excel flags only 1); flanks, how far the run goes on each side; corroborated
formulaRange
reference, the range the formula reads; omitted, the typed number just past its end
layer ('font', 'fill', 'numberFormat', 'alignment'); axis; expected, the format both sides share; actual, this cell's; thickness, flanks, corroborated
styleRole
part ('fontColor'); role ('link', 'reference', 'computed', 'input'); expected, the color most cells of that role on the sheet have; actual, this cell's; majority, how many cells of the role have expected; of, how many cells the role has on the sheet
repeatedReference
reference, the reference counted again; overlaps, the one it falls inside when the two are not the same
degenerateCall
function; reference, the one cell aggregated, or literals, the typed numbers
sumIncludesSubtotal
reference, the range summed; subtotal or ratio, the cell inside it that is one
misalignedReference
term, the reference outside the block; block, the rows (or columns) of the cell's own block that the formula sums; landsAt, the block the term lands in, when it lands in one; targetRole, what the term reads: 'lineItem' (a line of another block), 'closingRow' (another block's last line, a subtotal), 'outsideBlocks' (no block) or 'absolute' (a fixed reference, a rate or an assumption)
approximateMatch
function; matchType, '1', '-1', 'TRUE' or 'omitted'
lookupShape
array, the range the result is read from; vector, the range the key is found in
externalReference
kind ('workbook', 'deleted', 'udf'); reference, or function for a 'udf'
errorConstant
error, the error the formula is; dataTable, the anchor of a data table that spills less than the block it heads, and extent, the rectangle the two cover
linkLabelMismatch
label / labelAt, the cell's row label; target / targetAt, the label of the row it links to
keyLabelMismatch
function; key; rowLabel / rowLabelAt and columnLabel / columnLabelAt, where found
signVsSiblings
reference; sign ('negative' / 'positive'); siblings, how many links into that row read the other sign; siblingAt, one of them
literalMatchesInput
literal, the number as the formula types it; inputAt, the nearest typed number of that value no formula reads; label / labelAt, that input's label, when it has one; matches, the places the value is typed unread
twinBlockDivergence
part ('literal' / 'sign'); for a literal, literal and expected, this formula's number and its twins'; for a sign, term of terms, the term that differs, references, how many the shape holds, and sign, how this formula adds it; twins, how many formulas carry the other side; twinAt, one of them
scaleOutlier
format ('percent'); times, the power of ten the value is off by; typical, the median of the sheet's typed numbers in that format; of, how many there are
unreferencedInput
label / labelAt, the line's label; cells, the typed numbers on the line nothing reads; value, the number as shown, for a line of one cell
rowGap
label / labelAt, the row's label; missing of of, the empty cells among those filled in both neighbor rows; kind ('cells', some of the row is filled; 'row', none of it); above / aboveAt and below / belowAt, the neighbor rows' labels, where text; labelFont: 'own' when neither neighbor's label shares the label's font
constantFrequency
kind ('number', 'string', 'boolean'); value, a number without its sign; uses, the places in the workbook that type it; of, the workbook's constant uses
Runs.formula, hardcodeInRun and styleBreak are one rule over different layers of
the sheet: a region thin against the run it sits in. The cells on both sides agree with each
other and not with it, and the run goes on at least two cells each side and at least as far as
the region is thick (flanks), so a block as large as its surroundings is a section, not a
break. A single cell between two that agree is kept too, with flanks: 1. A format compares
as authored on the cell: none ('normal'), one equal to the Normal style's
('authored-normal'), or the authored properties as JSON.
corroborated lists the other layers that change at both of the region's edges too: formula
shape ('formulaShape'), formula or typed value ('hasFormula'), the value's kind ('kind'),
and the format layers. A lone change, corroborated by nothing, is the stronger candidate; a
row that differs on many layers (a total under its line items) is usually structure.
Blocks.misalignedReference reads a formula against the block it closes or opens: the
lines (rows, or columns for a row-wise total) holding content in the formula's own columns,
between blank lines that span them. It fires on a sum that adds the block's own cells and
also, with the same sign, a cell off the block's lines: =SUM(K51:K53)+J46 in K54. A term on
the block's lines in another column (a prior period) and a term taken away are not reported,
nor is a sum of other blocks' totals that reads nothing of its own block. A running total that
adds the previous block's total is reported as closingRow, ranked low.
Roles. A cell's role (ICell.Role, the role feature) is its job, from what it
reads and who reads it. styleRole pairs a format part with the role, for links, references, computed cells and inputs
beside a label: the color most cells of a role have on the
sheet is the role's, and a link, reference or computed cell in another color fires when that
color is one the workbook writes some role in, on any sheet (a link left black where links
are green and calculations black), never when it is decorative (white, red, a section's text
color). A label never fires, and an input fires only beside a label: a typed number inside a
data block reads like the data around it. Colors are the authored font color as #RRGGBB; a
cell with none authored has the Normal style's. majority and of are evidence, not a
gate: a convention held by 3 of 5 cells is reported as such.
Rank says which finding to read first. It is not a confidence, and it is relative to the
workbook: a finding repeated across a model is the author's style, and the one that occurs
once is the exception to read first. So a finding's rank can change when another sheet
changes. Regions of the anomalies feature list highest rank first, and so do a cell's
findings, in check order within an equal rank.
Literals and twins.literalMatchesInput reads the numbers typed into a formula against
the typed numbers no formula reads: a reference replaced by its value is what left the input
unread. Small counts, calendar periods and powers of ten never fire. twinBlockDivergence
reads formulas of the same shape once references, literals and signs are set aside: twins that
divide by 12 and by 365, or one that adds a term the others take away. Literals compare only
when both are a calendar period, a power of ten or a small count. Every side of a divergence is
listed, since two wrong rows can outvote the right one.
A sign divergence ranks low: signs differ between line items by design, so it is read when
asked for by check.
constantFrequency reports every constant a formula types, the common ones too, with how many
places in the workbook type it (uses) and of how many constant uses (of). The rarer the
constant, the higher it ranks. A finding's uses and of change when another sheet changes.
What is left out.unreferencedInput reads the typed numbers beside a label that no
formula on any sheet reads: an assumption the model never uses, which in a model being built
is the item still to build. A labeled line fires only when none of its numbers is read, so a
historical row whose last period feeds a forecast is data in use; a line of numbers at one
step (years) is a header. The rank is divided by the line's cells: a lone cell is an
assumption, a long row is data. rowGap reads a labeled row against the rows above and
below it (within one spacer row): the cells filled in both neighbors and empty here are the
line left out, or its missing periods. A row that is partly filled ranks in full, an empty row
at half, and a row whose label is in a font neither neighbor shares (a heading) at a third.
Both findings change when another sheet starts or stops reading the cell.
A label's position is absolute (R12C3), since it stays put whichever cell of a region reads
it; its text is the one read at the region's first cell.
One error check firing at a cell: the check, and the facts that make it fire.
Remarks
Evidence, never a verdict: what the cell breaks and where, so the reader can judge it. A pattern break is sometimes the right cell in a wrong run. There is no confidence.
The evidence a cell's finding carries is the same for every cell of a filled run that breaks the same way, so a row of breaks is one region of the
anomaliesfeature. Positions are therefore relative to the cell, in R1C1 (R[-1]Cis the cell above).formulaaxis('row'/'column') the run lies along;expected, the R1C1 formula both neighbors share;thickness, the cells across the break (Excel flags only1);flanks, how far the run goes on each side;corroboratedformulaRangereference, the range the formula reads;omitted, the typed number just past its endnumberStoredAsTextemptyCellReferencereference, the reference that reads an empty cellunlockedFormulahardcodeInRunaxis,expected('formula'),thickness,flanks,corroboratedstyleBreaklayer('font','fill','numberFormat','alignment');axis;expected, the format both sides share;actual, this cell's;thickness,flanks,corroboratedstyleRolepart('fontColor');role('link','reference','computed','input');expected, the color most cells of that role on the sheet have;actual, this cell's;majority, how many cells of the role haveexpected;of, how many cells the role has on the sheetrepeatedReferencereference, the reference counted again;overlaps, the one it falls inside when the two are not the samedegenerateCallfunction;reference, the one cell aggregated, orliterals, the typed numberssumIncludesSubtotalreference, the range summed;subtotalorratio, the cell inside it that is onemisalignedReferenceterm, the reference outside the block;block, the rows (or columns) of the cell's own block that the formula sums;landsAt, the block the term lands in, when it lands in one;targetRole, what the term reads:'lineItem'(a line of another block),'closingRow'(another block's last line, a subtotal),'outsideBlocks'(no block) or'absolute'(a fixed reference, a rate or an assumption)approximateMatchfunction;matchType,'1','-1','TRUE'or'omitted'lookupShapearray, the range the result is read from;vector, the range the key is found inexternalReferencekind('workbook','deleted','udf');reference, orfunctionfor a'udf'errorConstanterror, the error the formula is;dataTable, the anchor of a data table that spills less than the block it heads, andextent, the rectangle the two coverlinkLabelMismatchlabel/labelAt, the cell's row label;target/targetAt, the label of the row it links tokeyLabelMismatchfunction;key;rowLabel/rowLabelAtandcolumnLabel/columnLabelAt, where foundsignVsSiblingsreference;sign('negative'/'positive');siblings, how many links into that row read the other sign;siblingAt, one of themliteralMatchesInputliteral, the number as the formula types it;inputAt, the nearest typed number of that value no formula reads;label/labelAt, that input's label, when it has one;matches, the places the value is typed unreadtwinBlockDivergencepart('literal'/'sign'); for a literal,literalandexpected, this formula's number and its twins'; for a sign,termofterms, the term that differs,references, how many the shape holds, andsign, how this formula adds it;twins, how many formulas carry the other side;twinAt, one of themscaleOutlierformat('percent');times, the power of ten the value is off by;typical, the median of the sheet's typed numbers in that format;of, how many there areunreferencedInputlabel/labelAt, the line's label;cells, the typed numbers on the line nothing reads;value, the number as shown, for a line of one cellrowGaplabel/labelAt, the row's label;missingofof, the empty cells among those filled in both neighbor rows;kind('cells', some of the row is filled;'row', none of it);above/aboveAtandbelow/belowAt, the neighbor rows' labels, where text;labelFont: 'own'when neither neighbor's label shares the label's fontconstantFrequencykind('number','string','boolean');value, a number without its sign;uses, the places in the workbook that type it;of, the workbook's constant usesRuns.
formula,hardcodeInRunandstyleBreakare one rule over different layers of the sheet: a region thin against the run it sits in. The cells on both sides agree with each other and not with it, and the run goes on at least two cells each side and at least as far as the region is thick (flanks), so a block as large as its surroundings is a section, not a break. A single cell between two that agree is kept too, withflanks: 1. A format compares as authored on the cell: none ('normal'), one equal to the Normal style's ('authored-normal'), or the authored properties as JSON.corroboratedlists the other layers that change at both of the region's edges too: formula shape ('formulaShape'), formula or typed value ('hasFormula'), the value's kind ('kind'), and the format layers. A lone change, corroborated by nothing, is the stronger candidate; a row that differs on many layers (a total under its line items) is usually structure.Blocks.
misalignedReferencereads a formula against the block it closes or opens: the lines (rows, or columns for a row-wise total) holding content in the formula's own columns, between blank lines that span them. It fires on a sum that adds the block's own cells and also, with the same sign, a cell off the block's lines:=SUM(K51:K53)+J46in K54. A term on the block's lines in another column (a prior period) and a term taken away are not reported, nor is a sum of other blocks' totals that reads nothing of its own block. A running total that adds the previous block's total is reported asclosingRow, ranked low.Roles. A cell's role (ICell.Role, the
rolefeature) is its job, from what it reads and who reads it.styleRolepairs a format part with the role, for links, references, computed cells and inputs beside a label: the color most cells of a role have on the sheet is the role's, and a link, reference or computed cell in another color fires when that color is one the workbook writes some role in, on any sheet (a link left black where links are green and calculations black), never when it is decorative (white, red, a section's text color). A label never fires, and an input fires only beside a label: a typed number inside a data block reads like the data around it. Colors are the authored font color as#RRGGBB; a cell with none authored has the Normal style's.majorityandofare evidence, not a gate: a convention held by 3 of 5 cells is reported as such.Rank says which finding to read first. It is not a confidence, and it is relative to the workbook: a finding repeated across a model is the author's style, and the one that occurs once is the exception to read first. So a finding's rank can change when another sheet changes. Regions of the
anomaliesfeature list highest rank first, and so do a cell's findings, in check order within an equal rank.Literals and twins.
literalMatchesInputreads the numbers typed into a formula against the typed numbers no formula reads: a reference replaced by its value is what left the input unread. Small counts, calendar periods and powers of ten never fire.twinBlockDivergencereads formulas of the same shape once references, literals and signs are set aside: twins that divide by12and by365, or one that adds a term the others take away. Literals compare only when both are a calendar period, a power of ten or a small count. Every side of a divergence is listed, since two wrong rows can outvote the right one.A sign divergence ranks low: signs differ between line items by design, so it is read when asked for by check.
constantFrequencyreports every constant a formula types, the common ones too, with how many places in the workbook type it (uses) and of how many constant uses (of). The rarer the constant, the higher it ranks. A finding'susesandofchange when another sheet changes.What is left out.
unreferencedInputreads the typed numbers beside a label that no formula on any sheet reads: an assumption the model never uses, which in a model being built is the item still to build. A labeled line fires only when none of its numbers is read, so a historical row whose last period feeds a forecast is data in use; a line of numbers at one step (years) is a header. The rank is divided by the line's cells: a lone cell is an assumption, a long row is data.rowGapreads a labeled row against the rows above and below it (within one spacer row): the cells filled in both neighbors and empty here are the line left out, or its missing periods. A row that is partly filled ranks in full, an empty row at half, and a row whose label is in a font neither neighbor shares (a heading) at a third. Both findings change when another sheet starts or stops reading the cell.A label's position is absolute (
R12C3), since it stays put whichever cell of a region reads it; its text is the one read at the region's first cell.