Member 14613037 Ответов: 2

Как я могу создать массив переменных в VBA в Excel


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

Что я уже пробовал:

Я попробовал что-то вроде этого кода, но, конечно же, он не сработал:

varArray = массив(a,b,c,d,e)
valueArray = массив(10,20,30,40,50)
для i = от 0 до 4
varArray(i) = valueArray(i)
Затем я

И я хотел бы иметь возможность получить доступ к переменной по их именам, например msgbox(c) должен дать мне 30. Есть ли у кого-нибудь решение этой проблемы?
( Пожалуйста, избавьте меня от любых советов, чтобы получить доступ к значениям с помощью обычного типа массива, такого как msgbox(varArray(3)) )
Спасибо.

Dave Kreskowiak

Это невозможно сделать ни в VBA, ни в большинстве языков программирования.

Вам это тоже не нужно. Вам просто нужен один массив, который имеет ваши значения.

Member 14613037

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

Dave Kreskowiak

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

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

2 Ответов

Рейтинг:
12

phil.o

Вы могли бы использовать Словарь VBA[^], с именами переменных в качестве ключей.


Member 14613037

Если я правильно понял ваше предложение, то код должен выглядеть примерно так:

set X = CreateObject("Scripting.Словарь")
varArray = массив("a","b","c","d","e")
valueArray = массив(10,20,30,40,50)
для i = от 0 до 4
X. добавить varArray(i), valueArray(i)
Затем я

Однако это будет хранить ряд пар ("а",10), ("Б",20)... в объекте X, но я не могу получить доступ к отдельным значениям, набрав X. a, чтобы получить значение 10, если вы понимаете, что я имею в виду.
Вместо этого я должен искать данный ключ, чтобы получить значение. Это не лучше, чем 2-мерный массив. У вас есть какие-нибудь предложения?

phil.o

Это именно то, что он может позволить вам сделать. В конце концов, это то, что у вас есть: имена переменных (строки) на одной стороне и их соответствующие значения на другой стороне.
Вы можете получить доступ к значению определенной переменной (например, ключу) таким образом:

myValueA = X.Item("a")
myValueB = X.Item("b")
'' and so on ...

Member 14613037

Большое спасибо, это работает!

phil.o

Всегда пожалуйста!

Рейтинг:
0

Patrice T

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

Насколько я знаю, эта функция не существует в vba.

Это не создает массив со ссылками на переменные
varArray = Array(a,b,c,d,e)

Он создает массив с содержимым этих переменных.

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

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


Member 14613037

Причина в том, что мне нужно обращаться к этим переменным по их именам в программе, а не по уникальному имени+serial#. Конечно, есть и другой способ сделать это, мне просто нужно написать 100 строк кода, чтобы присвоить значения индивидуально каждой переменной.