VBA формули

12 отговора 623 прегледа
#1

VBA формули

Как може да се направи с vba, така че ако в клетка от даден ред има данни,
то в друга клетка от същия ред да има формула.
или по просто казано ако А1<>"" то В1=формула

Отговор
в отговор на cveti_m #2

Re: VBA формули

If Range("A1").Value = "" Then Range("B1").Formula = "=C1+1" Else Range("B1").Formula = "=C1-1"

Отговор
в отговор на NDeu #3

Re: VBA формули

Добре, но ако трябва да се направи за 1000 клетки или повече.
И къде по-точно да го поставя.

Отговор
в отговор на cveti_m #4

Re: VBA формули

ако трябва да се направи за 1000 клетки или повече - завърти го в цикъл
къде по-точно да го поставя - на съответното събитие. Напр в Workbook_SheetChange

Ако мислиш, че съм лаконичен - опиши по-подробно проблема си. Може пък и въобще да не ти трябва VB

Редактирано от NDeu на

Отговор
в отговор на cveti_m #5

Re: VBA формули

Вариант и без да се използва VBA

=IF(ISBLANK(A1);"";A1+1)

В случая формулата е клетка А1+1

Отговор
в отговор на NDeu #6

Re: VBA формули

Проблема е много редове и много, много формули

Тук често се споменава, че по-добре формулите да са на vb, но
аз незнам как да го направя.

Отговор
в отговор на cveti_m #7

Re: VBA формули

В отговор на:

Тук често се споменава, че по-добре формулите да са на vb



Има се предвид изчисленията да се извършват от бейсик код, а не с бейсик кода да поставиш формула в определена клетка. Нали разбираш, че във втория случай (за който съм ти дал примера по-горе) изчисленията пак се извършват от Ексела чрез интерпретиране на формулите записани в клетките, независимо от това че тези формули са поставени в клетките от бейсик кода.

Редактирано от NDeu на

Отговор
в отговор на NDeu #8

Re: VBA формули

А би ли ми обяснил принципно как се правви.

А функциите на Excel (countif, subotal, vlookup и др.), как се използват и
въобще могат ли да се използват за изчисления извършвани от бейсик код.

Отговор
в отговор на cveti_m #9

Re: VBA формули

Аз също подкрепям мнението на NDeu, че няма смисъл да си правиш код, който да задейства някаква формула.
Смея да твърдя, че в 90% и повече от случаите код въобще не ти е необходим (това обаче си е мое мнение).
по въпроса за използването на функциите, ето ти един много хубав линк

И накрая - Ексел е просто един инструмент, който служи за решаването на някакви проблеми. Затова когато задаваш въпрос, концентрирай се върху проблема, не върху инструмента. С други думи - искаш да направиш нещо - питай за възможни решения. Не питай как може да стане някакво си решение, което мислиш, че ще ти свърши работа.

Дудек маха, кляка, прави чудеса от храброст...
Отговор
в отговор на cveti_m #10

Re: VBA формули

Ок, ще дам отново същите си идеи както в няколко теми надолу.

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лиц на

Отговор
в отговор на Щиpлиц #11

Re: VBA формули

Сигурно съм попадала на това твое мнение по въпроса за изчисления на vba, за това питах как се прави.

Разбрах как да му задам областта от редове, в които да не изпълнява кода
напр.: до ред 10 и след 20 ред.

If Target.Row < 10 Or Target.Row > 20 Then Exit Sub

Но ако трябва да се изпълни и условието
Ако колона B < > "" и колона С < > "" и колона F < > ""
Тогава колона K = B + C + F

Въпроса е как и къде да го впиша в тази картинка.

Отговор
в отговор на cveti_m #12

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" е празна. ;о)

Успех.


Щирлиц
Отговор
в отговор на Щиpлиц #13

Re: VBA формули

Благодаря ти за вниминанието и подробните обяснения.


Отговор