2015-10-05 1 views
-1

Как вернуть значение из переменной функции VBA в Defined Name в Excel 2010?Как присвоить переменную Excel VBA определенному имени

В приведенном ниже примере я хочу i быть возвращены в Excel как определенное имя Value_Count, которые могут быть повторно использованы в других формулах, например, что если MsgBox показывает 7, затем ввести =Value_Count в клетке будет также возвращать 7.

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

Function process_control_F(raw_data As Variant) 
Dim i As Integer 
    i = 0 
For Each cell In raw_data 
    i = i + 1 
    Next cell 
MsgBox i 
End Function 

Моя цель состоит в том, что значение, возвращаемое MsgBox возвращается вместо того, чтобы определенное имя, которое может быть повторно использован в других forumulas. Однако я не могу получить значение для показа. Я пробовал различные формы (слишком много, чтобы вспомнить, не говоря уже тип здесь), подобных

Names.Add Name:="Value_Count", RefersTo:=i 

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

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

Я создаю версию статистической контрольной диаграммы. Мой желаемый конечный результат - захватить диапазон данных (как правило, около 336 значений) и применить к ним ряд правил управления (через VBA), а затем вернуть любые значения, которые выходят за пределы параметров управления, на определенные имена, которые затем могут быть начерчены или иначе манипулировать.

Я видел (и имел версии) электронные таблицы, которые достигают этого с помощью цифровых акров вспомогательных столбцов, ведущих к диаграмме и сводной статистике. Я пытаюсь выполнить его в основном на фоне VBA, который будет вызван через Defined Names to Charts - я просто не могу получить значения из VBA в диаграммы.

Интерес к использованию функции, а не к Sub, заключался в упрощении доступа к ней. Я бы предпочел не создавать пользовательский интерфейс (или использовать его), если я могу просто нажимать клавишу в ячейку и напрямую обращаться к результатам. Однако, как отметил Жан-Франсуа Корбетт, это быстро превращается в крутой путь к моей цели. Тем не менее, я все еще думаю, что это стоит того, потому что в долгосрочной перспективе у меня много итераций этого анализа, чтобы выполнить, поэтому некоторое время установки стоит того, чтобы сэкономить время.

+0

Прелесть функции является то, что он возвращает свое собственное значение XD Если вы не хотите, чтобы вернуться в клетку, поэтому использование определенного имени вместо переменной? 'x = process_control_F' будет работать, если вы установите' process_control_F = i' – findwindow

+0

Можете ли вы немного разъяснить, что вы пытаетесь сделать, в целом? С ответом ниже видно, что все еще немного путают. Не могли бы вы объяснить еще большую картину, и, надеюсь, у нас не будет проблемы с «XY» (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem). – BruceWayne

+0

Если вы введете '= Value_Count' в ячейку, как она будет знать, что должен использовать вход' raw_data', чтобы вычислить 'i'?Ваш предложенный подход при переносе функции возвращает значение в определенное имя, для меня нет смысла. Я не могу помочь. Конечно, есть способ достичь своей цели (которая до сих пор не ясна для меня), но, конечно же, это не так. –

ответ

2

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

Function process_control_F(raw_data As Variant) As Integer ' <~~ explicit return type 
    Dim i As Integer 
    Dim cell As Variant ' <~~~~ declare variable "cell" 
    i = 0 
    For Each cell In raw_data 
     i = i + 1 
    Next cell 
    process_control_F = i ' <~~~~ returns the value i 
End Function 

Вы можете использовать эту функцию в формулах. Например:

enter image description here

+0

Спасибо за быстрый ответ. Я уже очистил код на основе того, что вы добавили (я новичок и самоучка с VBA - опасная комбинация). Есть ли у вас какие-либо мысли о том, как управлять значением для определяемого имени? Это настоящий вопрос моей проблемы. Большое спасибо – dav

+2

Зачем вам это нужно? Непонятно, чего вы пытаетесь достичь. Похоже, вы, вероятно, пытаетесь сделать что-то очень надуманно. Пожалуйста, отредактируйте свой вопрос, чтобы точно описать, чего вы пытаетесь достичь с этим. –

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

  • Нет связанных вопросов^_^