ARRAY Function (Gnumeric)
Construct a vertical Gnumeric ARRAY from ordered arguments and ranges, preserve types, and verify nested lists and array-entry dimensions.
Verification status: See the evidence and test scope described in this guide. How formula examples are checked
Quick answer: =ARRAY(10,20,30) constructs the vertical values 10,20,30. ARRAY concatenates argument values into one column; it is not an identity-matrix constructor or a sorting function.
Availability and evidence
- Introduction: Gnumeric 1.10.8. NEWS explicitly adds ARRAY and SORT.
- Source support: Registered in the Gnumeric 1.12.62 plugin. No retirement is established. The last functioning application version is unverified for this guide.
- Evidence dates: Official source was retained October 13–14, 2026 and reviewed October 15. Typed-list, positional, workbook-index and exact product checks are independent reference calculations. No native Gnumeric, compiled-library, headless application or GUI execution was performed.
Syntax and output shape
=ARRAY(value1,value2,...)
Supply values, ranges or arrays in the order to be collected. The pinned iterator expands the arguments and the function places the collected values into one vertical column. It preserves duplicates rather than keeping only distinct values.
No arguments produce #VALUE! in the source callback. One collected value is returned directly. Two or more create a one-column array with one row per collected value. A scalar result from one value is therefore not evidence that a longer list also returns only one value.
ARRAY is registered as a Gnumeric-specific function. A similar-looking function in another product need not share this syntax or behavior. In particular, a generic reference to “an array formula” does not mean a workbook uses the ARRAY function.
Complete list-construction worksheet
Create ArrayControls. Put numeric 10,20,30 in A2:A4 and 40,50 in C2:C3. Select E2:E7 and enter =ARRAY(A2:A4,C2:C3,60) using Ctrl+Shift+Enter, following the pinned array-entry manual.
| Output cell | Source | Reference value |
|---|---|---|
| E2 | A2 | 10 |
| E3 | A3 | 20 |
| E4 | A4 | 30 |
| E5 | C2 | 40 |
| E6 | C3 | 50 |
| E7 | final literal | 60 |
This creates six rows. It does not place the two source columns side by side, and it does not infer a six-column horizontal row. The original cells remain in their original locations.
In a copy change C3 from 50 to 55. The expected result becomes 10,20,30,40,55,60. Only the fifth output entry changes. Restore the original data before trying other controls.
Reference controls
| Formula or controlled values | Independent reference result |
|---|---|
=ARRAY(10,20,30) |
[10; 20; 30] |
=ARRAY(A2:A4,C2:C3,60) |
[10; 20; 30; 40; 50; 60] |
=ARRAY(3,1,2,1) |
[3; 1; 2; 1] |
=ARRAY(7) |
7 |
=ARRAY() |
#VALUE! |
=ARRAY("A",TRUE,5) |
[A; TRUE; 5] |
=ARRAY(1,1/0,3) |
[1; #DIV/0! (error entry); 3] |
=ARRAY(ARRAY(1,2),3,ARRAY(4,5)) |
[1; 2; 3; 4; 5] |
The table lists value sequences, not a promise about localized array-constant separators. A TRUE entry represents a Boolean value; a quoted text entry remains text. Error entries are identified as errors rather than string labels.
Advanced: nesting preserves the argument sequence
=ARRAY(ARRAY(1,2),3,ARRAY(4,5)) has the reference sequence 1,2,3,4,5. The nested arrays are expanded into the same one-column result; they do not become nested objects stored inside single cells.
For an actual two-dimensional array value, the shared iterator visits its rows in order, taking columns from left to right within each row. This is a source statement about array-value traversal, not a native certification of every external reference or multi-sheet range. The main worksheet deliberately uses simple single-column ranges.
For example, =ARRAY(TRANSPOSE(ARRAY(1,2,3)),4) has reference sequence 1,2,3,4: the inner column becomes one row, and ARRAY then visits that row before the final argument. Enter the outer formula in a four-row array output.
Advanced: choose orientation explicitly
To produce a horizontal row from the original constructed list, use =TRANSPOSE(ARRAY(A2:A4,C2:C3,60)) in a one-row, six-column output. Its reference values are 10,20,30,40,50,60 from left to right.
Changing orientation does not change the number of collected values. The six-item column has six rows and one column; its transpose has one row and six columns. Choose the output shape from the actual number of entries rather than from the number of function arguments, since one range argument can contain several values.
Advanced: keep construction and numeric sorting separate
=ARRAY(3,1,2,1) preserves 3,1,2,1. Applying Gnumeric =SORT(ARRAY(3,1,2,1),1) gives the ascending numeric reference list 1,1,2,3. The repeated 1 is retained in both cases.
ARRAY preserves types, while SORT’s numeric collector ignores text and Booleans. Combining the two functions can therefore change the number of output values when the constructed list is mixed-type. Do not size a later numeric result solely by counting ARRAY’s arguments.
Empty values and errors
ARRAY uses non-strict argument iteration. Its callback copies text, numbers, Boolean values and encountered error values into the output. An error in a collected entry is retained at that position; it is not automatically converted into text or silently discarded.
The iterator visits physically empty entries under its all-cells flag and the callback creates empty values for missing cells. Their visible array-cell rendering was not tested. Do not infer an exact blank display or a zero from that storage description. The complete worksheet uses only numeric entries to make every visible expectation unambiguous.
Troubleshooting and scope
Check the argument order, the total expanded length and whether the selected output is a column or row. Keep a constructed result separate from its inputs so a formula does not refer to its own output region. The function collects values, not source formatting, comments or spreadsheet objects.
Native output padding, dynamic spill, localized error display and export behavior are unverified. The documented array-entry procedure and source-level traversal explain the examples without claiming that an application or GUI was executed.