Страницы: 1
RSS
Ввод данных из ячейки одного листа в ячейку другого листа
 
Здравствуйте. Как сделать ввод ячейки одного листа в другой. Желательно через формулу, а не макрос. Нужно значения задаваемые под ячейками "План" и "Факт" из листа 'Выполнение' выводить под ячейки "План" и "Факт" на листе 'ЗП сотрудников' .
Если условие выполнено то ввод в ячейку другого листа
 
Здравствуйте lfyz,
Цитата
lfyz написал:
Если условие выполнено то ввод в ячейку другого листа
Какого условия?
 
Если бы я знал как это условие записать в команду, то не писал бы на форуме)
Нужно просто все значения которые мы в перовом листе таблицы под колонками "Факт" и "План" автоматически записывались на втором листе под теме же колонками
И желательно задать это как то формулой
Изменено: lfyz - 27.04.2024 07:54:53
 
Заполните несколько строк вручную чтобы понятно было.
 
Жёлтым выделил рандомно вбитые значения на листе Выполнение под столбцами Факт и План. Нужно чтобы эти же значения автоматически переносились на 2 лист таблицы под теже столбцы План и Факт на листе ЗП сотрудников  
 
Формулы на листе 'ЗП сотрудников'.
CL6 (копирует из Выполнение!BT6):
Код
=ИНДЕКС(Выполнение!$1:$1048576; СТРОКА(); ПОИСКПОЗ(CL1; Выполнение!$1:$1; 0))
CM6 (копирует из Выполнение!BU6):
Код
=ИНДЕКС(Выполнение!$1:$1048576; СТРОКА(); ПОИСКПОЗ(CL1; Выполнение!$1:$1; 0)+1)
 
Код
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Cells.CountLarge > 1 Then Exit Sub
    If Target.Column < Columns("J:J").Column Then Exit Sub
    If Target.Row < 5 Then Exit Sub
    Application.StatusBar = False
    
    Dim x2 As Long
    Dim y2 As Long
    Dim sh2 As Worksheet
    Set sh2 = Worksheets("ЗП сотрудников")
    With sh2
        On Error Resume Next
        y2 = WorksheetFunction.Match(Cells(Target.Row, 2).Value, .Columns(2), 0)
        'x2 = WorksheetFunction.Match(Cells(1, Target.Column).MergeArea.Cells(1, 1).Value, .Rows(1), 0)
        On Error GoTo 0
        If y2 > 0 Then
            x2 = myMatch(Cells(1, Target.Column).MergeArea.Cells(1, 1).Value, .Rows(1))
            If x2 > 0 Then
                If Cells(2, Target.Column).Value <> .Cells(2, x2).Value Then
                    x2 = x2 + 1
                End If
                If Cells(2, Target.Column).Value = .Cells(2, x2).Value Then
                    .Cells(y2, x2).Value = Target.Value
                    Application.StatusBar = .Name & "!" & Cells(y2, x2).Address(0, 0, xlA1) & " = " & .Cells(y2, x2).Value
                End If
            End If
        End If
    End With
End Sub

Private Function myMatch(vVal As Variant, rr As Range) As Long
    Dim arr As Variant
    arr = rr.Value
    
    Dim xa As Long
    For xa = 1 To UBound(arr, 2)
        If Not IsError(arr(1, xa)) Then
            If vVal = arr(1, xa) Then
                myMatch = xa
                Exit Function
            End If
        End If
    Next
End Function
В модуль листа "Выполнение".
 
=ИНДЕКС(Выполнение!$1:$1048576; СТРОКА(); ПОИСКПОЗ(CL1; Выполнение!$1:$1; 0))
Формула с индексами одна накладывается на другую, так как они находятся в одной строке

Я написал свою формулу (вставляется в X5 на лист ЗП сотрудников)  =ЕСЛИ(X2=Выполнение!J2;Выполнение!J5;ЕСЛИ(Y2=Выполнение!K2;Выполнение!K5;" ")),  но есть проблема - она съедает другую формулу которая находится на той же строке, но под столбцом "Сумма за неделю".
!!!Нужно доработать как то, чтобы формула этого не делала (не съедала, а пропускала другую формулу когда её протягивают вдоль строки)
Изменено: lfyz - 27.04.2024 10:05:27
 
Цитата
она съедает другую формулу которая находится на той же строке, но под столбцом "Сумма за неделю"
В CL6:
Код
=ЕСЛИ(ПЕЧСИМВ(CL$1)="Сумма за неделю"; СУММЕСЛИ(BX$2:CK$2;"Факт";BX6:CK6); 
ИНДЕКС(Выполнение!$1:$1048576; СТРОКА(); (CL$1="")+ПОИСКПОЗ(ЕСЛИ(CL$1="";CK$1;CL$1); Выполнение!$1:$1; 0)))
Цитата
не съедала, а пропускала другую формулу когда её протягивают вдоль строки
Чтобы сохранить форматирование (цвет, числовой формат), лучше не протягивать, а: копировать ячейку, выделять нужный диапазон, специальная вставка (Ctrl-Alt-V) - "формулы".
 
Ребят спасибо всем
Работает однако,  А как теперь сделать чтобы значения под План аналогично появлялись на этой же строке подскажите пожалуйста
 
Разбить CT на 2 столбца: CT и CU.
Формула останется универсальной, в CT6:
Код
=ЕСЛИ(ИЛИ(ПЕЧСИМВ(CT$1)="Сумма за неделю"; И(CT$1=""; ПЕЧСИМВ(CS$1)="Сумма за неделю")); 
СУММЕСЛИ(CF$2:CS$2; ЕСЛИ(CT$1="";"Факт";"План"); CF6:CS6);
ИНДЕКС(Выполнение!$1:$1048576; СТРОКА(); (CT$1="")+ПОИСКПОЗ(ЕСЛИ(CT$1="";CS$1;CT$1); Выполнение!$1:$1; 0)))
Страницы: 1
Наверх