Заполнение таблицы 2, используя обновляемые данные таблицы 1
Есть две таблицы в эксель.
Таблица 1.
Дата 01.01.2021
Статья 1 30
Статья 2 40
Статья 3 50
Таблица 2.
Дата Статья 1 Статья 2 Статья 3
01.01.2021 30 40 50
02.01.2021
03.01.2021
Я хочу, чтобы таблица номер 2 стала моей базой данных, а таблица номер 1 превратилась в вводное поле.
Другими словами, я хочу иметь возможность вводить данные в таблицу номер 1 таким образом, чтобы они автоматически отображались в таблице номер 2 с привязкой к дате, которая указана в таблице номер 1.
Алгоритм:
- Указываю дату в таблице 1, указываю значения для полей "Статья 1, 2, 3";
- Данные переходят в таблицу номер 2 с привязкой по дате и статьям;
- Указываю новую дату и изменяю данные для полей "Статья 1, 2, 3" в таблице номер 1 ;
- Данные переходят в таблицу номер 2 с привязкой к новой дате;
- При этом данные, которые были указаны на шаге алгоритма 1, сохраняются в таблице два, далее меняются только при явном указании через таблицу номер 1.
Понимаю, что это как то можно сделать с помощью макросов, но не знаю как
Ответы (1 шт):
Прицепить на листе, где водятся данные, какой-либо объект (кнопку, например), назначить ему макрос.
В общем модуле разместить код:
Sub SaveData()
Dim aData(), aBase()
Dim lRw As Long
aData = Worksheets("Лист1").Range("B1:B4").Value
With Worksheets("Лист2")
lRw = .UsedRange.Rows.Count + .UsedRange.Row - 1
aBase = .Range("A1:D" & lRw).Value
lRw = fFindDate(aBase, aData(1, 1))
.Cells(lRw, 1).Value = aData(1, 1): .Cells(lRw, 2).Value = aData(2, 1)
.Cells(lRw, 3).Value = aData(3, 1): .Cells(lRw, 4).Value = aData(4, 1)
End With
MsgBox "OK", 64, ""
End Sub
' поиск даты '
Function fFindDate(aBase(), ByVal dDate As Date) As Long
Dim i As Long
For i = 2 To UBound(aBase)
If aBase(i, 1) = dDate Then
fFindDate = i: Exit Function
End If
Next i
fFindDate = UBound(aBase) + 1
End Function
В зависимости от даты на первом листе данные на втором листе или записываются в строку под последней записью, или (если дата найдена) перезаписываются в строке с этой датой.

