
Я использую Excel 2007. У меня есть файл Excel, в котором ячейка A1 показывает дату, а ячейка B1 показывает сумму на листе 1. Мне нужно автоматически обновить дату в A1 и сумму B1 в базе данных на листе 2. База данных на листе 2 связана с ячейками A1 и B1 на листе 1 с помощью VLOOKUP, выбрав дату в A1 в качестве искомого значения. Файл Excel используется ежедневно, и содержимое ячеек A1 и B1 будет меняться ежедневно. На листе 2 необходимо будет записать все даты и суммы в ячейках A1 и B1 за один год.
Моя проблема:
1. Как мне создать базу данных, чтобы ежедневно фиксировать предыдущую дату и сумму в ячейках A1 и B1, поскольку даты в ячейках A1 постоянно меняются, поскольку они вводятся ежедневно.
Например :-
На 14/3/2015 (ячейка A1) в ячейке B1 стоит цифра $3333. Следовательно, в базе данных зафиксирована дата 14/3/2015 и $3333 на листе 2 в базе данных.
На следующий день, 15/3/2015, содержимое ячейки A1 изменится на 15/3/2015, а в ячейке B1 отобразится цифра 5 555 долларов США.
Моя проблема заключается в том, как сохранить обе даты и значения на листе 2 моей базы данных, поскольку я могу получить только одну дату и значение только для текущего дня.
Честно говоря, я не знаю VBA.
решение1
Это делается лишь немного сложнее, потому что вы хотите скопировать две ячейки. Обычно вы можете использовать событие Worksheet_Change
для перехвата каждого изменения ячейки. Однако вы хотите дождаться, пока обе ячейки изменятся. Вместо того, чтобы применять какое-то правило, когда вы должны изменить их в правильном порядке, а затем просто наблюдать за последней ячейкой, я написал это, чтобы дождаться C1
изменения ячейки. Я думал, что ваши пользователи могут редактировать A1
, а B1
затем печататьчто-либоin C1
и код сработает. Вы можете использовать проверку данных, чтобы добавить раскрывающийся список, C1
который имеет только одну опцию, например "Go". Код ниже будет копировать значения A1
& B1
в последнюю строку на листе 2 всякий раз, когда значение C1
изменяется, а затем очищать это значение из C1
.
Откройте редактор VBA ( Alt+ F11— один из методов). Найдите лист 1 в окне Project Explorer слева (он уже должен быть там с древовидным меню, показывающим все открытые рабочие книги и рабочие листы в них). Дважды щелкните по листу, чтобы открыть окно кода. Скопируйте и вставьте код ниже: (Возможно, вам придется отредактировать строку, Worksheets("Sheet2")
если «Лист2» не является фактическим именем вашего второго рабочего листа, на который вы хотите скопировать данные.)
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim r As Long
If Not Intersect(Target, Range("C1")) Is Nothing Then
With Worksheets("Sheet2")
r = .Range("A" & .Rows.Count).End(xlUp).Row + 1
.Range("A" & r).Value = Range("A1").Value
.Range("B" & r).Value = Range("B1").Value
End With
Application.EnableEvents = False
Range("C1").ClearContents
Application.EnableEvents = True
End If
End Sub
(Для фанатов VBA: я обычно предпочитаю использовать Cells
over Range
, но это не так понятно, поэтому я выбрал Range
.)
решение2
Если вы не знаете и не можете освоить инструменты, необходимые для выполнения работы, то единственная альтернатива — выполнять ее вручную.
Затем запишите шаги, которые вам пришлось выполнить вручную, — это будет ваш план по автоматизации.
Затем начните гуглить, как создать простой макрос VBA, который автоматизирует записанные вами шаги.