Я хотел бы получить помощь от кого-то, так как я считаю, что эта проблема требует VB. У меня в основном есть CELL(A4), где люди будут вводить значения, чтобы узнать соответствующие вычисления, показанные ниже.

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

Ячейки E7 и E8 получат входные данные и умножат их на 960(E7) или 765(E8) и передадут это значение в ячейку (A4), чтобы остальные формулы корректно обновились.

Обычно пользователь вводит пакеты непосредственно в A4 или вводит количество контейнеров в E7 или E8.

** Вот где у меня проблема, потому что когда я ввожу формулу на А4, она удаляется, как только вы вводите значение непосредственно в нее.

** Также обратите внимание, что результат от E7 и E8 должен отображаться (в формате A4), как мне это нужно.

Мой лист:

4 ответа4

4

Вы можете использовать функцию смены листа в vba. Что-то вроде

Private Sub Worksheet_Change(ByVal target As Range)

If Intersect(target, Range("e7:e8")) Is Nothing Then Exit sub

Application.enableevents = False
ActiveSheet.range("A4").formula="=if(e7="""",e8*765,e7*960)"
Application.enableevents = True

End Sub

Каждый раз, когда лист меняет, он проверяет, была ли изменена ячейка e7 или e8. Если бы это было, это ставит формулу

=if(e7="",e8*765,e7*960)

в ячейке А4. Если вы затем поместите значение в ячейку A4, оно останется до тех пор, пока вы снова не измените e7 или e8. Возможно, вам придется настроить его, чтобы сделать именно то, что вы хотите, но идея есть.

Это будет происходить в объекте листа под объектами Microsoft Excel в VBA.

РЕДАКТИРОВАТЬ:

Чтобы соответствовать с комментариями.

Новый код, этот будет делать что-то, только если ячейка имеет добавленное или измененное значение, он не будет работать, если вы удалите значение.

Затем он проверяет, был ли e7 отредактирован. Если это было е8 удаляется. Если это не так, мы знаем, что e8 был отредактирован, поэтому e7 будет удален. Формула остается прежней.

Private Sub Worksheet_Change(ByVal target As Range)

    If Intersect(target, Range("e7:e8")) Is Nothing Or target.Value = "" Then Exit Sub
        Application.EnableEvents = False

        ActiveSheet.Range("A4").Formula = "=if(e7="""",e8*765,e7*960)"

        If Intersect(target, Range("e7")) Is Nothing Then
           ActiveSheet.Range("e7").ClearContents
        Else
            ActiveSheet.Range("e8").ClearContents
        End If

    Application.EnableEvents = True

End Sub
1

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

Скажем, А4 представляет собой общую стоимость и содержит:

=D8*G8

где D8 - стоимость единицы, а G8 - количество.

Но для особых клиентов мы хотим иметь возможность указывать скидку. Мы помещаем дисконтированную стоимость в H8 и модифицируем формулу таким образом:

=IF(H8<>"",H8,F8*G8)

Так что, если мы хотим переопределить, это идет в H8; в противном случае мы оставляем H8 пустым.

0

Вы можете использовать VB, чтобы изменить любое значение на этапе расчета.

Но это означает, что макрос изменит значение в A4, и вам нужно будет что-то добавить, чтобы знать, что значение не должно обновляться за секунду.

Так что в теории это возможно, но это крайне непрактично.

Если вы просто хотите иметь выпадающий список с популярными значениями, вам не нужно переходить на VB. В Excel эта функция встроена. Вы можете сделать это с помощью data validation .

0

Решение, которое я использую, когда у вас есть только несколько ячеек, которые я хочу, чтобы и вычисления, и способность вводить значения, чтобы переопределить формулу или удалить то, что они ввели и имеют формулу, есть.

Настройте свой рабочий лист, как вы хотите .. Затем для ячейки, которую вы хотите переопределить, настройте идентичную ячейку в столбце за пределами экрана, то есть в столбец az, вырежьте и вставьте туда ell. В этом специальном вводе измените формулу, но с помощью if, чтобы проверить, было ли введено значение в оригинальная клетка.

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

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

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

Также рассмотрите возможность добавления условного формата в ячейку формулы, который изменяется, если в отображаемой ячейке есть значение, это помогает напомнить вам, что было введено ручное значение.

Надеюсь, что это поможет настроить формы, которые выглядят простыми и работают без макросов.

Терри

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