VBA формули
12 отговора
623 прегледа
VBA формули
Как може да се направи с vba, така че ако в клетка от даден ред има данни,
то в друга клетка от същия ред да има формула.
или по просто казано ако А1<>"" то В1=формула
то в друга клетка от същия ред да има формула.
или по просто казано ако А1<>"" то В1=формула
Re: VBA формули
If Range("A1").Value = "" Then Range("B1").Formula = "=C1+1" Else Range("B1").Formula = "=C1-1"
Re: VBA формули
Добре, но ако трябва да се направи за 1000 клетки или повече.
И къде по-точно да го поставя.
И къде по-точно да го поставя.
Re: VBA формули
ако трябва да се направи за 1000 клетки или повече - завърти го в цикъл
къде по-точно да го поставя - на съответното събитие. Напр в Workbook_SheetChange
Ако мислиш, че съм лаконичен - опиши по-подробно проблема си. Може пък и въобще да не ти трябва VB
къде по-точно да го поставя - на съответното събитие. Напр в Workbook_SheetChange
Ако мислиш, че съм лаконичен - опиши по-подробно проблема си. Може пък и въобще да не ти трябва VB
Редактирано от NDeu на
Re: VBA формули
Вариант и без да се използва VBA
=IF(ISBLANK(A1);"";A1+1)
В случая формулата е клетка А1+1
=IF(ISBLANK(A1);"";A1+1)
В случая формулата е клетка А1+1
Re: VBA формули
Проблема е много редове и много, много формули
Тук често се споменава, че по-добре формулите да са на vb, но
аз незнам как да го направя.
Тук често се споменава, че по-добре формулите да са на vb, но
аз незнам как да го направя.
Re: VBA формули
В отговор на:Тук често се споменава, че по-добре формулите да са на vb
Има се предвид изчисленията да се извършват от бейсик код, а не с бейсик кода да поставиш формула в определена клетка. Нали разбираш, че във втория случай (за който съм ти дал примера по-горе) изчисленията пак се извършват от Ексела чрез интерпретиране на формулите записани в клетките, независимо от това че тези формули са поставени в клетките от бейсик кода.
Редактирано от NDeu на
Re: VBA формули
А би ли ми обяснил принципно как се правви.
А функциите на Excel (countif, subotal, vlookup и др.), как се използват и
въобще могат ли да се използват за изчисления извършвани от бейсик код.
А функциите на Excel (countif, subotal, vlookup и др.), как се използват и
въобще могат ли да се използват за изчисления извършвани от бейсик код.
Re: VBA формули
Аз също подкрепям мнението на NDeu, че няма смисъл да си правиш код, който да задейства някаква формула.
Смея да твърдя, че в 90% и повече от случаите код въобще не ти е необходим (това обаче си е мое мнение).
по въпроса за използването на функциите, ето ти един много хубав линк
И накрая - Ексел е просто един инструмент, който служи за решаването на някакви проблеми. Затова когато задаваш въпрос, концентрирай се върху проблема, не върху инструмента. С други думи - искаш да направиш нещо - питай за възможни решения. Не питай как може да стане някакво си решение, което мислиш, че ще ти свърши работа.
Дудек маха, кляка, прави чудеса от храброст...
Смея да твърдя, че в 90% и повече от случаите код въобще не ти е необходим (това обаче си е мое мнение).
по въпроса за използването на функциите, ето ти един много хубав линк
И накрая - Ексел е просто един инструмент, който служи за решаването на някакви проблеми. Затова когато задаваш въпрос, концентрирай се върху проблема, не върху инструмента. С други думи - искаш да направиш нещо - питай за възможни решения. Не питай как може да стане някакво си решение, което мислиш, че ще ти свърши работа.
Дудек маха, кляка, прави чудеса от храброст...
Re: VBA формули
Ок, ще дам отново същите си идеи както в няколко теми надолу.
VBA кода е удобен, защото на практика го пишеш само на едно място, и лесно може да се поправя. Второ - когато на 10000 реда имаш една и съща формула - е по-добре да я напишеш като изчисление на VBA, отколкото да караш компа да ги смята отново и отново на всяка корекция в таблиците.
Отсяването - кога да ги смята отново - зависи от данните, които ще използва за сметките. Давам пример с две колони от които ще се вземат данни "А" и "В", и трета колона "С" в която ще се записва резултата:
Ако има нещо ясно - питай, ще отговаряме.
С този пример, формулата за умножение ще се задейства само, ако има промяна на данните в колона "А" и "В", и ще се изпълнява само по веднъж, независимо на колко реда има данни. Т.е. изпълнението и ще е за миг, вместо да опреснява всички редове на всяка корекция. В примера е даден и с "IF..." филтър за първия ред, ако в него има промяна - не се изпълнява нищо. Филтъра може да се пренастрои за определен диапазон редове или колони.
Щирлиц
VBA кода е удобен, защото на практика го пишеш само на едно място, и лесно може да се поправя. Второ - когато на 10000 реда имаш една и съща формула - е по-добре да я напишеш като изчисление на VBA, отколкото да караш компа да ги смята отново и отново на всяка корекция в таблиците.
Отсяването - кога да ги смята отново - зависи от данните, които ще използва за сметките. Давам пример с две колони от които ще се вземат данни "А" и "В", и трета колона "С" в която ще се записва резултата:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Row = 1 Then Exit Sub
Select Case Target.Column
Case 1, 2
Range("C" & Target.Row) = Range("A" & Target.Row) * Range("B" & Target.Row)
End Select
End Sub
Ако има нещо ясно - питай, ще отговаряме.
С този пример, формулата за умножение ще се задейства само, ако има промяна на данните в колона "А" и "В", и ще се изпълнява само по веднъж, независимо на колко реда има данни. Т.е. изпълнението и ще е за миг, вместо да опреснява всички редове на всяка корекция. В примера е даден и с "IF..." филтър за първия ред, ако в него има промяна - не се изпълнява нищо. Филтъра може да се пренастрои за определен диапазон редове или колони.
Щирлиц
Редактирано от Щиpлиц на
Re: VBA формули
Сигурно съм попадала на това твое мнение по въпроса за изчисления на vba, за това питах как се прави.
Разбрах как да му задам областта от редове, в които да не изпълнява кода
напр.: до ред 10 и след 20 ред.
If Target.Row < 10 Or Target.Row > 20 Then Exit Sub
Но ако трябва да се изпълни и условието
Ако колона B < > "" и колона С < > "" и колона F < > ""
Тогава колона K = B + C + F
Въпроса е как и къде да го впиша в тази картинка.
Разбрах как да му задам областта от редове, в които да не изпълнява кода
напр.: до ред 10 и след 20 ред.
If Target.Row < 10 Or Target.Row > 20 Then Exit Sub
Но ако трябва да се изпълни и условието
Ако колона B < > "" и колона С < > "" и колона F < > ""
Тогава колона K = B + C + F
Въпроса е как и къде да го впиша в тази картинка.
Re: VBA формули
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Row < 10 Or Target.Row > 20 Then Exit Sub
Select Case Target.Column
Case 2, 3, 6
If Range("B" & Target.Row) <> "" _
And Range("C" & Target.Row) <> "" _
And Range("F" & Target.Row) <> "" Then
Range("K" & Target.Row) = Range("B" & Target.Row) + _
Range("C" & Target.Row) + _
Range("F" & Target.Row)
Else
Range("K" & Target.Row) = ""
End If
End Select
End Sub
В този случай реда е: Case 2, 3, 6 - защото колони "B", "C" и "F" са съответно 2, 3 и 6. Реда след "Else" е за да трие съдържанието на клетка от колона "К", защото доколкото виждам - не би трябвало да има изчисление, ако някоя от колоните "B", "C" или "F" е празна. ;о)
Успех.
Щирлиц