Здравствуйте! Слезно прошу ВАС помочь! В ВБА я слабак, а то и вовсе 0 :-(. Есть табличка по использованию кабеля. Есть форма для подсчетов. В форму мне надо как-то вывести результаты: 1) Использовано за период - сумма по столбцу "Всего" с условием дата "от" и "до". 2) Остаток на дату - остаток (ячейка "I2")-Сумма "всего" до даты "ДО". 3) Остаток на сегодня (тут ясно): остаток (ячейка "I2")-Сумма столбца "всего". Записи в таблицу, естественно, будут добавляться.
файлик с табл и формой цепляю
п.с. Еще прошу код с пояснениями, чтоб в будущем с подобной ерундой не морочить ЛЮДЯМ голову, а самому переделывать код под свои нужды. Ну и для самообучения, конечно.
Заранее очень благодарю!
Здравствуйте! Слезно прошу ВАС помочь! В ВБА я слабак, а то и вовсе 0 :-(. Есть табличка по использованию кабеля. Есть форма для подсчетов. В форму мне надо как-то вывести результаты: 1) Использовано за период - сумма по столбцу "Всего" с условием дата "от" и "до". 2) Остаток на дату - остаток (ячейка "I2")-Сумма "всего" до даты "ДО". 3) Остаток на сегодня (тут ясно): остаток (ячейка "I2")-Сумма столбца "всего". Записи в таблицу, естественно, будут добавляться.
файлик с табл и формой цепляю
п.с. Еще прошу код с пояснениями, чтоб в будущем с подобной ерундой не морочить ЛЮДЯМ голову, а самому переделывать код под свои нужды. Ну и для самообучения, конечно.
Private Sub CommandButton1_Click() With Me If Not IsDate(.TextBox1) Then Exit Sub 'если не дата в текстбокс1, то выход If Not IsDate(.TextBox2) Then Exit Sub r0_ = 3 'первая строка таблицы n_ = Cells(Rows.Count, 1).End(3).Row - r0_ + 1 'кол-во строк таблицы If n_ < 1 Then Exit Sub 'если таблица пуста, то выход ar = Cells(r0_, 1).Resize(n_, 8) 'массив из 8-и столбцов таблицы и n_ строк For i = 1 To n_ 'цикл по строкам If CDate(ar(i, 1)) < CDate(.TextBox2) Then 'если дата таблицы меньше даты "до" s2_ = s2_ + ar(i, 8) 'накопитель сумм 2 If CDate(ar(i, 1)) >= CDate(.TextBox1) Then 'если дата таблицы больше или равна даты "от" s1_ = s1_ + ar(i, 8) 'накопитель сумм 1 End If End If Next i .Ispolz.Caption = s1_ 'заполнение .OstatData.Caption = s2_ .OstSegodnya.Caption = Range("I2").Value End With End Sub
[/vba]
Так нужно? [vba]
Код
Private Sub CommandButton1_Click() With Me If Not IsDate(.TextBox1) Then Exit Sub 'если не дата в текстбокс1, то выход If Not IsDate(.TextBox2) Then Exit Sub r0_ = 3 'первая строка таблицы n_ = Cells(Rows.Count, 1).End(3).Row - r0_ + 1 'кол-во строк таблицы If n_ < 1 Then Exit Sub 'если таблица пуста, то выход ar = Cells(r0_, 1).Resize(n_, 8) 'массив из 8-и столбцов таблицы и n_ строк For i = 1 To n_ 'цикл по строкам If CDate(ar(i, 1)) < CDate(.TextBox2) Then 'если дата таблицы меньше даты "до" s2_ = s2_ + ar(i, 8) 'накопитель сумм 2 If CDate(ar(i, 1)) >= CDate(.TextBox1) Then 'если дата таблицы больше или равна даты "от" s1_ = s1_ + ar(i, 8) 'накопитель сумм 1 End If End If Next i .Ispolz.Caption = s1_ 'заполнение .OstatData.Caption = s2_ .OstSegodnya.Caption = Range("I2").Value End With End Sub
В принципе - ДА! Но есть две неточности (может я не так пояснил!
Остаток на дату должен считать так: ячейка I2 минус СУММА по столбцу Н "всего" до даты в поле ДО ----- или Остаток на дату=ячейке столбца ОСТАТОК напротив даты указанной в поле ДО (т.е. если ДО= 30.02.2018 то остаток на дату = I8 = 4459) ---- ЭТО Я ПОПРАВИЛ
Остаток на сегодня считается так: ячейка I2 минус СУММА по столбцу Н "всего" до последней заполненной строки ----- или Остаток на сегодня=последней ячейке в столбце I ----- а тут не пойму как заставить взять значение из последней заполненной ячейки в столбце ОСТАТОК
В принципе - ДА! Но есть две неточности (может я не так пояснил!
Остаток на дату должен считать так: ячейка I2 минус СУММА по столбцу Н "всего" до даты в поле ДО ----- или Остаток на дату=ячейке столбца ОСТАТОК напротив даты указанной в поле ДО (т.е. если ДО= 30.02.2018 то остаток на дату = I8 = 4459) ---- ЭТО Я ПОПРАВИЛ
Остаток на сегодня считается так: ячейка I2 минус СУММА по столбцу Н "всего" до последней заполненной строки ----- или Остаток на сегодня=последней ячейке в столбце I ----- а тут не пойму как заставить взять значение из последней заполненной ячейки в столбце ОСТАТОК
Private Sub CommandButton1_Click() With Me If Not IsDate(.TextBox1) Then Exit Sub 'если не дата в текстбокс1, то выход If Not IsDate(.TextBox2) Then Exit Sub r0_ = 3 'первая строка таблицы n_ = Cells(Rows.Count, 1).End(3).Row - r0_ + 1 'кол-во строк таблицы If n_ < 1 Then Exit Sub 'если таблица пуста, то выход ar = Cells(r0_, 1).Resize(n_, 8) 'массив из 8-и столбцов таблицы и n_ строк For i = 1 To n_ 'цикл по строкам If CDate(ar(i, 1)) < CDate(.TextBox2) Then 'если дата таблицы меньше даты "до" s2_ = s2_ + ar(i, 8) 'накопитель сумм 2 If CDate(ar(i, 1)) >= CDate(.TextBox1) Then 'если дата таблицы больше или равна даты "от" s1_ = s1_ + ar(i, 8) 'накопитель сумм 1 End If End If Next i .Ispolz.Caption = s1_ 'заполнение .OstatData.Caption = Range("I2").Value - s2_ .OstSegodnya.Caption = Range("I" & r0_ + n_ - 1).Value End With End Sub
Private Sub CommandButton1_Click() With Me If Not IsDate(.TextBox1) Then Exit Sub 'если не дата в текстбокс1, то выход If Not IsDate(.TextBox2) Then Exit Sub r0_ = 3 'первая строка таблицы n_ = Cells(Rows.Count, 1).End(3).Row - r0_ + 1 'кол-во строк таблицы If n_ < 1 Then Exit Sub 'если таблица пуста, то выход ar = Cells(r0_, 1).Resize(n_, 8) 'массив из 8-и столбцов таблицы и n_ строк For i = 1 To n_ 'цикл по строкам If CDate(ar(i, 1)) < CDate(.TextBox2) Then 'если дата таблицы меньше даты "до" s2_ = s2_ + ar(i, 8) 'накопитель сумм 2 If CDate(ar(i, 1)) >= CDate(.TextBox1) Then 'если дата таблицы больше или равна даты "от" s1_ = s1_ + ar(i, 8) 'накопитель сумм 1 End If End If Next i .Ispolz.Caption = s1_ 'заполнение .OstatData.Caption = Range("I2").Value - s2_ .OstSegodnya.Caption = Range("I" & r0_ + n_ - 1).Value End With End Sub
Ряяяботает!!! СПАСИБКИ!!! Оказывается так просто - Range("I" & r0_ + n_ - 1) ---это вычисление последней не пустой ячейки в столбце? Value - это ее значение? Я правильно понял?
Ряяяботает!!! СПАСИБКИ!!! Оказывается так просто - Range("I" & r0_ + n_ - 1) ---это вычисление последней не пустой ячейки в столбце? Value - это ее значение? Я правильно понял?
А после 99 строки что делать? Залазить менять формулы?
нет - это же пример. достаточно с запасом строки поставить (например 10 000) или добавить проверку последней строки - так код будет длиннее, но быстрее
А после 99 строки что делать? Залазить менять формулы?
нет - это же пример. достаточно с запасом строки поставить (например 10 000) или добавить проверку последней строки - так код будет длиннее, но быстрееSLAVICK