Как получить значение ячейки из другого листа Excel на основе нескольких условий списка - PullRequest
0 голосов
/ 06 марта 2019

Я прошу прощения, если это выглядит как запрос новичка, но я был озадачен этим в течение некоторого времени.

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

Сложность состоит в том, что я хочу получить эти справочные данные на основе значений, выбранных из 6 условных выпадающих списков, которые я создал.

В зависимости от того, что выбрано, значения, скажем на Листе 1, будут отображать соответствующие значения из Листа 2 автоматически (т. Е. Если один из параметров списка будет изменен, «результаты» обновятся автоматически с соответствующими данными).

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

Формат того, что я пытаюсь сделать, таков:

Лист 1 - «GUI» На этом листе есть раскрывающиеся списки и раздел «отображаемые результаты»

dd1 - State (6 options)
dd2 - Product Type (4 options)
dd3 - Product Brand (3 options)
dd4 - Product variation 1 (eg model) (say, 2 options)
dd5 - Product variation 2 (eg colour) (5 options)
dd6 - Product variation 3 (eg size) (3 options)

Лист 2 - Справочные данные

Table 1 - ACT products and variations
Table 2 - VIC products and variations 
Table 3 - NSW products and variations etc and so on...

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

Мне нужно, чтобы:

IF dd1 = "ACT" AND dd2 = "Mobile" AND dd3 = "Apple" AND dd4 = "iPhone" AND dd5 = "white" AND dd6 = "128Gb"

Тогда

Ячейка результатов, скажем, Sheet1! C10, будет отражать цену товара на основе таблицы списков данных в Sheet2 (например, для указанного значения в Листе 2, ячейка A5)

Но если, скажем, выбор списка изменится, например, dd3 был изменен на «Samsung», то списки будут автоматически обновляться из-за условного форматирования; но затем я хочу, чтобы результаты соответствующим образом обновлялись (например, цена, указанная на основе новых вариантов, будет отражать Sheet2! B3).

Из-за множества опций и вариантов на листе 2 имеется много таблиц для справки, поэтому выражение «IF», ​​охватывающее все эти варианты, будет массовым и запутанным.

Существует ли относительно лаконичный способ написания кода для этой функции?

Мой текущий код в разделе worksheet_change

    If Range("D10").Value = "ACT" And (Range("D11").Value = "Mobile" And (Range("D13").Value = "Samsung" And (Range("D14").Value = "S7") And (Range("D15").Value = "Black") And (Range("D16").Value = "128"))))) Then

    Sheets("Sheet2").Range("F20").Value = Sheets("Sheet4").Range("C5").Value2

    Sheets("Sheet2").Range("F29").Value = Sheets("Sheet4").Range("C6").Value2

ElseIf Range("D10").Value = "ACT" And (Range("D11").Value = "Mobile" And (Range("D13").Value = "Samsung" And (Range("D14").Value = "S7") And (Range("D15").Value = "Black") And (Range("D16").Value = "256"))))) Then

    Sheets("Sheet2").Range("F21").Value = Sheets("Sheet4").Range("C8").Value2

    Sheets("Sheet2").Range("F22").Value = Sheets("Sheet4").Range("C9").Value2

    Sheets("Sheet2").Range("F29").Value = Sheets("Sheet4").Range("C10").Value2

'и так далее. Со всеми вариациями, вероятно, будет около 20+ утверждений.

End If

Я только вставил 2x разделы для целей этого запроса. Я могу скопировать его или настроить код для каждой опции.

Раньше я не использовал и не записывал массивы (успешно, т. Е.), Поэтому у меня нет ни малейшего понятия / понимания, если это лучший способ, но я уже писал vba для основных функций и макросов; но я открыт, чтобы учиться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...