У меня есть вопрос, который может или не может иметь ответ.

у меня есть ячейка, скажем, A1, и если в A1 есть "y", то добавляются значения в A2 и A3, а сумма в A4. Если A1 пусто, A4 просто имеет значение A3. Это довольно просто сделать в Excel.

Однако вопрос в том, что я могу использовать вместо ввода или удаления "y"? В моем случае мои данные состоят из нескольких тысяч строк, и эта опция "y" заставляет меня добавлять дополнительные строки без всякой причины, и я бы предпочел этого избежать.

По сути, то, что я хочу, - это способ использовать значение в A2 и найти способ с помощью команды excel обновить значение A4, если я хочу (суммируя A2 и A3). В противном случае он продолжит удерживать значение A3.

Я попытался использовать макрос для обновления, изменив цвет шрифта и цвет фона A2, чтобы обозначить подтверждение, но это не сработает, так как Excel не выполняет вычисления изменений шрифта / цвета. Если я нажму F9, он обновится и будет работать, но это слишком хлопотно, поэтому я не хочу этого.

Ребята, пожалуйста, предложите что-нибудь еще для меня! Огромное спасибо.

1 ответ1

0

Введите следующий макрос событий в области кода рабочей таблицы:

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim A2 As Range
    Set A2 = Range("A2")

    If Intersect(A2, Target) Is Nothing Then Exit Sub

    Application.EnableEvents = False
        [A4] = [A2] + [A3]
    Application.EnableEvents = True

End Sub

Поскольку это код рабочего листа, его очень легко установить и использовать автоматически:

  1. щелкните правой кнопкой мыши имя вкладки в нижней части окна Excel
  2. выберите View Code - откроется окно VBE
  3. вставьте материал и закройте окно VBE

Если у вас есть какие-либо проблемы, сначала попробуйте на пробную версию.

Если вы сохраните книгу, макрос будет сохранен вместе с ней. Если вы используете версию Excel более поздней, чем в 2003 году, вы должны сохранить файл как .xlsm, а не .xlsx

Чтобы удалить макрос:

  1. вызвать окна VBE, как указано выше
  2. очистить код
  3. закройте окно VBE

Чтобы узнать больше о макросах в целом, смотрите:

http://www.mvps.org/dmcritchie/excel/getstarted.htm

а также

http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx

Чтобы узнать больше о макросах событий (код листа), см .:

http://www.mvps.org/dmcritchie/excel/event.htm

Макросы должны быть включены, чтобы это работало!

EDIT # 1:

Сначала откажитесь от предыдущего макроса и замените его следующим:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    Dim A2 As Range

    Set A2 = Range("A2")
    If Intersect(Target, A2) Is Nothing Then Exit Sub
    Cancel = True
    [A4] = [A2] + [A3]
    A2.Font.Bold = True
End Sub

Это влияет только на поведение двойного щелчка в A2. Код можно легко расширить, чтобы охватить другие ячейки или диапазоны.

EDIT # 2:

В этой версии двойной щелчок A2 подтверждает A2. Двойной щелчок A3 не подтверждает A2:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    Dim A2 As Range, boo As Boolean, A3 As Range

    Set A2 = Range("A2")
    Set A3 = Range("A3")

    If Not Intersect(Target, A2) Is Nothing Then
        [A4] = [A2] + [A3]
        A2.Font.Bold = True
        Cancel = True
    End If
    If Not Intersect(Target, A3) Is Nothing Then
        A2.Font.Bold = False
        [A4] = [A3]
        Cancel = True
    End If

End Sub

EDIT # 3:

Использование этого макроса расширяет функциональность до столбцов за столбцом A:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    Dim rw2 As Range, rw3 As Range, kolumn As Long

    Set rw2 = Range("2:2")
    Set rw3 = Range("3:3")

    kolumn = Target.Column
    If Not Intersect(Target, rw2) Is Nothing Then
        Cells(4, kolumn) = Cells(2, kolumn) + Cells(3, kolumn)
        Cells(2, kolumn).Font.Bold = True
        Cancel = True
    End If
    If Not Intersect(Target, rw3) Is Nothing Then
        Cells(2, kolumn).Font.Bold = False
        Cells(4, kolumn) = Cells(3, kolumn)
        Cancel = True
    End If

End Sub

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .