Добрый день.
У меня такая проблема:
Есть формула "=ЕСЛИ((N2-B2)<0;0;ЕСЛИ((N2-B2)>1;(((N2-B2)*1440)-(ЦЕЛОЕ(N2-B2)*1440*6.5/24));(N2-B2)*1440)) ", которая должна рассчитывать значение при изменении соседней ячейки. Причем если строка изменится то соответственно должны измениться адреса ячеек (например в 3-ей строке должно быть N3-B3 ну и т.д.) Попробовал сделать макрос:
Код |
---|
Private Sub Worksheet_Change(ByVal Target As Range)
For Each cell In Target 'проходим по всем измененным ячейкам
If Not Intersect(cell, Range("C2:C10000")) Is Nothing Then 'если изменененная ячейка попадает в диапазон A2:A100
With cell.Offset(0, -2) 'вводим в соседнюю справа ячейку дату
.Formula = IIf(Intersect(cell, Range("C2:C10000")) < 0, 0, IIf(Intersect(cell, Range("C2:C10000")) > 1, "=((D2)*1440)-(INT(D2)*1440*6.5/24)", "=(D2)*1440"))
.Calculate
.Value = .Value
.EntireColumn.AutoFit 'выполняем автоподбор ширины для столбца B, чтобы дата умещалась в ячейке
End With
End If
Next cell
End Sub
|
Есть две проблемы:
1) В условии функции IIf не могу сделать разницу двух значений VBA начинает на меня "ругаться". А именно хочу записать в условии что-то в виде IIf(Intersect(cell, Range("C2:C10000")) - Intersect(cell, Range("D2:D10000")).....".
2) В формулах (там где "истина" или "ложь") не могу сделать так чтобы не было "жесткой" привязки к ячейке, т.е. чтобы работало автозаполнение.....
С уважением.