Excel это не сложно
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
29.03.2024, 05:01:03

Войти
Добавляйтесь в нашу группу ВКонтакте - будьте в курсе всех новых событий сайта, узнавайте первым обо всех акциях и новых статьях!
33 233 Сообщений в 5 454 Тем от 6 750 Пользователей
Последний пользователь: Alex1210
*
Перейти на сайт Хитрости Надстройка MulTEx Обучающие тренинги Наша группа ВКонтакте
Правила форума Начало Помощь Поиск Календарь Войти Регистрация Выйти
+  Excel это не сложно
|-+  Основные форумы
| |-+  Вопросы по Excel и VBA
| | |-+  Вычисления при переходе по строкам.
Страниц: [1]   Вниз
Печать
Автор Тема: Вычисления при переходе по строкам.  (Прочитано 2571 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Masha
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 3


Просмотр профиля
« : 04.06.2023, 13:29:22 »

Всем привет. Я в VBA даже не первоклассница а детский сад. Прошу лояльно отнестись к моим вопросам. Есть у меня таблица, в ней несколько строк, в каждой строке какие-то вычисления. Ниже этой таблицы выводится результат вычислений этой строки формулами массива. Для вычислений из первой строки у меня всё получилось ( одиночный клик по В3 и начиная с 14-ой строки расчёт). Хотелось бы сделать так, чтобы при переходе на следующие строки, там же под таблицей, выводился результат вычислений, выбранной строки. Как это решить для меня непостижимо. Картинку в сообщении вставить не получилось, т.ч. она во вложении. Прошу помощи. Файл во вложении.
Код у меня такой:
Код: (vb)
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'формула массива
If Target.Address = "$B$3" Then
 
    Range("B14").Formula2 = "=--SUBSTITUTE(DATE(ROW(INDIRECT(YEAR(B3)&"":""&YEAR(C3))),1,1),SMALL(DATE(ROW(INDIRECT(YEAR(B3)&"":""&YEAR(C3))),1,1),1),B3)"
    Range("B14:B22").Select
    Selection.NumberFormat = "m/d/yyyy"
    Selection.HorizontalAlignment = xlCenter
   
    Range("C14").Formula2 = "=--SUBSTITUTE(DATE(ROW(INDIRECT(YEAR(B3)&"":""&YEAR(C3))),12,31), LARGE(DATE(ROW(INDIRECT(YEAR(B3)&"":""&YEAR(1))),12,31),1),C3)"
    Range("C14:C22").Select
    Selection.NumberFormat = "m/d/yyyy"
    Selection.HorizontalAlignment = xlCenter
     Range("D14").Formula2 = "=--SUBSTITUTE(DATE(ROW(INDIRECT(YEAR(B3)&"":""&YEAR(C3))),12,31),LARGE(DATE(ROW(INDIRECT(YEAR(B3)&"":""&YEAR(C3))),12,31),1),C3)-(--SUBSTITUTE(DATE(ROW(INDIRECT(YEAR(B3)&"":""&YEAR(C3))),1,1),SMALL(DATE(ROW(INDIRECT(YEAR(B3)&"":""&YEAR(C3))),1,1),1),B3+1))+1"
    Range("D14:D22").Select
    Selection.NumberFormat = "#,##0"
    Selection.HorizontalAlignment = xlCenter
   
   
    Range("E14").Formula2 = "=IF(DAY(DATE(ROW(INDIRECT(YEAR(B3)&"":""& YEAR(C3))),2,29))=29,366,365)"
    Range("E14:E22").Select
    Selection.NumberFormat = "#,##0"
    Selection.HorizontalAlignment = xlCenter
   
   Range("F14").Formula2 = "=(--SUBSTITUTE(DATE(ROW(INDIRECT(YEAR(B3)&"":""&YEAR(C3))),12,31),LARGE(DATE(ROW(INDIRECT(YEAR(B3)&"":""&YEAR(C3))),12,31),1),C3)-(--SUBSTITUTE(DATE(ROW(INDIRECT(YEAR(B3)&"":""&YEAR(C3))),1,1),SMALL(DATE(ROW(INDIRECT(YEAR(B3)&"":""&YEAR(C3))),1,1),1),B3+1))+1)/IF(DAY(DATE(ROW(INDIRECT(YEAR(B3)&"":""&YEAR(C3))),2,29))=29,366,365)"
   Range("F14:F22").Select
   Selection.NumberFormat = "m/d/yyyy"
   Selection.HorizontalAlignment = xlCenter
 
   Range("G14").Formula2 = "=$E$3*$F$3%*(--SUBSTITUTE(DATE(ROW(INDIRECT(YEAR(B3)&"":""&YEAR(C3))),12,31),LARGE(DATE(ROW(INDIRECT(YEAR(B3)&"":""&YEAR(C3))),12,31),1),C3)-(--SUBSTITUTE(DATE(ROW(INDIRECT(YEAR(B3)&"":""&YEAR(C3))),1,1),SMALL(DATE(ROW(INDIRECT(YEAR(B3)&"":""&YEAR(C3))),1,1),1),B3+1))+1)/IF(DAY" & _
        "(DATE(ROW(INDIRECT(YEAR(B3)&"":""&YEAR(C3))),2,29))=29,366,365)"
   Range("G14:G22").Select
   Selection.NumberFormat = "#,##0.00"
   Selection.HorizontalAlignment = xlRight
End If

End Sub

Всем спасибо.
Записан
Дмитрий Щербаков(The_Prist)
Администратор
Ветеран
*****

Репутация: +485/-0
Офлайн Офлайн

Сообщений: 5 828



Просмотр профиля WWW
« Ответ #1 : 06.06.2023, 14:59:55 »

Уточните - Вы хотите, чтобы обрабатывалась не только В3, а любая ячейка столбца В, выделенная на листе? И расчеты по ней выводились так же начиная с 14-ой строки?
Записан

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Пункты приёма Спасибов:    -41001332272872  -R298726502453
Masha
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 3


Просмотр профиля
« Ответ #2 : 06.06.2023, 19:53:43 »

Да, любая ячейка столбца В. Нажал В4 происходит расчёт строки В4 и так далее.
« Последнее редактирование: 06.06.2023, 20:07:03 от Masha » Записан
Дмитрий Щербаков(The_Prist)
Администратор
Ветеран
*****

Репутация: +485/-0
Офлайн Офлайн

Сообщений: 5 828



Просмотр профиля WWW
« Ответ #3 : 07.06.2023, 21:31:58 »

Код: (vb)
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    'формула массива
    'отслеживаем только диапазон "C3:C13"
    If Not Intersect(Target, Range("C3:C13")) Is Nothing Then
        Dim lr&
        lr = Target.Row
        Application.ScreenUpdating = False
        Range("B14").Formula2 = "=--SUBSTITUTE(DATE(ROW(INDIRECT(YEAR(B" & lr & ")&"":""&YEAR(C" & lr & "))),1,1),SMALL(DATE(ROW(INDIRECT(YEAR(B" & lr & ")&"":""&YEAR(C" & lr & "))),1,1),1),B" & lr & ")"
        Range("B14:B22").Select
        Selection.NumberFormat = "m/d/yyyy"
        Selection.HorizontalAlignment = xlCenter
       
        Range("C14").Formula2 = "=--SUBSTITUTE(DATE(ROW(INDIRECT(YEAR(B" & lr & ")&"":""&YEAR(C" & lr & "))),12,31), LARGE(DATE(ROW(INDIRECT(YEAR(B" & lr & ")&"":""&YEAR(1))),12,31),1),C" & lr & ")"
        Range("C14:C22").Select
        Selection.NumberFormat = "m/d/yyyy"
        Selection.HorizontalAlignment = xlCenter
         Range("D14").Formula2 = "=--SUBSTITUTE(DATE(ROW(INDIRECT(YEAR(B" & lr & ")&"":""&YEAR(C" & lr & "))),12,31),LARGE(DATE(ROW(INDIRECT(YEAR(B" & lr & ")&"":""&YEAR(C" & lr & "))),12,31),1),C" & lr & ")-(--SUBSTITUTE(DATE(ROW(INDIRECT(YEAR(B" & lr & ")&"":""&YEAR(C" & lr & "))),1,1),SMALL(DATE(ROW(INDIRECT(YEAR(B" & lr & ")&"":""&YEAR(C" & lr & "))),1,1),1),B" & lr & "+1))+1"
        Range("D14:D22").Select
        Selection.NumberFormat = "#,##0"
        Selection.HorizontalAlignment = xlCenter
       
       
        Range("E14").Formula2 = "=IF(DAY(DATE(ROW(INDIRECT(YEAR(B" & lr & ")&"":""& YEAR(C" & lr & "))),2,29))=29,366,365)"
        Range("E14:E22").Select
        Selection.NumberFormat = "#,##0"
        Selection.HorizontalAlignment = xlCenter
       
       Range("F14").Formula2 = "=(--SUBSTITUTE(DATE(ROW(INDIRECT(YEAR(B" & lr & ")&"":""&YEAR(C" & lr & "))),12,31),LARGE(DATE(ROW(INDIRECT(YEAR(B" & lr & ")&"":""&YEAR(C" & lr & "))),12,31),1),C" & lr & ")-(--SUBSTITUTE(DATE(ROW(INDIRECT(YEAR(B" & lr & ")&"":""&YEAR(C" & lr & "))),1,1),SMALL(DATE(ROW(INDIRECT(YEAR(B" & lr & ")&"":""&YEAR(C" & lr & "))),1,1),1),B" & lr & "+1))+1)/IF(DAY(DATE(ROW(INDIRECT(YEAR(B" & lr & ")&"":""&YEAR(C" & lr & "))),2,29))=29,366,365)"
       Range("F14:F22").Select
       Selection.NumberFormat = "m/d/yyyy"
       Selection.HorizontalAlignment = xlCenter
     
       Range("G14").Formula2 = "=$E$3*$F$3%*(--SUBSTITUTE(DATE(ROW(INDIRECT(YEAR(B" & lr & ")&"":""&YEAR(C" & lr & "))),12,31),LARGE(DATE(ROW(INDIRECT(YEAR(B" & lr & ")&"":""&YEAR(C" & lr & "))),12,31),1),C" & lr & ")-(--SUBSTITUTE(DATE(ROW(INDIRECT(YEAR(B" & lr & ")&"":""&YEAR(C" & lr & "))),1,1),SMALL(DATE(ROW(INDIRECT(YEAR(B" & lr & ")&"":""&YEAR(C" & lr & "))),1,1),1),B" & lr & "+1))+1)/IF(DAY" & _
            "(DATE(ROW(INDIRECT(YEAR(B" & lr & ")&"":""&YEAR(C" & lr & "))),2,29))=29,366,365)"
       Range("G14:G22").Select
       Selection.NumberFormat = "#,##0.00"
       Selection.HorizontalAlignment = xlRight
       Application.ScreenUpdating = True
    End If

End Sub
Записан

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Пункты приёма Спасибов:    -41001332272872  -R298726502453
Masha
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 3


Просмотр профиля
« Ответ #4 : 07.06.2023, 22:03:27 »

Дмитрий, большое Вам спасибо за оказанную помощь. Теперь мне понятно как использовать переменную в подобной ситуации.
Записан
Страниц: [1]   Вверх
Печать
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2011, Simple Machines Valid XHTML 1.0! Valid CSS!
Яндекс.Метрика Рейтинг@Mail.ru