Udpakning et mønster indefra tekst

Tom har et regneark, der indeholder omkring 20.000 celler fuld af tekstdata. Inden for disse celler at han er nødt til at udtrække et specifikt mønster af tekst. Mønsteret er ## - ##### hvor hver # er et ciffer. Dette mønster vises ikke på et sæt sted i hver celle. Tom spørger, om der er en måde at udtrække de ønskede oplysninger.

Der er flere måder, du kan nærme sig dette problem, og den rigtige løsning til dine behov vil afhænge af egenskaberne ved de data, som du arbejder. Hvis du ved, at det eneste sted i dine data, som du vil have en streg er inden dit mønster, så kan du indtaste off af tilstedeværelsen af ​​instrumentbrættet ved hjælp af en formel som følgende:

= MID (A1, FIND ("-", A1) -2,8)

Dette finder bindestreg og derefter griber de otte tegn, der begynder to tegn til venstre for instrumentbrættet. Dette vil naturligvis ikke, hvis der er streger i andre steder i teksten, eller om det er muligt at have "mønstre", der omfatter ikke-cifre (såsom 12-34B32) og du vil dem udelukket. I så fald du har brug for en langt mere kompleks formel:

= IF (ER.FEJL (INT (MID (A1, FIND ("-", A1, 1) -2, 2)) & INT (MID (
A1, FIND ("-", A1, 1) +1, 5))), "", MID (A1, FIND ("-", A1) -2, 8))

Dette omfatter en fejlkontrol komponent, finder ud af, om de tegn lige inden stregen og lige efter instrumentbrættet indeholder andet end cifre. Hvis de gør, så intet returneres.

Den ene ting, at disse stereotyp tilgange ikke gør er at håndtere de situationer, hvor der kan være mere end én forekomst af mønster i den samme celle. I så fald en makro er den bedste fremgangsmåde. Følgende vil udtrække de gyldige mønstre og placere dem i et nyt regneark kaldet "Results".

Sub ExtractPattern ()
Ved fejl Resume Next
Set SourceSheet = ActiveSheet
Set TargetSheet = ActiveWorkbook.Sheets ("Results")
Hvis Err = 0 Derefter
Regneark ("resultater"). Slet
End hvis
Worksheets.Add
ActiveSheet.Name = "Results"
Set TargetSheet = ActiveSheet
Celler (1, 1) .Value = "Fandt koder"
Celler (1, 1) .Font.Bold = True
iTargetRow = 2

SourceSheet.Select
Selection.SpecialCells (xlCellTypeLastCell) .Select
Vælg Range (udvælgelse, Cells (1)).

For hvert ci Selection.Cells
Hvis c.Value Ligesom "* ## - ##### *" Så
sRAW = c.Value
iPos = InStr (sRAW, "-")
Gør Mens iPos> 0
Hvis iPos <3 Så
sRAW = "" & sRAW
børsintroduktioner = iPos + 2
End hvis
Stemp = Mid (sRAW, iPos - 2, 8)
sRAW = Mid (sRAW, iPos + 6, Len (sRAW))
Hvis Stemp Ligesom "## - #####" Så
TargetSheet.Cells (iTargetRow, 1) = Stemp
iTargetRow = iTargetRow + 1
Andet
sRAW = Mid (Stemp, 4, 5) & sRAW
End hvis
iPos = InStr (sRAW, "-")
Loop
End hvis
Næste c
End Sub

Bemærk, at makroen bruger Ligesom funktion i to steder. Den første instans bestemmer, om mønsteret forekommer overalt i cellen, og det andet eksempel anvendes til at bestemme, om de ekstraherede tegn nøjagtigt til den ønskede mønster.

ExcelTips er din kilde til omkostningseffektiv Microsoft Excel træning. Dette tip (7348) gælder for Microsoft Excel 97, 2000, 2002, og 2003. Du kan finde en version af dette tip til båndet grænseflade Excel (Excel 2007 og nyere) her: Udpakning et mønster indefra tekst.


© 2020 Zajacperrone.com | Contact us: webmaster# zajacperrone.com