Formel.
Om du VET att det alltid är det 3:e "-" som skall bytas ut kan du lägga på en byt.ut till
=BYT.UT(BYT.UT(BYT.UT(A12;"_";"-");"-";"_";1);"-";"";3)
Förklaringstexten till BYT.UT är lite förvirrande. "antal förekomster" skall nog vara "Förekomst NR". Dvs 3:ean betyder att den tredje förekomsten byts ut, inte de tre första
Annars får du räkna ut hur många gånger det förekommer
=LÄNGD(A12)-LÄNGD(BYT.UT(A12;"_";""))-1
och klämma in där 3:an står
=BYT.UT(BYT.UT(BYT.UT(A12;"_";"-");"-";"_";1);"-";"";LÄNGD(A12)-LÄNGD(BYT.UT(A12;"_";""))-1)
VBA har mönstermatchning/regular expression. Då går det att trixa hur man vill (om du ändå skall köra makro).
hhttps://software-solutions-online.com/vba-regex-guide/
https://regexr.com/3hmb6
Men då måste kryssa i att VBA skall använde RegExp osv
Du kan även använda VBAs egna sök/ersätt och utnyttja att det finns en inverteringsfunktion i VBA StrReverse
Sub tjo()
Dim mintext As String
Dim sistaStreck As Integer
mintext = Selection.Value
'byt ut alla "_" mot "-"
mintext = Replace(mintext, "_", "-")
'byt tillbasks det första "-" mot "_"
mintext = Replace(mintext, "-", "_", , Count:=1)
'Och byt tillbaks det sista "-" mot "" genom att vända på strängen och byta ut första förekomsten
mintext = Replace(StrReverse(mintext), "-", "", , Count:=1)
' och vänd tillbaks texten
mintext = StrReverse(mintext)
End Sub
eller utnyttja att VBA kan söka både framifrån och bakifrån
InStrRev function (Visual Basic for Applications) | Microsoft Docs
och göra något smart som jag inte kommer på...
För övrigt funkar inte notifiering hos mig. Jag fick bara notis om att du hade Messat.