Создайте проверенный список из отдельной ячейки, разделенной запятыми, полученной в результате операции 2D Index-Match - PullRequest
0 голосов
/ 21 сентября 2018

* Прочитайте для получения дополнительной информации *
У меня есть набор данных 3D.Третье измерение этого набора данных зависит от внешнего целочисленного значения.Для простоты использования и для того, чтобы сделать задачу достижимой, насколько мне известно, я создал 2D-таблицу, которая содержит разделенные запятыми ячейки, представляющие третье измерение.Основной проблемой является внешнее целое число, которое активно изменяет 2D-таблицу.

* Основной вопрос *
Мне нужно создать проверенный список, раскрывающуюся ячейку из списка с разделителями-запятыминаходится в одной ячейке на отдельном листе в той же книге.Список с разделителями-запятыми создается из функции 2D INDEX-MATCH.Я пытаюсь выполнить это через функцию VBA, чтобы легко выбрать входы и вызвать подпрограмму для создания проверенного списка.(Если подпрограмма не нужна; игнорировать)

2D Таблица
2D Table

Выходные ячейки
Output Cells* Пока игнорируем DCTG, это будет тот же процесс, но для другого набора трехмерных данных.

Я хотел бы получить функцию (InputCell, OutputCell).InputCell зависит от трех других ранее выбранных точек данных (вне целого числа, на которое ссылается фон, и x и y таблицы), и его текущий код равен

=INDEX(Rmag_For_Casting_Material,MATCH(Updated!E7,RMAG_Casting_Method,0),MATCH(Updated!E6,RMAG_Material_Class,0))

, который при передаче инструменту проверки списка данных создаетодин список опций "A, B, C, D", а не список опций "A", "B", "C", ...

* Текущие исследования *

Private Sub Workbook_Open()
   AddCSVListValidation "Task", "A1", "A2"
End Sub

Sub AddCSVListValidation(sheet, cellSource, cellTarget)
    txt = ActiveWorkbook.Worksheets(sheet).Range(cellSource).Value
    ActiveWorkbook.Worksheets(sheet).Range(cellTarget) = "Select your values here"
    With ActiveWorkbook.Worksheets(sheet).Range(cellTarget).Validation
        .Delete
        .Add Type:=xlValidateList, Formula1:="a,b,c"
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = ""
        .InputMessage = ""
        .ErrorMessage = ""
        .ShowInput = True
        .ShowError = True
    End With
End Sub

Я полагаю, что это создает подпрограмму, которая создаст проверенный список, но потребует нескольких копий каждый раз, когда я создаю новый проверенный список в другой ячейке.Или я мог бы заменить «Задание», «А1», «А2» и повторно запустить подпрограмму?У меня возникли проблемы даже с запуском подпрограммы.Нужно ли это имя листа «Задача»?

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

1 Ответ

0 голосов
/ 01 ноября 2018

Вот мои предложения

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

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

Найдите ниже код VBA, чтобы сделать это

Sub makeNamedRange()

    sheet_name = "Sheet1"

    input_text = Sheets(sheet_name).Range("B1").Value
    arr_text = Split(input_text, ",")

    i = 1
    For Each elm In arr_text
        Sheets(sheet_name).Range("C" & i).Value = elm
        i = i + 1
    Next

    ActiveWorkbook.Names.Add Name:="data_validation_list", RefersTo:="=" & sheet_name & "!$C$1:$C$" & i - 1

End Sub

Примечания

  1. Код принимает разделенный запятыми текст из B1
  2. и извлекая его значения из C1 в C (n)
  3. Вы можете изменить это на своем листе
  4. Вы можете вызвать эту функцию при открытии листа или любом другом событии в соответствии с вашими требованиями для обновления спискас новыми данными.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...