• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Lijst van Filenamen met meerdere punten scheiden

Status
Niet open voor verdere reacties.

swanwil

Gebruiker
Lid geworden
30 aug 2010
Berichten
165
Besturingssysteem
Windows 11
Office versie
Office 365 NL
Hallo,

Ik heb een lijst met filenamen welke ik wil scheiden tussen naam en extensie. Echter zitten in sommige filenamen meerdere punten.
bijv. "filenaam.met.meerdere.punten.txt"
Vraag is nu hoe ik een kolom kan maken met naam en een kolom met extensie.
Er moet dus gezocht worden op de laatste . in de filenaam en die bepaald wat in de kolom naam en wat in de kolom extensie moet komen

Bijgevoegd en voorbeeld zoals het moet worden

alvast bedankt,

Bekijk bijlage meerdere punten in filenaam.xlsxswanwil
 
Ikzelf gebruik daar mijn regular expression functie voor, maar voor dit ene specifieke probleem kun je ook wel een alternatieve macro schrijven.

met regexp functies:

=RegExpGet(H14;"(.+)\.(.+)";1) <-- voor het linker deel
=RegExpGet(H14;"(.+)\.(.+)";2) <-- voor het rechter deel

De regexpfunctie (in een lege vba module plaatsen en de nieuwe functie is bruikbaar vanuit het worksheet):

Code:
Function RegExpGet(ReplaceIn, ReplaceWhat As String, MatchNR As Integer)
    Dim RE As Object
    Dim MC As Object
    Dim M As Object

    Set RE = CreateObject("vbscript.regexp")
    RE.Pattern = ReplaceWhat
    RE.Global = True
    Set MC = RE.Execute(ReplaceIn)
    Set M = MC(0)
    If MatchNR > M.submatches.Count Then
        RegExpGet = ""
    Else
        RegExpGet = M.submatches(MatchNR - 1)
    End If
End Function
 
Beste wampier,

Bedankt voor de reactie, maar is zoiets niet mogelijk in een formule ?
Ik wil het ook graag uit kunnen leggen aan collega's ...(en daarvoor moet ik het zelf eerst begrijpen)

Ik zoek, denk ik, naar een formule die de positie van de laatste "." kan bepalen.
Daarna kan ik met de functie "Links" en "Rechts" de zaken wel scheiden

groet, swanwil
 
Die bestaat niet echt, tenzij je weet dat de extensie altijd 3 letters is, maar dan wordt het scheiden ook triviaal. Je kunt wel een macro schrijven die dat nummer terug geeft, maar dan moet je alsnog een macro of eigen functie toevoegen.

Je kunt mijn macro ook eenvoudig omschrijven naar =linkerdeel en =rechterdeel. Het ziet er dan heel vriendelijk uit in excel, maar onder water heb je dan nog steeds een macro.

Ik bedenk me terwijl ik dit schrijf dat het mogelijk met een matrixformule kan, maar ik moet eerlijk bekennen dat ik zelf daar nooit zoveel moeite in wil stoppen.
 
Met een heel eenvoudige UDF functie (niet van me zelf maar wel uit mijn archief) is het een fluitje van een cent.
 

Bijlagen

Code:
=RECHTS($A1;LENGTE($A1)-MAX(ALS(DEEL($A1;RIJ($1:$100);1)=".";RIJ($1:$100))))
Met bovenstaande matrix-formule zet je het gedeelte rechts van de laatste punt in de tekst van cel A1 in de cel van de formule.
Matrix-formule, dus invoeren met CTRL+SHIFT+ENTER.
 
Met 'normale' excel formules

Linker deel =DEEL(A1;1;VIND.ALLES(TEKEN(1);SUBSTITUEREN(A1;".";TEKEN(1);LENGTE(A1)-LENGTE(SUBSTITUEREN(A1;".";""))))-1)
Rechter deel =DEEL(A1;VIND.ALLES(TEKEN(1);SUBSTITUEREN(A1;".";TEKEN(1);LENGTE(A1)-LENGTE(SUBSTITUEREN(A1;".";""))))+1;100)

De laatste 100 bij rechterdeel gaat er vanuit dat de extentie nooit meer dan 100 karakters lang, mocht dat wel het geval zijn krijg je 'alleen' de eerste 100 tekens.

Aanvulling: Je krijgt een fout melding als er helemaal geen . in de cel (filenaam) waarde voorkomt, kan ook op gelost worden, maar lijkt me niet nodig in dit geval.
 
Laatst bewerkt:
Hallo,

Allemaal bedankt voor de inbreng.
Ik ben zelf niet zo bekend met UDF of Matrix-formule, daarom gebruik ik de oplossing van Withaar.
Voor het rechterdeel gebruik ik dan een andere formule =RECHTS(A1;LENGTE(A1)-LENGTE(B1)-1)

Ik zal de vraag als opgelost markeren!

groeten, swanwil
 
In VBA zijn daarvoor gewoon 2 funkties

Code:
sub snb()
  c01=createobject("scripting.filesystemobject").getbasename("G:\OF\voorbeeld.xlsm")
  c02=createobject("scripting.filesystemobject").getextensionname("G:\OF\voorbeeld.xlsm")
end sub

resultaat c01: voorbeeld
resultaat c02: xlsm

als UDF

Code:
function snb_basis(c01 as string)
  snb_basis=createobject("scripting.filesystemobject").getbasename(c01)
end function

Code:
function snb_extensie(c01 as string)
  snb_extensie=createobject("scripting.filesystemobject").getextensionname(c01)
end function

NB. Vind niet uit wat al is ingebakken.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan