Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Вывод на форму итогов - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Вывод на форму итогов (Макросы/Sub)
Вывод на форму итогов
urlchik Дата: Четверг, 04.10.2018, 11:09 | Сообщение № 1
Группа: Пользователи
Ранг: Участник
Сообщений: 68
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Здравствуйте! Слезно прошу ВАС помочь! В ВБА я слабак, а то и вовсе 0 :-(. Есть табличка по использованию кабеля. Есть форма для подсчетов. В форму мне надо как-то вывести результаты: 1) Использовано за период - сумма по столбцу "Всего" с условием дата "от" и "до". 2) Остаток на дату - остаток (ячейка "I2")-Сумма "всего" до даты "ДО". 3) Остаток на сегодня (тут ясно): остаток (ячейка "I2")-Сумма столбца "всего".
Записи в таблицу, естественно, будут добавляться.

файлик с табл и формой цепляю

п.с. Еще прошу код с пояснениями, чтоб в будущем с подобной ерундой не морочить ЛЮДЯМ голову, а самому переделывать код под свои нужды. Ну и для самообучения, конечно.

Заранее очень благодарю!
К сообщению приложен файл: 6588862.xlsm (20.7 Kb)


Век живи - век учись!
 
Ответить
СообщениеЗдравствуйте! Слезно прошу ВАС помочь! В ВБА я слабак, а то и вовсе 0 :-(. Есть табличка по использованию кабеля. Есть форма для подсчетов. В форму мне надо как-то вывести результаты: 1) Использовано за период - сумма по столбцу "Всего" с условием дата "от" и "до". 2) Остаток на дату - остаток (ячейка "I2")-Сумма "всего" до даты "ДО". 3) Остаток на сегодня (тут ясно): остаток (ячейка "I2")-Сумма столбца "всего".
Записи в таблицу, естественно, будут добавляться.

файлик с табл и формой цепляю

п.с. Еще прошу код с пояснениями, чтоб в будущем с подобной ерундой не морочить ЛЮДЯМ голову, а самому переделывать код под свои нужды. Ну и для самообучения, конечно.

Заранее очень благодарю!

Автор - urlchik
Дата добавления - 04.10.2018 в 11:09
_Boroda_ Дата: Четверг, 04.10.2018, 11:58 | Сообщение № 2
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16674
Репутация: 6479 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Так нужно?
[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
[/vba]
К сообщению приложен файл: 6588862_1.xlsm (24.6 Kb)


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеТак нужно?
[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
[/vba]

Автор - _Boroda_
Дата добавления - 04.10.2018 в 11:58
urlchik Дата: Четверг, 04.10.2018, 13:22 | Сообщение № 3
Группа: Пользователи
Ранг: Участник
Сообщений: 68
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Так нужно?

В принципе - ДА! Но есть две неточности (может я не так пояснил!

Остаток на дату должен считать так: ячейка I2 минус СУММА по столбцу Н "всего" до даты в поле ДО ----- или Остаток на дату=ячейке столбца ОСТАТОК напротив даты указанной в поле ДО (т.е. если ДО= 30.02.2018 то остаток на дату = I8 = 4459) ---- ЭТО Я ПОПРАВИЛ

Остаток на сегодня считается так: ячейка I2 минус СУММА по столбцу Н "всего" до последней заполненной строки ----- или Остаток на сегодня=последней ячейке в столбце I
----- а тут не пойму как заставить взять значение из последней заполненной ячейки в столбце ОСТАТОК

А так - СПАСИБО!
плюсую!


Век живи - век учись!

Сообщение отредактировал urlchik - Четверг, 04.10.2018, 13:34
 
Ответить
Сообщение
Так нужно?

В принципе - ДА! Но есть две неточности (может я не так пояснил!

Остаток на дату должен считать так: ячейка I2 минус СУММА по столбцу Н "всего" до даты в поле ДО ----- или Остаток на дату=ячейке столбца ОСТАТОК напротив даты указанной в поле ДО (т.е. если ДО= 30.02.2018 то остаток на дату = I8 = 4459) ---- ЭТО Я ПОПРАВИЛ

Остаток на сегодня считается так: ячейка I2 минус СУММА по столбцу Н "всего" до последней заполненной строки ----- или Остаток на сегодня=последней ячейке в столбце I
----- а тут не пойму как заставить взять значение из последней заполненной ячейки в столбце ОСТАТОК

А так - СПАСИБО!
плюсую!

Автор - urlchik
Дата добавления - 04.10.2018 в 13:22
_Boroda_ Дата: Четверг, 04.10.2018, 14:10 | Сообщение № 4
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16674
Репутация: 6479 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Так?
[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 = Range("I2").Value - s2_
        .OstSegodnya.Caption = Range("I" & r0_ + n_ - 1).Value
    End With
End Sub
[/vba]

* А как же
самому переделывать код под свои нужды.
?
К сообщению приложен файл: 6588862_2.xlsm (25.1 Kb)


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеТак?
[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 = Range("I2").Value - s2_
        .OstSegodnya.Caption = Range("I" & r0_ + n_ - 1).Value
    End With
End Sub
[/vba]

* А как же
самому переделывать код под свои нужды.
?

Автор - _Boroda_
Дата добавления - 04.10.2018 в 14:10
urlchik Дата: Четверг, 04.10.2018, 14:20 | Сообщение № 5
Группа: Пользователи
Ранг: Участник
Сообщений: 68
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Range("I" & r0_ + n_ - 1).Value

Ряяяботает!!! СПАСИБКИ!!!
Оказывается так просто - Range("I" & r0_ + n_ - 1) ---это вычисление последней не пустой ячейки в столбце? Value - это ее значение? Я правильно понял?

Еще раз спасибки!


Век живи - век учись!
 
Ответить
Сообщение
Range("I" & r0_ + n_ - 1).Value

Ряяяботает!!! СПАСИБКИ!!!
Оказывается так просто - Range("I" & r0_ + n_ - 1) ---это вычисление последней не пустой ячейки в столбце? Value - это ее значение? Я правильно понял?

Еще раз спасибки!

Автор - urlchik
Дата добавления - 04.10.2018 в 14:20
SLAVICK Дата: Четверг, 04.10.2018, 14:21 | Сообщение № 6
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
а я по другому сделал - по аналогии с обычными формулами:
[vba]
Код
Private Sub CommandButton1_Click()
    Me.Ispolz = Application.Evaluate("=SUMPRODUCT($H$3:$H$99*($A$3:$A$99>=--""" & Format(Me.TextBox1, "YYYY-MM-DD") & """)*($A$3:$A$99<--""" & Format(Me.TextBox2, "YYYY-MM-DD") & """))")
    Me.OstatData = Application.Evaluate("=I2-SUMPRODUCT($H$3:$H$99*($A$3:$A$99<--""" & Format(Me.TextBox2, "YYYY-MM-DD") & """))")
    Me.OstSegodnya = Application.Evaluate("I2-SUM(H3:H99)")
End Sub
[/vba]
К сообщению приложен файл: 6108757.xlsm (26.2 Kb)


Иногда все проще чем кажется с первого взгляда.
 
Ответить
Сообщениеа я по другому сделал - по аналогии с обычными формулами:
[vba]
Код
Private Sub CommandButton1_Click()
    Me.Ispolz = Application.Evaluate("=SUMPRODUCT($H$3:$H$99*($A$3:$A$99>=--""" & Format(Me.TextBox1, "YYYY-MM-DD") & """)*($A$3:$A$99<--""" & Format(Me.TextBox2, "YYYY-MM-DD") & """))")
    Me.OstatData = Application.Evaluate("=I2-SUMPRODUCT($H$3:$H$99*($A$3:$A$99<--""" & Format(Me.TextBox2, "YYYY-MM-DD") & """))")
    Me.OstSegodnya = Application.Evaluate("I2-SUM(H3:H99)")
End Sub
[/vba]

Автор - SLAVICK
Дата добавления - 04.10.2018 в 14:21
urlchik Дата: Четверг, 04.10.2018, 14:47 | Сообщение № 7
Группа: Пользователи
Ранг: Участник
Сообщений: 68
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
а я по другому сделал - по аналогии с обычными формулами:

А после 99 строки что делать? Залазить менять формулы?


Век живи - век учись!
 
Ответить
Сообщение
а я по другому сделал - по аналогии с обычными формулами:

А после 99 строки что делать? Залазить менять формулы?

Автор - urlchik
Дата добавления - 04.10.2018 в 14:47
SLAVICK Дата: Четверг, 04.10.2018, 20:06 | Сообщение № 8
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
А после 99 строки что делать? Залазить менять формулы?

нет - это же пример.
достаточно с запасом строки поставить (например 10 000)
или добавить проверку последней строки - так код будет длиннее, но быстрее


Иногда все проще чем кажется с первого взгляда.
 
Ответить
Сообщение
А после 99 строки что делать? Залазить менять формулы?

нет - это же пример.
достаточно с запасом строки поставить (например 10 000)
или добавить проверку последней строки - так код будет длиннее, но быстрее

Автор - SLAVICK
Дата добавления - 04.10.2018 в 20:06
urlchik Дата: Пятница, 05.10.2018, 11:42 | Сообщение № 9
Группа: Пользователи
Ранг: Участник
Сообщений: 68
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
так код будет длиннее, но быстрее

Спасибо!
Возьму на заметку!

Но код от Вoroda работает и красивее, на мой взгляд!

Все равно - СПАСИБО!


Век живи - век учись!
 
Ответить
Сообщение
так код будет длиннее, но быстрее

Спасибо!
Возьму на заметку!

Но код от Вoroda работает и красивее, на мой взгляд!

Все равно - СПАСИБО!

Автор - urlchik
Дата добавления - 05.10.2018 в 11:42
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Вывод на форму итогов (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!