Новости:

Прикрепить к сообщению можно только файлы xls, gif, jpg, rar, zip,7z, bas, frm, cls, doc размером до 150 Кб.

Главное меню

Использование формулы

Автор Елена Васяленко, 03.12.2012, 08:14

« назад - далее »

Елена Васяленко

Здравствуйте подскажите пожалуйста! Есть вот такой макрос!
Sub SetCellFormula()
   
   Columns("H").FormulaR1C1 = "=ROUND(((RC[-3]+RAND()*5)/100),2)"
End Sub

данный макрос используется для добавления рандомного числа!
Так вот не могу никак додуматься как сделать так что бы эта формула работала только тогда когда ячейка из которой берется значения была не пустой! Если ячейка пустая или текстовая то формула не вставлялась!

kuklp

#1
"=IF(RC[-3]>0,ROUND(((RC[-3]+RAND()*5)/100),2),"""")"
Еще лучше вставлять сразу значения:
Sub SetCellFormula()
    Dim s$
    s = Intersect(ActiveSheet.UsedRange, [E:E]).Address
    Range(s).Offset(, 3).Value = Evaluate("IF(" & s & ">0,ROUND(((" & s & "+RAND()*5)/100),2),"""")")
End Sub


Я, как всегда, чертовски адекватен... Email: pilipnikop@yandex.ua WM Z206653985942, R334086032478, U238399322728, E332314026771

cheshiki1

#2
KuklP автор хочет
ЦитироватьЕсли ячейка пустая или текстовая то формула не вставлялась!
при вашем варианте формула будет вставляется, но не будет высчитывать.
Хотя пусть автор судит.
С моим знанием VBA вот что сотворил.  :)
Sub SetCellFormula()
Dim i&
For i = 1 To Cells(Rows.Count, 5).End(xlUp).Row
   If IsNumeric(Range("E" & i).Value) And Range("E" & i).Value <> "" Then
   Range("H" & i).FormulaR1C1 = "=ROUND(((RC[-3]+RAND()*5)/100),2)"
   End If
   Next
End Sub

макрос заполняет до последней заполненной строки в столбце Е

kuklp

#3
Можно и формулу и без цикла:
Sub SetCellFormula()
    Dim s$
    s = Intersect(ActiveSheet.UsedRange, [E:E]).Address
    Range(s).Offset(, 3).Value = _
    Evaluate("IF(ISNUMBER(" & s & "),""=ROUND(((RC[-3]+RAND()*5)/100),2)"","""")")
End Sub

Я, как всегда, чертовски адекватен... Email: pilipnikop@yandex.ua WM Z206653985942, R334086032478, U238399322728, E332314026771

Елена Васяленко

Цитата: cheshiki1 от 03.12.2012, 09:45
KuklP автор хочет
ЦитироватьЕсли ячейка пустая или текстовая то формула не вставлялась!
при вашем варианте формула будет вставляется, но не будет высчитывать.
Хотя пусть автор судит.
С моим знанием VBA вот что сотворил.  :)
Sub SetCellFormula()
Dim i&
For i = 1 To Cells(Rows.Count, 5).End(xlUp).Row
   If IsNumeric(Range("E" & i).Value) And Range("E" & i).Value <> "" Then
   Range("H" & i).FormulaR1C1 = "=ROUND(((RC[-3]+RAND()*5)/100),2)"
   End If
   Next
End Sub

макрос заполняет до последней заполненной строки в столбце Е

Спасибо огромное ваш вариант то что мне нужно!
Остальные не работают!

kuklp

Елена Васяленко, Вы бы выложили пример в соответствии с Правилами п.2, а я бы доказал Вам, что и остальные работают. На Вашем примере.
Я, как всегда, чертовски адекватен... Email: pilipnikop@yandex.ua WM Z206653985942, R334086032478, U238399322728, E332314026771

Елена Васяленко

Вот пример считать нужно в статах!

kuklp

Елена Васяленко, вот для этого всегда и нужен пример. Во-первых у Вас в ячейках не числа, а текст(см.скрин), во-вторых стиль ссылок на листах не родной для Экса. И расположение таблиц Вы не указали. Для Вашего случая:
Sub SetCellFormula1()
    Dim s$, r
    r = Application.ReferenceStyle
    Application.ReferenceStyle = xlA1
    Columns(5).TextToColumns
    s = [a17].CurrentRegion.Columns(5).Offset(1).Address(ReferenceStyle:=xlA1)
    Range(s).Offset(, 3).Formula = _
    Evaluate("IF(ISNUMBER(" & s & "),""=ROUND(((RC[-3]+RAND()*5)/100),2)"","""")")
    Application.ReferenceStyle = r
End Sub

Для небольших таблиц вполне достаточно будет макроса от cheshiki1, иначе лучше использовать мой.
Я, как всегда, чертовски адекватен... Email: pilipnikop@yandex.ua WM Z206653985942, R334086032478, U238399322728, E332314026771

Елена Васяленко

Спасибо огромное да я была не права! Все работает в последующем буду выкладывать с примерами! Но мне вполне подойдет макрос от cheshiki1

kuklp

#9
Для всех заинтересованных, коллег - дал ссылку на эту тему здесь:
http://www.planetaexcel.ru/forum.php?thread_id=31716&thread_id=31716&page_forum=lastpage&allnum_forum=471#post382568
Все же вопрос интересный ИМХО.
Я, как всегда, чертовски адекватен... Email: pilipnikop@yandex.ua WM Z206653985942, R334086032478, U238399322728, E332314026771

Елена Васяленко

KuklP Может еще подскажете по этой же теме!
После обработки данным макросом в ячейках появляются значения, а вот в строке формул отображается формула, но нужно значение! Сейчас я это делаю вручную при помощи специальная вставка-значение! Возможно ли это сделать при помощи нашего макроса если да то как???

kuklp

Sub SetCellFormula1()
    Dim s$, r
    r = Application.ReferenceStyle
    Application.ReferenceStyle = xlA1
    Columns(5).TextToColumns
    s = [a17].CurrentRegion.Columns(5).Offset(1).Address
    With Range(s).Offset(, 3)
        .Formula = Evaluate("IF(ISNUMBER(" & s & _
        "),""=ROUND(((RC[-3]+RAND()*5)/100),2)"","""")")
        .Value = .Value
    End With
    Application.ReferenceStyle = r
End Sub

Я, как всегда, чертовски адекватен... Email: pilipnikop@yandex.ua WM Z206653985942, R334086032478, U238399322728, E332314026771

Елена Васяленко