1
: 07.06.2023, 22:03:27
|
Автор Masha - Последний ответ от Masha
|
Дмитрий, большое Вам спасибо за оказанную помощь. Теперь мне понятно как использовать переменную в подобной ситуации.
|
|
2
: 07.06.2023, 21:31:58
|
Автор Masha - Последний ответ от Дмитрий Щербаков(The_Prist)
|
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
|
|
3
: 06.06.2023, 19:53:43
|
Автор Masha - Последний ответ от Masha
|
Да, любая ячейка столбца В. Нажал В4 происходит расчёт строки В4 и так далее.
|
|
4
: 06.06.2023, 14:59:55
|
Автор Masha - Последний ответ от Дмитрий Щербаков(The_Prist)
|
Уточните - Вы хотите, чтобы обрабатывалась не только В3, а любая ячейка столбца В, выделенная на листе? И расчеты по ней выводились так же начиная с 14-ой строки?
|
|
5
: 04.06.2023, 13:29:22
|
Автор Masha - Последний ответ от Masha
|
Всем привет. Я в VBA даже не первоклассница а детский сад. Прошу лояльно отнестись к моим вопросам. Есть у меня таблица, в ней несколько строк, в каждой строке какие-то вычисления. Ниже этой таблицы выводится результат вычислений этой строки формулами массива. Для вычислений из первой строки у меня всё получилось ( одиночный клик по В3 и начиная с 14-ой строки расчёт). Хотелось бы сделать так, чтобы при переходе на следующие строки, там же под таблицей, выводился результат вычислений, выбранной строки. Как это решить для меня непостижимо. Картинку в сообщении вставить не получилось, т.ч. она во вложении. Прошу помощи. Файл во вложении. Код у меня такой: 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 Всем спасибо.
|
|
6
: 02.06.2023, 16:16:48
|
Автор Kuzmich110 - Последний ответ от Kuzmich110
|
Вот правильное описание. Прошу сильно ногами не пинать )) Из таблицы "Приёмник" данные попадают к каждому исполнителю по отдельности. После того, как исполнитель проставляет дату выполнения и статус эти данные с помощью конгломерации попадают в таблицу источник. Далее в "Приёмник" нужно вернуть "дату выполнения" и "статус" которые соответствуют ID в таблице "приёмник".
Лист приёмник скорее стоит переименовать, допустим, в "Журнал". В котором есть задача с номером ID, датой поступления и Ответственным. Когда назначается ответственный, он видит эту задачу у себя в отдельном файле где ставит дату выполнения и статус, которые в свою очередь появляются в журнале.
Пока печатал в голову пришла идея: Может это воплотить через что-то вроде ВПР в Excel?
|
|
7
: 02.06.2023, 15:15:03
|
Автор Kuzmich110 - Последний ответ от Kuzmich110
|
С номерами ID косяк, извиняюсь. К сожалению немного не то. Скорее я немного не правильно объяснил. Нужно что-то по типу ВПР в EXcele. Т.е подтянуть данные из "Источника" по ID, который указан в приёмнике.
Ввиду малого опыта, прошу прощения за "карявое" объяснение вопроса.
|
|
8
: 02.06.2023, 14:54:31
|
Автор Kuzmich110 - Последний ответ от Дмитрий Щербаков(The_Prist)
|
=sort(query(IMPORTRANGE("https://docs.google.com/spreadsheets/d/1J_wTXPmYmm8VQYYNmm5gdkHv6sSKb-Fj2C6tGG_yMxY/edit#gid=0";"Исходник");"select * ");G:G;ИСТИНА) Только в G1 введите число 0 - иначе заголовки "поедут" И число 11 у Вас пропущено, но зато есть число 9, которого нет среди исходных ID. На это тоже следует обращать внимание, т.к. в этом случае строки ID не будут соответствовать заданным числам в столбце порядка сортировки.
|
|
9
: 02.06.2023, 14:45:48
|
Автор Kuzmich110 - Последний ответ от Kuzmich110
|
Совершенно верно. Нужно чтобы данные выстраивались в порядке колонки G (ID Нужна сортировка по этой колонке).
т.е есть массив в "Исходнике", где есть колонка ID. При получении в "Приёмник" данные должны выстраиваться по ID в том порядке, который указан в приёмнике. Надеюсь смог объяснить ))
|
|
10
: 02.06.2023, 12:06:01
|
Автор Leojse - Последний ответ от Leojse
|
Не актуально, можно закрывать тему
|
|
|