Reputation: 437
How to count the number of cells which contain specific text using Google sheet scripts?
Currently I'am using the following script to count the number of cells which contain specific text, for example cells which contain: 'Complete' or 'Not Complete'.
function COUNT_TEXT_ACROSS_SHEETS(sheetNames, range, text) {
sheetNames = sheetNames.split(',');
var count = 0;
sheetNames.forEach(function(sheetName) {
var sheet = SpreadsheetApp.getActive().getSheetByName(sheetName);
var values = sheet.getRange(range).getValues();
values.forEach(function(row) {
row.forEach(function(cell) {
if (cell.indexOf(text) !== -1 ) count++;
});
});
});
return count;
};
Currently the script counts both cells which contain the text 'Complete' and 'Not Complete' is there a way to modify the script to only count cells which contain the full word 'Complete' instead of also counting cells which contain 'Not Complete' because the cell also contains the keyword: 'Complete'?
Example usage of the current script:
=COUNT_TEXT_ACROSS_SHEETS("Sheet1", "C1:C1000", "NOT COMPLETE")
Upvotes: 0
Views: 2093
Reputation: 64140
How about this:
function COUNT_TEXT_ACROSS_SHEETS(sheetNames, range, text) {//text=['Complete','Not Complete']
var nA=sheetNames.split(',');
var tA=text.split(',');
var count = 0;
var cObj={};
cObj[tA[0]]=0;
cObj[tA[1]]=0;
nA.forEach(function(name) {
var sh=SpreadsheetApp.getActive().getSheetByName(name);
var vA = sheet.getRange(range).getValues();
vA.forEach(function(r) {
r.forEach(function(c) {
var idx0=c.indexOf(tA[0]);
var idx1=c.indexOf(tA[1]);
if(idx0!=-1 && idx1==-1)cObj[tA[0]]+=1;
if(idx0!=-1 && idx1!=-1)cObj[tA[1]]+=1
});
});
});
return Utilities.formatString('Count-%s:%s Count-%s:%s',tA[0],cObj[tA[0]],tA[1],cObj[tA[1]]);
};
Upvotes: 1
Reputation: 50890
Use TextFinder class.
/**
* @customfunction
* @return count of given text in spreadsheet
* @param {string} text text to search
* @param {boolean} mec whether to match entire cell
* @param {boolean} mc whether to match case
*/
function COUNT_SS(text = 'NOT COMPLETE', mec = true, mc = true) {
return SpreadsheetApp.getActive()
.createTextFinder(text)
.matchEntireCell(mec)
.matchCase(mc)
.findAll()
.length;
}
=COUNT_SS()
Upvotes: 3