2014-02-17 5 views
-1

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

Скажем, у меня есть строка из трех чисел, позволяет сказать, что A1: C1 (Тем не менее, данные не в соседних столбцах в реальном наборе данных):

5, 10, 15 

Я хочу, чтобы иметь выпадающий список в конец этой строки (A4), который показывает список функций, которые могут быть использованы для этих чисел (например: SUM, AVERAGE, MAX, MIN) и для этого, чтобы диктовать формулу в A5.

Простым способом сделать это является создание оператора IF и раскрывающегося списка возможностей: например.

= IF($A4 = "average", AVERAGE(A1:A3), IF($A4= "min", MIN(A1:A3), etc.. 

Однако это утомительно, если имеется большое количество вариантов функций. Поэтому мне было интересно, есть ли быстрый способ сделать это?

Может быть что-то вроде

= function(A1:A3) 

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

ответ

1

Интересный вопрос. :)

Смотрите этот пример

Допустим, ваш рабочий лист выглядит следующим образом

enter image description here

Код:

Paste это в модуле

Function GuessFunction(Rng As Range, FuncType As String) As Variant 
    Dim wFn As WorksheetFunction 

    GuessFunction = "Error - Please Check Input" 

    Set wFn = Application.WorksheetFunction 

    Select Case UCase(FuncType) 
     Case "AVERAGE": GuessFunction = wFn.Average(Rng) 
     Case "SUM": GuessFunction = wFn.Sum(Rng) 
     Case "MAX": GuessFunction = wFn.Max(Rng) 
     Case "COUNT": GuessFunction = wFn.Count(Rng) 
     ' 
     '~~> Add More 
     ' 
    End Select 
End Function 

Затем введите формулу =GuessFunction(A1:H1,I1) в ячейку, и все будет сделано.

Выход:

enter image description here


АЛЬТЕРНАТИВА

Другой способ сделать то, что вы это использовать EVALUATE

Function GuessFunction(Rng As Range, FuncType As String) As Variant 
    GuessFunction = "Error - Please Check Input" 
    GuessFunction = Application.Evaluate("=" & FuncType & "(" & Rng.Address & ")") 
End Function 

ПРОФИ:

Вам не нужно указывать отдельный код для каждой формулы, как мы делали это в Select Case выше.

МИНУСЫ:

Вы можете только сделать его работу для формул как SUM/MAX/MIN т.е. типа FORMULA(ADDRESS). Вы не можете использовать его для: VLOOKUP

2

Должны ли вы «изобретать велосипед»? Кажется, все, что было сделано для вас, с Вставка> Таблицы - таблица:

SO21819663 example

+0

Привет, спасибо за ваш ответ. Возможно, мой пример немного упрощен. Данные находятся в горизонтальной плоскости, и достаточно сказать, что невозможно преобразовать их в вертикальные данные. Также данные не находятся в 3 соседних столбцах, но спорадически разнесены, и я изменю вопрос, чтобы отразить это. – SamPassmore

Смежные вопросы