What is Net Run Rate (NRR) and How is it Calculated?
In cricket, the Net Run Rate (NRR) is a statistical method used to rank teams with equal points in a tournament standings table. It is essentially a measure of how much faster or slower a team scores compared to its opponents.
The NRR Formula
The mathematical formula for NRR is:
NRR = (Total Runs Scored / Total Overs Faced) – (Total Runs Conceded / Total Overs Bowled)
The "All Out" Rule: If a team is bowled out (all 10 wickets lost) before their allotted overs are completed, the calculation uses the full quota of overs for that innings (e.g., 20.0 for T20 or 50.0 for ODI), regardless of how many overs were actually played.
Example Calculation
Imagine Team A scores 160 runs in 20 overs. In response, Team B scores 140 runs in 20 overs.
Team A Run Rate For: 160 / 20 = 8.00
Team A Run Rate Against: 140 / 20 = 7.00
Team A NRR: 8.00 – 7.00 = +1.000
Using the Net Run Rate Calculator Excel Download
While this web-based tool provides instant results, many tournament organizers prefer using Excel for season-long tracking. Our tool allows you to input individual match data and export it into a CSV format, which can be opened directly in Microsoft Excel, Google Sheets, or Numbers.
To use the Excel functionality:
Enter the match details (Runs, Overs, and All-Out status).
Click "Calculate" to verify the logic.
Click "Download CSV/Excel" to save the data for your records.
Tips for Accurate NRR Tracking
Decimal Conversion: Remember that in cricket, 15.3 overs means 15 overs and 3 balls. For calculation, this is converted to 15.5. Our calculator handles this conversion automatically.
Rain Affected Matches: In DLS (Duckworth-Lewis-Stern) matches, the NRR is calculated based on the revised targets and revised overs.
Abandoned Matches: Matches that result in a "No Result" do not count toward NRR calculations.
function convertOversToDecimal(oversInput) {
var val = parseFloat(oversInput);
if (isNaN(val)) return 0;
var integerPart = Math.floor(val);
var fractionPart = (val – integerPart).toFixed(1);
var balls = Math.round(fractionPart * 10);
if (balls >= 6) {
return integerPart + 1;
}
return integerPart + (balls / 6);
}
function calculateNRR() {
var quota = parseFloat(document.getElementById('matchQuota').value);
var runsScored = parseFloat(document.getElementById('runsScored').value);
var oversFacedRaw = parseFloat(document.getElementById('oversFaced').value);
var teamAllOut = document.getElementById('teamAllOut').checked;
var runsConceded = parseFloat(document.getElementById('runsConceded').value);
var oversBowledRaw = parseFloat(document.getElementById('oversBowled').value);
var oppAllOut = document.getElementById('oppAllOut').checked;
if (isNaN(runsScored) || isNaN(oversFacedRaw) || isNaN(runsConceded) || isNaN(oversBowledRaw)) {
alert("Please fill in all match statistics.");
return;
}
// Logic for All Out rule
var effectiveOversFaced = teamAllOut ? quota : convertOversToDecimal(oversFacedRaw);
var effectiveOversBowled = oppAllOut ? quota : convertOversToDecimal(oversBowledRaw);
if (effectiveOversFaced === 0 || effectiveOversBowled === 0) {
alert("Overs cannot be zero.");
return;
}
var rrFor = runsScored / effectiveOversFaced;
var rrAgainst = runsConceded / effectiveOversBowled;
var nrr = rrFor – rrAgainst;
var resultDiv = document.getElementById('nrr-result');
resultDiv.style.display = 'block';
if (nrr >= 0) {
resultDiv.className = 'result-positive';
resultDiv.innerHTML = '