Автоматическое обновление базы данных Excel

Автоматическое обновление базы данных Excel

Я использую 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: я обычно предпочитаю использовать Cellsover Range, но это не так понятно, поэтому я выбрал Range.)

решение2

Если вы не знаете и не можете освоить инструменты, необходимые для выполнения работы, то единственная альтернатива — выполнять ее вручную.

Затем запишите шаги, которые вам пришлось выполнить вручную, — это будет ваш план по автоматизации.

Затем начните гуглить, как создать простой макрос VBA, который автоматизирует записанные вами шаги.

Связанный контент