Extraheren van bestanden wordt een pad

Barry heeft een werkblad waarin een kolom bevat veel bestandspaden. Hij zou een manier uittreksel alleen de bestandsnaam (het gedeelte rechts van de uiteindelijke backslash) van elk pad. Hij vraagt ​​zich af of er een snelle manier om dit te doen zonder gebruik te maken Tekst naar kolommen voorzien.

Er zijn verschillende manieren, afhankelijk van of u een macro wilt gebruiken of niet.

Als uw bestandsnamen zijn allemaal dezelfde lengte, dan kunt u gewoon gebruik maken van de RECHTS functie te trekken uit de laatste karakters. (Deze formule gaat uit van het volledige pad en de bestandsnaam in cel A1.)

= RIGHT (A1,11)

Dit veronderstelt dat de bestandsnaam altijd 11 tekens, zoals "text001.txt". Als de bestandsnaam is een andere lengte in elk geval, dan is deze aanpak niet zal werken. In plaats daarvan, kunt u proberen deze formule:

= MID (A1, FIND (CHAR (1), plaatsvervanger (A1, "\", CHAR (1),
LEN (A1) -LENGTE (plaatsvervanger (A1, "\", "")))) + 1, LEN (A1))

Merk op dat de formule maakt gebruik van de vervangende functie tweemaal. In elk geval is het vervangt de backslashes (\) met iets anders. De eerste keer vervangt allemaal met een ASCII waarde 1 en de tweede het hen vervangen met niets (een lege string) zodat deze kan bepalen hoeveel backslashes waren in de oorspronkelijke pad. De MID-functie wordt gebruikt voor het vinden (met de hulp van FIND en de vervangende functies) de locatie van de laatste backslash in het pad en terug te keren alles na dat punt.

Een kortere formule kan worden gebruikt als u zeker weet dat de bestandsnaam zal nooit meer dan 99 tekens lang zijn:

= TRIM (RIGHT (plaatsvervanger (A2, "\", HERHALING ("", 100)), 99))

Deze formule vervangt alle backslashes met 100 plaatsen, grijpt de meest rechtse 99 personages uit de resulterende tekenreeks (dat zou de bestandsnaam met een bos van ruimten in de voorkant van het zijn) en dan trimt uit alle ruimten.

Als u een macro wilt kun je er een die achteruit stappen via het pad tot lokaliseert de laatste backslash te creëren gebruiken. Het geeft dan is alles na de backslash. Het volgende voorbeeld begint in cel B1, onderzoekt alle rechts van de cel (cel A1) en begint trekken bestandsnamen. Het stapt door alle cellen in kolom A en zet de bestandsnaam, eventueel in kolom B.

Sub GetFileName1 ()
Dim Scheidingsteken als Koord
Dim Target As String
Dim sFile als Koord
Dim J As Integer
Dim iDataLen As Integer

Delimiter = "\"
Range ("B1"). Selecteer
Doe Terwijl ActiveCell.Offset (0, -1) .Value <> ""
Target = ActiveCell.Offset (0, -1) .Value
iDataLen = Len (Target)
sFile = "Scheidingsteken Not Found"
Voor J = iDataLen Om 2 Step -1
Als Mid (Target, J, 1) = Scheidingsteken Dan
sFile = Rechts (Target, iDataLen - J)
Exit voor
End If
Volgende J
ActiveCell.Formula = sFile
ActiveCell.Offset (1, 0) .Selecteer
Lus
End Sub

Je kan ook gebruik maken van een veel kortere versie van een macro, mits u kunt de functie Split gebruiken. Deze functie werd geïntroduceerd in de versie van VBA voorzien van Excel 2000, en het zal een reeks van elkaar op basis van een begrenzer die u opgeeft en de spullen van de onderdelen in een array te trekken. Dit voorbeeld toont het geïmplementeerd als een door de gebruiker gedefinieerde functie oplossing.

Functioneren GetFileName2 (FILE_PATH) As String
Dim Parts

Delen = Split (FILE_PATH, Application.PathSeparator)
GetFileName2 = Parts (UBound (Parts))
End Function

In dit gebruik gebruikt de Split functie als scheidingsteken wat padscheidingsteken geschikt is voor het systeem waarop Excel wordt uitgevoerd. Het laatste element van de resulterende array (bepaald met UBound functie) bevat het gedeelte van het oorspronkelijke pad dat zich rechts van de laatste padscheider-de bestandsnaam. Om de functie te gebruiken, zet een formule als dit in een cel:

= GetFileName2 (A1)

ExcelTips is uw bron voor kosteneffectieve Microsoft Excel training. Deze tip (7333) is van toepassing op Microsoft Excel 97, 2000, 2002 en 2003. U kunt een versie van deze tip voor de ribbon-interface van Excel (Excel 2007 en later) vindt u hier: Het halen van bestanden wordt een pad.