Excel Data Grouping: Finding the Oldest Person by Postcode
Excel Data Grouping: Finding the Oldest Person by Postcode
Written By: Ada Codewell – AI Specialist & Software Engineer at Gray Technical
Have you ever needed to group your data by postcode and then find the oldest person in each group? This common scenario can be challenging, especially when dealing with large datasets. In this article, we’ll explore why this problem occurs, examine real-world examples, provide a step-by-step solution, discuss an advanced variation using tools like CelTools, and highlight common mistakes to avoid.
Why This Problem Happens
The challenge of grouping data by postcode and finding the oldest person arises from several factors:
- Large Datasets: Working with extensive data can make manual sorting and filtering cumbersome.
- Complex Formulas: Excel functions like MAX, IF, and VLOOKUP are powerful but can be difficult to combine for this specific use case.
- Time Constraints: When time is limited, finding efficient ways to process data becomes crucial.
Step-by-Step Solution
Example Data Setup
Let’s start with a simple example. Assume you have the following data:
| Postcode | Name | Date of Birth |
|---|---|---|
| A12345 | John Smith | 01/01/1980 |
| A12345 | Jane Doe | 05/15/1975 |
| B67890 | Emily Clark | 03/22/1990 |
| C45678 | Michael Brown | 11/30/1985 |
| B67890 | David Wilson | 02/14/1970 |
Our goal is to group this data by postcode and find the oldest person in each group.
Step 1: Sort Data by Postcode and Date of Birth
First, we need to sort our data. Select your data range, go to the “Data” tab, and click on “Sort”. Choose to sort first by Postcode (A → Z) and then by Date of Birth (Oldest to Newest). This will arrange our data so that the oldest person in each postcode appears at the top.
Step 2: Use Helper Columns
To make things easier, let’s create helper columns. In column D, we’ll calculate the age of each person:
In cell D2: =DATEDIF(B2, TODAY(), "Y")
Step 3: Identify Oldest Person in Each Group
Now let’s use a formula to identify the oldest person. In column E, we’ll check if each row contains the oldest person for its postcode:
In cell E2: =IF(AND(A2=A1, D2<D1), "No", "Yes")
This formula marks rows where the person is not the oldest in their group. Drag this formula down to apply it to all rows.
Step 4: Filter Results
Finally, filter column E to show only rows marked as “Yes”. This will give you a list of the oldest people for each postcode.

Alternative Approach: Using Pivot Tables
For a more dynamic solution, you can use pivot tables. Here’s how:
- Select your data range and insert a pivot table (Data → PivotTable).
- In the pivot table fields pane:
– Drag “Postcode” to Rows
– Drag “Name” to Values (set it to Max)
– Drag “Date of Birth” to Values (set it to Min) - This will show you the oldest person in each postcode group.
Advanced Variation: Using CelTools for Automation
While you can do this manually, using tools like CelTools makes it much easier. CelTools automates the process of grouping data and finding the oldest person with just a few clicks.
Common Mistakes or Misconceptions
When working on this problem, be aware of these common pitfalls:
- Incorrect Sorting: Make sure to sort by both postcode and date of birth in the correct order.
- Helper Columns: Forgetting to create helper columns for age calculations can lead to errors.
- Pivot Table Settings: When using pivot tables, ensure you’ve set up the values correctly (Max for name and Min for date of birth).
Optional VBA Version
For those comfortable with VBA, here’s a script that automates this process:
Sub FindOldestPersonByPostcode()
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("Sheet1")
Dim lastRow As Long
lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
' Sort data by Postcode and Date of Birth (Oldest to Newest)
With ws.Sort
.SortFields.Clear
.SortFields.Add Key:=Range("A2:A" & lastRow), Order:=xlAscending
.SortFields.Add Key:=Range("C2:C" & lastRow), Order:=xlAscending
.SetRange Range("A1:C" & lastRow)
.Header = xlYes
.Apply
End With
' Add helper column for age calculation
ws.Cells(2, 4).Value = "Age"
Dim i As Long
For i = 2 To lastRow
ws.Cells(i, 4).Value = DateDiff("yyyy", ws.Cells(i, 3), Date)
Next i
' Identify oldest person in each group
ws.Cells(2, 5).Value = "Oldest"
For i = 2 To lastRow
If i = 2 Or ws.Cells(i, 1) ws.Cells(i - 1, 1) Then
ws.Cells(i, 5).Value = "Yes"
ElseIf ws.Cells(i, 4) < ws.Cells(i - 1, 4) Then
ws.Cells(i, 5).Value = "No"
End If
Next i
' Filter to show only oldest persons
ws.Range("A1:E" & lastRow).AutoFilter Field:=5, Criteria1:="Yes"
End Sub
Technical Summary
The challenge of grouping data by postcode and finding the oldest person can be addressed through several methods. Manual sorting and filtering work well for small datasets but become cumbersome with larger ones. Helper columns and pivot tables offer more efficient solutions, while tools like CelTools automate the process entirely.
The combination of manual techniques and specialized tools provides a robust solution for this common Excel problem.






















