Forum Discussion
lauradelfosse
Aug 16, 2024Copper Contributor
Calculate based on number between text and search on text
Hello everyone, I have a question, I'm not sure if it is possible to do so, but I'll shoot my shot in asking. I added the excel-file. I already asked ChatGPT but, same as last time, the answe...
- Aug 20, 2024
Since I'm not very good with Belgian formulas, here is an example with VBA.
Code is not tested, please backup your file beforehand.
Sub CalculateInterventionsAndInstallations() Dim ws As Worksheet Dim rng As Range Dim cell As Range Dim startPos As Long Dim endPos As Long Dim interventionSum As Double Dim installationSum As Double Dim numWeeks As Long Dim tempValue As Double Dim textToSearch As String ' Set your worksheet and range here Set ws = ThisWorkbook.Sheets("Berekeningen") Set rng = ws.Range("B3:F64") ' Adjust this range as needed ' Initialize sums interventionSum = 0 installationSum = 0 numWeeks = 9 ' Set the number of weeks ' Loop through each cell in the range For Each cell In rng If Not IsEmpty(cell.Value) Then ' Search and sum for interventions ("AANWEZIG" and "INI") textToSearch = cell.Value startPos = InStr(1, textToSearch, "AANWEZIG", vbTextCompare) If startPos > 0 Then endPos = InStr(startPos, textToSearch, "INI", vbTextCompare) If endPos > startPos Then tempValue = Mid(textToSearch, startPos + 9, endPos - startPos - 9) If IsNumeric(tempValue) Then interventionSum = interventionSum + CDbl(tempValue) End If End If End If ' Search and sum for installations ("AANWEZIG" and "INS") startPos = InStr(1, textToSearch, "AANWEZIG", vbTextCompare) If startPos > 0 Then endPos = InStr(startPos, textToSearch, "INS", vbTextCompare) If endPos > startPos Then tempValue = Mid(textToSearch, startPos + 9, endPos - startPos - 9) If IsNumeric(tempValue) Then installationSum = installationSum + CDbl(tempValue) End If End If End If End If Next cell ' Output results to specific cells ws.Range("G2").Value = interventionSum ws.Range("G3").Value = interventionSum / numWeeks ws.Range("G4").Value = installationSum ws.Range("G5").Value = installationSum / numWeeks MsgBox "Calculations completed successfully!" End SubI hope this helps you with your project.
PeterBartholomew1
Aug 22, 2024Silver Contributor
Without getting involved too much with the Dutch/Flemish here are some 365 formulas that might be useful
= SUM(VALUE(TOCOL(REGEXEXTRACT(source, "\d+(?=\sINI)"),3)))
= SUM(VALUE(TOCOL(REGEXEXTRACT(source, "\d+(?=\sINS)"),3)))
= ROWS(TOCOL(REGEXEXTRACT(source, "[A-Z]"), 3))
= SUM(SIGN(ISTEXT(source)))where 'source' refers to the entire array of tables. The regular expressions are looking for any numbers followed by one space and the strings "INI" and "INS" respectively. If you use 365 the formulas should translate OK.