Извличане на число от буквено-цифров низ и след това сумиране с SUBTOTAL...
Автор |
|
power_mСъб, 05.03.11, 18:36 |
Здравейте ! Някой сблъсквал ли се е с този проблем ... В колона А1 до А365 съм поставил цифри, и чрез SUBTOTAL примерно : 34 65 42 =SUBTOTAL(9;А1:А365) до тук няма проблем ... ! Но когато в клетките има само буквено-цифрови низове... не се получава... Примерно ; 2бр./ 35лв. 1бр./42лв. и тн... Опитах всякакви варианти с MID ISNUMBER .... но не стана.. .
редактиран от power_m на 05.03.11 18:37 | | phrozencrewСъб, 05.03.11, 20:00 |
Използвай RegEx-и! Ще съкратиш кода с километри | | phrozencrewСъб, 05.03.11, 20:42 |
Ето тук има примери за доста варианти със стрингове: http://www.vbaexpress.com/kb/getarticle.php?kb_id=68Определено могат да се научат доста интересни и полезни неща! Регулярните изрази, освен, че съкращават много главоблъсканици и излишен код, ускоряват доста и самото изпълнение на кода. Ако използваш RegEx-и в Excel ще е добре да включиш и необходимата библиотека от VBS:
| | power_mСъб, 05.03.11, 22:15 | RE: Извличане на число от буквено-цифров низ и след това сумиране с SUBTOTAL...
” Обърни внимание на задачката. В една клетка няма само едно число и някакъв повтарящ се стринг, а има две числа и два стринга. За това исках да видя примерче, за да се убедя, че наистина писането ще се съкрати много. „ БЛАГОДАРЯ ТИ АНТОНЕ ! | | phrozencrewНед, 06.03.11, 12:46 | RE: Извличане на число от буквено-цифров низ и след това сумиране с SUBTOTAL...
” Обърни внимание на задачката. В една клетка няма само едно число и някакъв повтарящ се стринг, а има две числа и два стринга. За това исках да видя примерче, за да се убедя, че наистина писането ще се съкрати много. „
Предполагам, че не си се занимавал с VBA програмиране и за това не си обърнал внимателно внимание на примерите, които ти дадох. Препоръчвам ти повечко да се задълбочиш, защото това програмиране е доста мощно и можеш да научиш наистина много интересни неща за обработването на стринговете. Важно е да се отбележи, че почти няма значение какъв е текста между символите, дали има шпации или няма и т.н. Регулярните изрази ти позволяват да направиш една формула, която да обхваща доста варианти и така се грижиш за грешките и на въвеждащият данните. Ето простичък код за използване на RegEx- и в VBA на Excel: Sub ExtractCell()
Dim cl As Range
Dim RegEx As RegExp
Const sPatt As String = "^([0-9]+\.?[0-9]*).*/([0-9]+).*$"
Set RegEx = New RegExp
With RegEx
.Pattern = sPatt
.Global = False
.MultiLine = False
.IgnoreCase = False
End With
For Each cl In Range("A4", Range("A65536").End(xlUp))
If RegEx.Test(cl) Then
cl.Offset(0, 1) = RegEx.Replace(cl.Value, "$1")
cl.Offset(0, 2) = RegEx.Replace(cl.Value, "$2")
End If
Next cl
End Sub |
Да приложим и реален пример. Ще използвам по-горните данни, като леко ще ги променя, за да направя задачката по-сложна: RegEx.xls Изхода от изпълнението на кода, както и изхода от формулите на dreven могат да се видят на картинката по-долу:
Често могат да се обработят подобни данни още преди да се подадат на Excel. Един простичък VBScript би могъл да обработи огромни текстови или лог-файлове с данни и да подреди информацията в csv-файл, готов за отваряне в Excel. Разбира се Регулярните изрази не са лъжица за начинаещият програмист. Те изискват търпение при изучаването и много тренировки. Макар, че теорията за тях може да се събере на една страница . | | phrozencrewНед, 06.03.11, 17:30 |
Понякога ти е много трудно да разбереш очевадни истини! Предполагам не се дължи на нежеленаие да начиш нещо, а по-скоро на възрастта. Ако потребителят въведе: " _ 12.5 бр./25лв." С регулярните изрази можеш да направиш шаблон за който няма никакво значение дали горния израз е: 12.5бр./25лв. 12,5бр /25лв. ___ 12.5 бр/25лв. (долната черта символизира шпация) и т.н. Точката или запетайката въобще не са проблем за регулярните изрази. Сега схвана ли? | | phrozencrewНед, 06.03.11, 18:57 | RE: RE: Извличане на число от буквено-цифров низ и след това сумиране с SUBTOTAL...
” .. Ние древните не се занимаваме със сложни неща, защото вярваме, че съвършенството трябва да се търси в простотата. Но въпреки това ще се радваме, ако младите, които работят с модерни понятия ни покажат, че модерното е по-добро от доказалото се старо. „
Явно наистина се затрудняваш. Бих се зарадвал, ако сам се беше пробвал, вместо да чакаш наготово. Но айде: Sub RegExCell()
Dim RegEx As RegExp
Const sPatt As String = ","
Set RegEx = New RegExp
With RegEx
.Pattern = sPatt
.Global = True
End With
For Each cl In Range("A4", Range("A65536").End(xlUp))
cl.Offset(0, 1) = RegEx.Replace(cl.Value, ".")
Next cl
End Sub |
ПС: Престани с тия глупости "Ние древните не се занимаваме със сложни неща...", щото почвам да се притеснявам, че си говоря с чики-рики.. | | phrozencrewНед, 06.03.11, 21:37 | RE: RE: RE: RE: Извличане на число от буквено-цифров низ и след това сумиране с SUBTOTAL...
” Какво направи бе приятелю, това не работи нито с точка, нито със запетайка. Дай файлчето където си го пробвал, че така с този неработещ сорс ще ни благославят потребителите, които четат форума. „
Primer_RegEx.xls | | phrozencrewНед, 06.03.11, 22:48 | RE: RE: Извличане на число от буквено-цифров низ и след това сумиране с SUBTOTAL...
” Хайде не се оправдавай с младоста си, а направи примера с регулярните изрази работещ независимо от настройките на Excel за точка и запетайка. „
Абе ти ебаваш ли се?!!! "Ту му млякото горещо, ту пък друго нещо..." | | kookkiНед, 06.03.11, 22:59 |
Много як спор. На мен не ми е полезен, понеже интересите ми не са към този език, но се забавлявам изключително много. А и сега, след като изгледах "Гладиатор" по NOVA, с нетърпение очаквам да видя шампиона. Имам фаворит, но няма дя се издавам. Успех и на двама ви. | | Коментар |