![]() |
|
#1
|
|||
|
|||
![]() Quote:
batman1, I suppose the skills that someone is familiar with has bearing on what is simple or not. A simple find pattern? No, and one may not exists. However, with VBA your task is easy enough: Code:
Sub ScratchMacro() 'A basic Word Macro coded by Gregory K. Maxey Dim oRng As Range Set oRng = ActiveDocument.Range With oRng.Find .Text = "[0-9]{1,}" .MatchWildcards = True While .Execute Select Case Len(oRng.Text) Case 4 If InStr(oRng.Text, "2") > 0 Then Debug.Print oRng.Text Case 5 If InStr(Left(oRng.Text, 4), "2") > 0 Then Debug.Print oRng.Text End Select Wend End With lbl_Exit: Exit Sub End Sub 12345 – Match 56789 – No Match 123 – No Match 1234 – Match 4321 – Match 8945 – No Match 98765 – No Match 124567 – No match 54312 – No match |
#2
|
|||
|
|||
![]() Quote:
1. There is nothing that says that a number that has 4 or 5 digits has to be a word. So it can be part of a word. Besides, your code will find 3452 in the string "a3452b" (and correctly), so it should find 12456 (1245 also meets the criteria, but we want the longest result possible) in the string "124567". 2. Every case, well almost every case, can be solved in VBA. The only thing is that the solution is relatively short. In the current code, after .Execute you have to use Select. Besides, if data = "13452234567" the code will not find 34522 |
#3
|
|||
|
|||
![]()
Or another presentation of Greg's idea:
Code:
Sub ScratchMacro() 'Coded by Gregory K. Maxey 'https://www.msofficeforums.com/184580-post31.html Dim oRng As range Set oRng = ActiveDocument.range With oRng.Find .text = "<[0-9]{4,5}>" .MatchWildcards = True While .Execute If InStr(oRng.text, "2") > 0 Then MsgBox oRng.text Wend End With lbl_Exit: Exit Sub End Sub Greg and Batman1, thank you for another good lesson! |
#4
|
|||
|
|||
![]() Quote:
If the data is: a3452b 13452 then the code with .text = "[0-9]{4,5}" will find both 3452 and 13452. Meanwhile, the result 13452 is not good because 2 appears in the fifth place and not in 1-4 |
#5
|
|||
|
|||
![]()
In the code
Code:
<[0-9]{4,5}> Code:
Sub ScratchMacro() 'Coded by Gregory K. Maxey 'https://www.msofficeforums.com/184580-post31.html Dim oRng As range Set oRng = ActiveDocument.range With oRng.Find .text = "<[0-9]{4,5}>" .MatchWildcards = True While .Execute If InStr(left(oRng.text, 4), "2") > 0 Then MsgBox oRng.text Wend End With lbl_Exit: Exit Sub End Sub |
#6
|
|||
|
|||
![]() Quote:
I have already explained that the task does not require the number to be a word - it can be part of a word. With data: 13452234567 a3452b 67892 123456 23556789 3456789 a234667 13452234567 a3452b 1342 222 podany kod znajdzie tylko 1342 . Tymczasem wyniki = 34522 3452 7892 12345 23556 23466 34522 3452 1342 |
#7
|
|||
|
|||
![]()
That's clear as mud. In 13452234567 should the code find 34522 and in 123456 12345 ? Then what is the rule/principle of the search? If "Find in the sequence all numbers consisting of 4 or 5 digits, whose first 4 digits have at least 1 digit 2", then 13452234567 contains 3452, 2345, 23456, correct? Ok, never mind! I'm getting too obsessed with the topic and stressing you with my questions.
![]() |
![]() |
|
![]() |
||||
Thread | Thread Starter | Forum | Replies | Last Post |
![]() |
alex100 | Word VBA | 1 | 01-02-2021 02:39 PM |
![]() |
totoMSOF | Word VBA | 19 | 03-11-2019 01:28 PM |
![]() |
abdan | Word VBA | 3 | 01-18-2019 09:38 PM |
Macro help regex | subspace3 | Word VBA | 1 | 10-15-2014 09:53 AM |
Regex in Word: Replaced strings are in disorder | chgeiselmann | Word | 0 | 04-26-2009 11:33 AM |