download.bg
 Вход Списание  Новини  Програми  Статии  Форум  Чат   Абонамент  Топ95   Архив 

Извличане на число от буквено-цифров низ и след това сумиране с SUBTOTAL...

< 1 2 >

Автор
Съобщение
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 17:31
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, с нетърпение очаквам да видя шампиона.
Имам фаворит, но няма дя се издавам.
Успех и на двама ви.

< 1 2 >

Коментар

за нас | за разработчици | за реклама | станете автори | in english  © 1998-2024   Experta Ltd.