Excel: автоматическая перезапись ячейки A на основе ввода ячейки B - PullRequest
0 голосов
/ 04 января 2019

В поисках способа справиться со следующей ситуацией:

enter image description here

Когда Input1 = R, тогда я ищу его, чтобы перезаписать все, что есть в Output с помощью valueX, однако, когда Input1 не = R, тогда я хочу иметь возможность вводить в ячейку со свободным выбором.

Возможно ли это сделать с помощью какой-нибудь умной проверки данных? Я знаю, что это можно сделать с помощью vba, однако, если возможно, постарайтесь избежать этого, поскольку это будет отправка другим сторонам, которым, возможно, потребуется внести изменения и которые не уверены в vba.

Ценю любой совет!

Ответы [ 2 ]

0 голосов
/ 04 января 2019

OverWrite Cell feat. Дело Дело

Измените значения в разделе констант в соответствии с вашими потребностями. Вставьте следующий код в окно кода листа (в VBA дважды щелкните, например, на «Sheet1»).

Код

Option Explicit
'*******************************************************************************
' Purpose:    Writes a string to a column in the same row where another
'             string was entered in (copied to) another column.
'*******************************************************************************
Private Sub Worksheet_Change(ByVal Target As Range)

    Const cStrRange As String = "A:A"   ' If Column Range Address
    Const cStrSource As String = "R"    ' If String (Upper Case)
    Const cStrTarget As String = "X"    ' Then String
    Const cIntOffset As Integer = 1     ' Then Column Offset (1 for Next Column)

    ' Each Cell Range i.e. each cell of the range at the intersection
    ' of the If Column Range and the Target's range.
    Dim objCell As Range

    Application.EnableEvents = False
    On Error GoTo ProcedureExit

    If Not Intersect(Target, Range(cStrRange)) Is Nothing Then
        For Each objCell In Intersect(Target, Range(cStrRange))
            If UCase$(objCell) = cStrSource Then
                objCell.Offset(0, cIntOffset) = cStrTarget
            End If
        Next
    End If

ProcedureExit:
    Application.EnableEvents = True
End Sub
'*******************************************************************************
0 голосов
/ 04 января 2019

Ну Я не мог придумать решение, отличное от VBA, поэтому, возможно, сообщество придумает что-то, определенно возможно.

К счастью, решение VBA не так много кода, так что, возможно, это поможет.

Добавьте это к коду позади Рабочего листа, где расположены эти данные ( не добавляйте к стандартному модулю). Я предположил, что эти данные находятся в столбцах A и B. Если это не так, просто измените Target.Column = 1 на столбец, где находится Input1. Кроме того, я предполагал, что вы начнете замену в строке 2, чтобы не заменять заголовки.

Private Sub Worksheet_Change(ByVal Target As Range)
    Application.EnableEvents = False
    If Target.Column = 1 And Target.Row > 1 And LCase$(Target.Value) = "r" Then Target.Offset(0, 1).Value = "X"
    Application.EnableEvents = True
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...