PROPER
BEGINLETTERS in Dutch Excel
Capitalizes the first letter of a text and every letter that follows a non-letter, and lowercases all other letters.
Last updated: 13 October 2026
| Row | A | B | C | D |
|---|---|---|---|---|
| 1 | Relation | Name in debtor list | Balance 31 Dec 2025 | Readable name |
| 2 | D1001 | JANSEN BOUWMATERIALEN | €18,450.00€ 18.450,00 | Jansen Bouwmaterialen=PROPER(B2)=PROPER(B2) |
| 3 | D1002 | DE GROOT TRANSPORT | €7,320.50€ 7.320,50 | |
| 4 | D1003 | BRINKMAN INSTALLATIE BV | €22,980.75€ 22.980,75 | |
| 5 | D1004 | KUIPERS-HOEKSTRA ADVIES | €3,150.00€ 3.150,00 | |
| 6 | D1005 | BAKKERIJ VAN DIJK | €9,640.25€ 9.640,25 |
Swipe sideways to see all columns
Result: Jansen Bouwmaterialen
=PROPER(B2)
=PROPER(B2)
What PROPER does and when to use it
What it does: it gives every word in a text a capital first letter and lowercase letters after it, for example MEUBELFABRIEK JANSEN becomes Meubelfabriek Jansen.
When to use it: for product names, street names, job titles and headings that arrived in capitals or in lowercase. On personal names it is a first pass only: it turns McDonald into Mcdonald and capitalizes prefixes such as van der. It follows one mechanical rule and knows nothing about names.
How Excel evaluates it
Excel reads the text and walks through it one character at a time, remembering only whether the previous character was a letter:
- a letter that comes first, or right after a non-letter, is written in uppercase
- any other letter is written in lowercase
- a non-letter is copied unchanged and resets the memory
So in o'neill the apostrophe is a non-letter, which is why the n after it becomes N; in mcdonald there is no non-letter anywhere, so only the m is capitalized. Digits count as non-letters too: 3rd becomes 3Rd. The result is text, and the source cell is not changed.
Watch out: PROPER lowercases everything after the first letter of each word, so abbreviations, legal forms and codes lose their capitals (BV becomes Bv, XT-200 becomes Xt-200). Do not run it over columns with codes or acronyms.
Mental model
A typist who presses Shift after every space, hyphen, digit or apostrophe, and never anywhere else.
Terms used on this page: cell
PROPER(text)
PROPER(text)
| Argument | Type | Meaning |
|---|---|---|
text | Required | The text to recapitalize; a cell reference or text in quotes. |
Return value:Text: every word starting with a capital letter
Formulas use commas (,) between arguments, as in English Excel. Formulas use semicolons (;) between arguments, as in Dutch Excel. Formulas use commas (,) between arguments, as in English Excel; Dutch Excel uses semicolons (;).
Worked examples
Beginner
Make debtor names from the aging list readable
The client's receivables aging list (ouderdomsanalyse debiteuren) was exported with every customer name in capitals. For your working paper on the debtor confirmations you want readable names next to the balances. You add a column that recapitalizes each name, and you read through the result once before you paste it into the working paper.
| Row | A | B | C | D | E |
|---|---|---|---|---|---|
| 1 | Relation | Name in debtor list | Balance 31 Dec 2025 | Readable name | |
| 2 | D1001 | JANSEN BOUWMATERIALEN | €18,450.00€ 18.450,00 | Jansen Bouwmaterialen=PROPER(B2)=PROPER(B2) | |
| 3 | D1002 | DE GROOT TRANSPORT | €7,320.50€ 7.320,50 | ||
| 4 | D1003 | BRINKMAN INSTALLATIE BV | €22,980.75€ 22.980,75 | ||
| 5 | D1004 | KUIPERS-HOEKSTRA ADVIES | €3,150.00€ 3.150,00 | ||
| 6 | D1005 | BAKKERIJ VAN DIJK | €9,640.25€ 9.640,25 | ||
| 7 |
Swipe sideways to see all columns
Formula in D2
=PROPER(B2)
=PROPER(B2)
Result: Jansen Bouwmaterialen
Step by step
- Excel reads
B2and finds JANSEN BOUWMATERIALEN, 21 characters. - The first character, J, is a letter at the start, so it stays uppercase. A, N, S, E, N follow a letter, so each becomes lowercase: Jansen.
- The space is not a letter and is copied unchanged. B comes right after it, so B stays uppercase; the other 13 letters, OUWMATERIALEN, follow letters and become lowercase: Bouwmaterialen.
D2shows Jansen Bouwmaterialen.B2itself is not changed.- Copy
D2down. Row 5 becomes Kuipers-Hoekstra Advies: the hyphen is a non-letter, so the H after it gets a capital. Row 4 becomes Brinkman Installatie Bv: the B of BV stays, the V is lowercased, and the abbreviation is damaged.
Watch out: Brinkman Installatie BV comes back as Brinkman Installatie Bv. Legal forms and other abbreviations lose their capitals, and you cannot tell PROPER which words to skip.
More on this example: why it works, 1 more pitfall, 1 variation
Why it works
Company names are made of words separated by spaces and hyphens, which is the case the rule handles well: every word starts after a non-letter, so every word gets one capital and the rest lowercase. Legal forms such as BV and NV are the exception, which is why you still read the column once before it goes into the working paper.
More to watch out for
- The new column is text. Match it against the ledger by the relation code in column A, never by the recapitalized name.
Variations
=PROPER(B2:B6)
=PROPER(B2:B6)
In Excel 2021 or Microsoft 365 one formula in D2 spills all five names; nothing to copy down.
Intermediate
Clean journal descriptions exported from the XAF auditfile
In the journal lines of the XAF auditfile the descriptions were typed by several people: some in capitals, some in lowercase, with leading, trailing and double spaces. For your journal entry testing you want one clean line per entry that reads the same way everywhere. PROPER does the capitals, TRIM removes the spaces first, and you check the effect on codes such as BTW and Q3 before you use the column.
| Row | A | B | C | D | E |
|---|---|---|---|---|---|
| 1 | Entry no. | Journal | Description as exported | Clean description | |
| 2 | 25-0412 | INK | PURCHASE INVOICEBRINKMAN INSTALLATIE 25-0412 | Purchase Invoice Brinkman Installatie 25-0412=PROPER(TRIM(C2))=PROPER(TRIM(C2)) | |
| 3 | 25-0413 | BNK | BANK RECEIPT DE GROOT TRANSPORT | ||
| 4 | 25-0414 | MEM | VAT RETURN Q3 | ||
| 5 | 25-0415 | VRK | sales invoicejansen bouwmaterialen | ||
| 6 |
Swipe sideways to see all columns
Formula in D2
=PROPER(TRIM(C2))
=PROPER(TRIM(C2))
Result: Purchase Invoice Brinkman Installatie 25-0412
Step by step
- Excel evaluates TRIM first.
C2holds 49 characters: two leading spaces, a double space after INVOICE and one trailing space. TRIM removes the edge spaces and reduces the double space to one, so it returns 45 characters: PURCHASE INVOICE BRINKMAN INSTALLATIE 25-0412. - PROPER starts at P, the first character, which stays uppercase; URCHASE follows letters and becomes lowercase: Purchase.
- The space is copied. I follows it and stays uppercase, NVOICE becomes lowercase: Invoice. The same happens to B in BRINKMAN (Brinkman) and I in INSTALLATIE (Installatie).
- 25-0412 contains only digits and a hyphen. They are not letters, so they are copied unchanged.
D2shows Purchase Invoice Brinkman Installatie 25-0412. Copy
D2down:D3gives Bank Receipt De Groot Transport (the Dutch tussenvoegsel De keeps a capital)D4gives Vat ReturnQ3: the Q after the space stays uppercase and the 3 is copiedD5gives Sales Invoice Jansen Bouwmaterialen: TRIM removed the double space and PROPER capitalized the lowercase text
Watch out: Do not run PROPER over the journal column or any other code column: INK, MEM and VRK would become Ink, Mem and Vrk, and a filter or lookup on the real codes would no longer find them.
More on this example: why it works, 1 more pitfall, 1 variation
Why it works
TRIM runs first so that PROPER sees single spaces; without it, D2 would keep its leading spaces and the double space, because PROPER copies non-letters as they are. The hyphen and the digits count as non-letters, which is why the entry number stays intact. PROPER has no list of exceptions: in D4 the abbreviation VAT becomes Vat, which is the cost of a rule that never looks at the word itself.
More to watch out for
- The clean description is text derived from the original. Keep column C untouched as evidence and work from column D, or you cannot show the auditfile line as received.
Variations
=PROPER(TRIM(C2:C5))
=PROPER(TRIM(C2:C5))
In Excel 2021 or Microsoft 365 one formula in D2 cleans all four descriptions and spills; nothing to copy down.
Advanced
Capitalize only the first letter of a manual entry description
For journal entry testing you pulled the manual MEM entries from the auditfile. The descriptions were typed in capitals or in lowercase, and for the working paper they must read like sentences: first letter uppercase, the rest lowercase.
PROPER is the wrong tool, because it would capitalize every word. You build the sentence case yourself from UPPER, LOWER, LEFT and MID, and PROPER appears in the variations as the function you deliberately do not use.
| Row | A | B | C | D | E |
|---|---|---|---|---|---|
| 1 | Entry no. | Description as typed | Amount | Description for working paper | |
| 2 | 25-0871 | MANUAL CORRECTION HOLIDAY PAY | €15,000.00€ 15.000,00 | Manual correction holiday pay=UPPER(LEFT(B2, 1)) & LOWER(MID(B2, 2, LEN(B2)))=UPPER(LEFT(B2; 1)) & LOWER(MID(B2; 2; LEN(B2))) | |
| 3 | 25-0872 | reversal of rent accrual | €4,250.75€ 4.250,75 | ||
| 4 | 25-0873 | ADJUSTMENT AT CLIENT REQUEST | €20,000.00€ 20.000,00 | ||
| 5 |
Swipe sideways to see all columns
Formula in D2
=UPPER(LEFT(B2,1)) & LOWER(MID(B2, 2, LEN(B2)))
=UPPER(LEFT(B2;1)) & LOWER(MID(B2; 2; LEN(B2)))
Result: Manual correction holiday pay
Step by step
- Excel evaluates the left half first. LEFT(B2, 1) takes the first character of MANUAL CORRECTION HOLIDAY PAY: M. UPPER(M) is M; it was already a capital.
- Then the right half, inside out. LEN(B2) is 6 + 1 + 10 + 1 + 7 + 1 + 3 = 29. MID(B2, 2, 29) starts at the second character and asks for 29 characters; only 28 remain, and MID returns all of them: ANUAL CORRECTION HOLIDAY PAY.
- LOWER turns that into anual correction holiday pay.
- The & joins the two halves: M and anual correction holiday pay give Manual correction holiday pay. That is
D2. - Copy down. Row 3, which was already lowercase, becomes Reversal of rent accrual: only the r changed. Row 4 becomes Adjustment at client request.
- PROPER on the same cell would give Manual Correction Holiday Pay: every word capitalized, which is not how a sentence reads.
Watch out: Names inside the description are lowercased too: CORRECTION BRINKMAN INSTALLATIE becomes Correction brinkman installatie. The formula returns a plausible sentence and never flags it.
More on this example: why it works, 1 more pitfall, 2 variations
Why it works
Sentence case is two different treatments for two parts of the text, so the formula splits the text at position 1 and treats each part on its own. Asking MID for LEN(B2) characters is a deliberate over-ask: MID never errors when fewer remain, and it saves a LEN(B2) - 1 that people often get wrong by one. PROPER cannot be coaxed into this, because its rule fires on every space.
More to watch out for
- A description that starts with a space gives a space followed by lowercase text. Wrap
B2in TRIM if the auditfile has stray spaces.
Variations
=PROPER(B2)
=PROPER(B2)
Title case instead of sentence case: Manual Correction Holiday Pay. Right for headings, wrong for sentences.
=REPLACE(LOWER(B2),1, 1, UPPER(LEFT(B2, 1)))
=REPLACE(LOWER(B2);1; 1; UPPER(LEFT(B2; 1)))
Same result with REPLACE: lowercase everything, then overwrite position 1 with the uppercase first letter. Shorter, and no MID arithmetic.
MasterExcel for Microsoft 365 (This example needs Excel for Microsoft 365)
PROPER plus an exceptions table, in LET
You send debtor confirmations for 400 customers from the client's aging list, and the names in the export are in capitals or lowercase. PROPER handles the bulk, but tussenvoegsels, the word en and legal forms such as BV come out wrong every time, and one nested SUBSTITUTE per exception makes the formula unreadable after three. You keep the exceptions in a small two-column table and apply them all in a REDUCE loop, so a new exception means a new row, not an edit of the formula.
| Row | A | B | C | D | E | F |
|---|---|---|---|---|---|---|
| 1 | Name as exported | Wrong | Right | Name for the letter | ||
| 2 | BOUWBEDRIJF VAN DER BERG | Van Der | van der | Bouwbedrijf van der Berg=LET( base, PROPER(TRIM(A2)), padded, " " & base & " ", fixed, REDUCE(padded, SEQUENCE(ROWS($B$2:$B$6)), LAMBDA(acc, i, SUBSTITUTE(acc, INDEX($B$2:$B$6, i), INDEX($C$2:$C$6, i)))), TRIM(fixed) )=LET( base; PROPER(TRIM(A2)); padded; " " & base & " "; fixed; REDUCE(padded; SEQUENCE(ROWS($B$2:$B$6)); LAMBDA(acc; i; SUBSTITUTE(acc; INDEX($B$2:$B$6; i); INDEX($C$2:$C$6; i)))); TRIM(fixed) ) | ||
| 3 | dakdekkers de vries en zonen | Van | van | |||
| 4 | KAVELMOOR TRANSPORT BV | De | de | |||
| 5 | SCHILDERBEDRIJF VAN DIJK | En | en | |||
| 6 | HOEKSTRA EN DE BRUIN BV | Bv | BV | |||
| 7 |
Swipe sideways to see all columns
Formula in E2
=LET( base,PROPER(TRIM(A2)), padded, " " & base & " ", fixed, REDUCE(padded, SEQUENCE(ROWS($B$2:$B$6)), LAMBDA(acc, i, SUBSTITUTE(acc, INDEX($B$2:$B$6, i), INDEX($C$2:$C$6, i)))), TRIM(fixed) )
=LET( base;PROPER(TRIM(A2)); padded; " " & base & " "; fixed; REDUCE(padded; SEQUENCE(ROWS($B$2:$B$6)); LAMBDA(acc; i; SUBSTITUTE(acc; INDEX($B$2:$B$6; i); INDEX($C$2:$C$6; i)))); TRIM(fixed) )
Result: Bouwbedrijf van der Berg
Step by step
- base: TRIM(A2) leaves BOUWBEDRIJF VAN DER BERG unchanged, and PROPER turns it into Bouwbedrijf Van Der Berg. Every word gets a capital, including the two that should not.
- padded adds a space at both ends, so a word at the very start or end of a name is still surrounded by spaces and can match the table: " Bouwbedrijf Van Der Berg ".
- ROWS($B$2:$B$6) is 5, so SEQUENCE returns 1 to 5. REDUCE starts with padded as the accumulator and runs the LAMBDA once per number. Each pass replaces the i-th Wrong value with the i-th Right value in the text the previous pass produced.
- Pass 1, i = 1: SUBSTITUTE looks for " Van Der " and finds it: the text becomes " Bouwbedrijf van der Berg ". Pass 2 looks for " Van ", pass 3 for " De ", pass 4 for " En ", pass 5 for " Bv ": none occurs, so the accumulator stays the same.
- TRIM removes the two padding spaces.
E2shows Bouwbedrijf van der Berg. - The order of the table matters: Van Der is listed before Van. If Van came first, pass 1 would turn Van Der into van Der, and Der would never be fixed. Longest exception first is the rule.
Copied down with the table references fixed:
E3gives Dakdekkers de Vries en Zonen (passes 3 and 4)E4gives Kavelmoor Transport BV (pass 5)E5gives Schilderbedrijf van Dijk (pass 2)E6gives Hoekstra en de Bruin BV (passes 3, 4 and 5)
Watch out: The mirror image, applying the exceptions before PROPER, looks the same and does nothing: PROPER runs last and recapitalizes every de and van back to De and Van. The fixes must come after PROPER.
More on this example: why it works, 2 more pitfalls, 2 variations
Why it works
PROPER is used for what it is good at, the bulk, and its known failures are corrected afterwards from data rather than from code. REDUCE threads one text through a list of replacements, which is what nested SUBSTITUTE calls do, but the list lives in cells where anyone can extend it, and ROWS($B$2:$B$6) makes the loop follow the table.
Do not use this construction for a one-off list of fifty names: read them and fix by hand, it is faster and safer. The alternative for very large lists is a Power Query transform with a merge against the same exceptions table; it handles millions of rows but refreshes on demand instead of live.
More to watch out for
- Forget the padding spaces and the exceptions match inside words: a Wrong value of De without spaces turns Dekker into dekker.
- A name that starts with a tussenvoegsel, such as Van Dijk Installatie, comes back as van Dijk Installatie, because the padding makes the first word match too. Check the first word of each name by eye, or add the exceptions only for words in the middle.
Variations
=SUBSTITUTE(SUBSTITUTE(" " & PROPER(TRIM(A2)) & " "," Van Der ", " van der "), " De ", " de ")
=SUBSTITUTE(SUBSTITUTE(" " & PROPER(TRIM(A2)) & " ";" Van Der "; " van der "); " De "; " de ")
The nested version for two or three exceptions (wrap it in TRIM to drop the padding). Readable up to three; after that, use the table.
=PROPER(TRIM(A2))
=PROPER(TRIM(A2))
The baseline without the table: Bouwbedrijf Van Der Berg. This is what the exceptions table corrects.
Common mistakes
| Symptom | Cause | Fix |
|---|---|---|
| Van Der Berg, Mcdonald and Iphone | A list of names came back with Van Der Berg, Mcdonald and Iphone, and someone has to correct them by hand. | That is PROPER working as designed. Keep the original column, apply PROPER, then fix known exceptions with SUBSTITUTE or an exceptions table; do not paste over the source. |
| IT became It, BV became Bv | Abbreviations lost their capitals: IT became It, Kavelmoor BV became Kavelmoor Bv, and a product code XT-200 became Xt-200. | Leave columns with codes or acronyms out of it, or use UPPER for those columns. |
| Dates turned into numbers like 46113 | You applied PROPER to a column of dates and they turned into numbers such as 46113. | A date is a number, and PROPER converts it to text. Leave date columns alone; use TEXT if you need a month name, and wrap it in PROPER if you need the capital (in Dutch Excel TEXT gives lowercase month names such as "maart"). |