Как реализовать сбрасываемое, перезаписываемое значение ячейки по умолчанию в Excel?

>> Краткое изложение вопроса

Я хочу реализовать сбрасываемое, переопределяемое значение ячейки по умолчанию в Экселе. Под этим я подразумеваю иметь ячейку, которая возвращается к значению «по умолчанию», полученному формулой поиска, зависящей от второй ячейки, когда эта вторая ячейка обновляется. У пользователя также есть возможность записать другое значение в исходную ячейку, которое останется до тех пор, пока вторая ячейка не будет обновлена ​​в следующий раз.


>> Основная часть и детали

Итак, вот ситуация; этот снимок относится к соответствующей области репозитория данных с несколькими рабочими листами. Две представляющие интерес ячейки для ясности выделены зеленым цветом, а самая верхняя видимая строка — это строка 1.

  • Ячейка Поиск элементовпринимает различные вводимые слова или фразы и имеет проверку данных, чтобы гарантировать, что только действительные входы возможны. Проверка данных берется из алфавитного списка возможных входных данных, а в ячейке есть опция раскрывающегося списка (отсюда и маленькая стрелка справа).

  • Ячейка Стекиспользует входные данные из ячейки Поиск элементовв следующей формуле...

    =ЕСЛИ(СЧЁТЕСЛИ(C3:F315,J6),ВПР( J6,C3:F315,4,ЛОЖЬ),"~")
    

    ...где J6 — ячейка Item Search, а диапазон C3:F315 — соответствующая часть таблицы поиска на том же листе.

    Snapshot depicting area of Excel document relevant to question.

Вот что я хотел бы сделать в ячейке Stack...

  • Текущая функциональность:
    • Когда в ячейку Поиск элементавводится неверный ввод, вместо числа отображается тильда.
    • При правильном вводе в ячейке отображается соответствующий номер из таблицы поиска. Таким же образом обновляются ячейки Купитьи Продать.
  • Желаемый дополнительный функционал:
    • В первом случае тильда не может быть перезаписана.
    • Во втором случае номер «по умолчанию» можно перезаписать, введя другой номер в ячейку Stack.
    • Когда в ячейку Поиск элементавводится новый ввод (или снова тот же ввод), номер по умолчанию (или тильда) снова отображается.
  • Список пожеланий (необязательный):
    • Чтобы иметь флажок (или аналогичный; например, ввод да/нет в соседней ячейке), который, если он установлен, означает, что отображаемое число в ячейке Stackне будет изменено/ зависит от любого нового «значения по умолчанию», считываемого из таблицы поиска. Номер по-прежнему можно изменить, введя новый вручную.
    • Ячейка Item Searchв настоящее время имеет раскрывающийся алфавитный список всех возможных допустимых входных данных.Есть ли способ использовать этот же список, чтобы добавить в ячейку функцию автозаполнения? Возможно, немного похоже на поисковую систему Google, раскрывающийся список появляется по мере того, как вы печатаете, и элементы, заполняющие этот список, постоянно ограничиваются теми, которые содержат (под)строку, которую вы набрали до сих пор.

Примечание. Любое значение, отображаемое в ячейке Stack, должно быть доступно для чтения формулами в других ячейках; а именно ячейки Buyи Sell, значения которых станут отношением значения поиска ячейки Stackк тому, что отображается в ячейке в данный момент.

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

Заранее благодарю.


Информация, найденная на данный момент:

...но не совсем полное решение моего вопроса.

  1. Вероятно, я мог бы использовать более одной ячейки для достижения той же (или похожей) эффективной функциональности (одна ячейка содержит значение по умолчанию, другая содержит возможное значение, введенное пользователем, а третья содержит соответствующее выходное значение), но это было бы не выглядеть так хорошо и не быть интуитивно понятным для конечного пользователя. Эта рабочая книга предназначена для распространения среди других людей, при этом большая ее часть заблокирована и защищена. -- Этот ответ нежелателен.

  2. В своих поисках в Интернете, прежде чем задать этот вопрос, я нашел немного информации.В нем говорилось, что если я хочу, чтобы возврат к значению по умолчанию был автоматическим, то используйте следующий код в процедуре события изменения рабочего листа:

    Private Sub Worksheet_Change (ByVal Target As Range)
    Если Не Пересечение(Цель, Диапазон("C2")) Ничего, Тогда
    Если Диапазон("C2").Value = "" Тогда
    Диапазон ("C2"). Значение = 1234
    Конец, если
    Конец, если
    Конец сабвуфера
    

    Однако я не совсем понимаю, что под этим подразумевается и как это сделать.
    -- C2 – номинальная ячейка, используемая в примере другого человека.

  3. Кто-то спросил (возможно)аналогичный вопрос и был предоставлен этот ответ, связанный с использованием пользовательских числовых форматов. Будет ли пользовательский числовой формат принимать формулу, подобную той, которая в настоящее время используется в ячейке Stack?


Загрузка документа:

Текущая и желаемая функциональность включены, элементы списка желаний еще впереди.
Item-inary (public).xlsm- (MediaFire)
18 марта 2012 г., 07:40 UCT

Текущая и желаемая функциональность + «Список желаний 1».
Item-inary (public).xlsm- (Mediafire)
20 марта 2012 г., 19:50 UCT


>> РЕДАКТИРОВАТЬ № 1:

Это мой код в его различных разделах до сих пор:

В ThisWorkbook

Public temp As Integer 'Used to contain Range("M6").Value once CheckBox5 is ticked
Public warn As Boolean 'True if CheckBox1 is ticked whilst (vVal = "~")

Private Sub Workbook_Open()
    warn = False 'Initialise to False
End Sub

В Лист 1 (Прайс-лист)

Private Sub CheckBox1_Click()
    If OLEObjects("CheckBox1").Object.Value = True Then
        If Range("M6").Value = "~" Then
            warn = True
        Else
            temp = Range("M6").Value
            warn = False
        End If
    End If
End Sub


Private Sub Worksheet_Change(ByVal Target As Range)
    Dim vVal As Variant

    On Error GoTo Whoa

    vVal = Application.Evaluate("=IF(COUNTIF(C3:F315,J6),VLOOKUP(J6,C3:F315,4,FALSE),""~"")")

    '~~> If J6 has been changed, then continue. Otherwise skip.
    If Not Intersect(Target, Range("J6")) Is Nothing Then
        Application.EnableEvents = False
        ActiveSheet.Unprotect ("012370asdf")

        If vVal = "~" Then
            Range("M6").Value = "~"
            Range("M6:M7").Locked = True
        Else
            '~~> Check if CheckBox5 is ticked.
            If OLEObjects("CheckBox5").Object.Value = True Then
                '~~> Checks if CheckBox5 was ticked whilst (vVal = "~")
                If warn = True Then
                    temp = vVal
                    warn = False 'Reset warn status now that special case is resolved
                End If
                Range("M6").Value = temp
            Else
                Range("M6").Value = vVal
            End If
            Range("M6:M7").Locked = False
        End If

        ActiveSheet.Protect ("012370asdf")
        GoTo LetsContinue
    End If

    '~~> If M6 has been changed, then continue. Otherwise skip.
    If Not Intersect(Target, Range("M6")) Is Nothing Then
        Application.EnableEvents = False

        If OLEObjects("CheckBox5").Object.Value = True Then
            temp = Range("M6").Value
        End If

        GoTo LetsContinue
    End If

LetsContinue:
    Application.EnableEvents = True
    Exit Sub
Whoa:
    MsgBox err.Description
    Resume LetsContinue
End Sub

Этот код еще не включает какие-либо функции «Список желаний 2» , но в остальном работает нормально.

Большое спасибо тем, кто помог.

12
задан 19 revs, 4 users 68% 18 August 2019 в 09:10
поделиться