EXCEL VBA 里面如何动态获取字符串转换为变量名?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了EXCEL VBA 里面如何动态获取字符串转换为变量名?相关的知识,希望对你有一定的参考价值。
我有变量 st1 = "wew " st2="were" st3="erwer"........................st53="erere" 共计53个变量
让后想通过 一个for 循环来完成以下工作(清空每一个变量值)
for x=1 to 53
"st"& x=""
next
谢谢了!!
1、英文名字 Dictionary
2、存在于 Scrrun.dll 文件中
3、需将文件注册到系统中
4、需引用文件的声明方法
4.1、Dim D As Scripting.Dictionary (使用时还需用代码创建)
4.2、Dim D As New Scripting.Dictionary(对象实例化声明,声明后可直接使用)
4.3、声明时 Scripting 可省略
5、创建法
5.1、Set D=CreateObject("Scripting.Dictionary")
5.2、Scripting 为 scrrun 文件的工程名称
5.3、Dictionary 为 Scripting 工程中的一个类模块(功能模块)
6、字典中的两项(条目)
6.1、Key(Variant类型),在字典中不重复(必需的)
若key是对象则允许有重复
6.2、Item(Variant类型),key所对应的“备注”信息(必需的)
6.3、演示代码在字典中新建一条key及对应item都为“”的数据
D.Add "",""
两个“”,缺一不可
若继续再次使用此代码创建将报错误
7、它有4个属性,6个方法
属性:CompareMode ,Count ,Item ,Key
方法:Add ,Exists,Items ,Keys,Remove ,RemoveAll
B字典6方法
1、Add 方法
用法 Object.Add(Key,Item)
向 Dictionary 对象中添加关键字项目对
Object 必需的,总是一个Dictionary对象、1.1
Item 必需的,与被添加的 Key 相关联的 Item、1.2
Key 必需的,与被添加的 Item 相关联的 Key、1.3
若添加的key已经存在,则导致一个错误、1.4
示例代码
D.Add "A" , "Athens"
D.Add "a" , "Activate"
CompareMode 属性(缺省)默认设置为区分大小写,因此不会报错。若设置为不区分大小写,则此句报错
D.Add "A" , "Athens"
此句报错误,因关键字key值 “A”,在这之前已经添加
D.Add Range("A1") , "Abs"
在 A1 单元格中随意输入 A 或 a
因省略了.value 在字典中添加关键字时将单元格A1视为对象添加到字典(对象可以重复添加)
若添加上.value 则会报错,因为 A 或 a 在之前已经创建
2、Exists 方法
用法 Object.Exists(key)
如果 Dictionary 对象中存在所指定的关键字,则返回True,否则返回False
Object 必需的,总是一个Dictionary对象、2.1
key 必需的,需要在 Dictionary 中搜索的 Key值、2.2
示例代码
Debug.Print D.Exists("A")
返回True,因之前已经添加,因此该关键字 “A” 在字典中存在
Debug.Print D.Exists("E")
返回False,因之前代码中未添加,因此该关键字 “E”在字典中不存在
Debug.Pring D.Exists("a")
将根据 CompareMode 属性中设置的值来返回
3、Keys
用法 Object.Keys()
返回一个 Variant 类型的一维数组,其中包含了一个 Dictionary 对象中现有的全部 关键字
3.1、Object 必需的,总是一个 Dictionary 对象
3.2、如果字典中未添加关键字,则返回一个(0 to -1)的一维数组
示例代码
Arr=D.Keys
运行此代码前,请不要往字典中添加任何关键字
Arr=D.keys
自行使用 Add 往字典中添加少许数据进行测试
Arr=D.Keys()
将字典中的 关键字 交给数组 Arr
Range("A1").Resize(,Ubound(Arr)+1).Value=Arr
将Arr中的值写到单元格中,写到一行里
Range("A3").Resize(Ubound(Arr)+1).Value=WorksheetFunction.Transpose(Arr)
将Arr中的值写到一列中,需要进行转置
4、Items
用法与 Keys 相同,这里不在做重复的描述
示例代码中将 Keys 改为 Items 即可
5、Remove
用法 Object.Remove(Key)
从一个 Dictionary 对象中清除 关键字项目对
5.1、Object 必需的,总是一个 Dictionary 对象
5.2、Key 必需的,要从 Dictionary 中删除的 关键字 项目对相关联
5.3、如果 所指定的 关键字 不存在,将返回一个错误
示例代码
D.Remove("A")
从字典中删除关键字是 A 的项目对
D.Remove("E")
要删除的关键字 E 在字典中不存在,因此报错误
6、RemoveAll
用法 Object.RemoveAll()
从一个 Dictionary 对象中清除所有关键字项目对
6.1、Object 必需的,总是一个 Dictionary 对象
示例代码
D.RemoveAll
清除字典 D 中所有的数据,又成了一个新字典了
C字典4属性
1、CompareMode 属性
用法 Object.CompareMode[=Compare]
设置或者返回在 Dictionary 对象中进行字符串关键字比较时所使用的 比较模式。
Object 必需的,总是一个Dictionary 对象的名称
Compare 可选项,如果提供此项,Compare 就是一个代表比较模式的值。
如果试图对已经包含数据的 Dictionary 对象的比较模式进行更改的话,就会出错
缺省为 二进制比较格式
CompareMethod 枚举说明
1.1、UseCompareOption
其值为 -1 使用 Option Compare 语句设置值进行比较(Excel中无效)
1.2、BinaryCompare
其值为 0 ,二进制比较模式
1.3、TextCompare
其值为 1 ,文本比较模式
1.4、DatabaseCompare
其值为 2 ,仅用于 MicrosoftAccess,进行基于你自己数据库中信息的比较
1.5若未引用 scrrun.dll 文件,在使用枚举时需在前面添加上vb
在VBA中为我们提供了 VbCompareMethod 枚举,其值都是一样的
即使引用了文件,也可使用 vbTextCompare
如:vbTextCompare
在 Add方法中已经有示例了,这里不在做示例
2、Count 属性
用法 Object。Count
返回集合或 Dictionary 对象中条目数。只读
Object 必需的,总是一个 Dictionary 对象
示例代码
DeBug.Print D.Count
返回 0 ,说明字典中还没有条目
D.add "A","abs"
往字典中添加条目
DeBug.Print D.Count
刚才建了个,所以返回1
D.Add "V","Vlookup"
往字典中添加条目
DeBug.Print D.Count
刚才又建了一个,返回返回 2
3、Key 属性
用法 Object.Key(Key)=NewKey
3.1、在 Dictionary 对象中修改一个Key
3.2、Object 必需的,总是一个 Dictionary 对象的名称
3.3、Key 必需的,被改变的 Key 值
3.4、NewKey 必需的,替换所指定的 Key的新值。
3.5、如果在改变一个Key时没发现该 Key ,将会报错。
示例代码
d.add "A","Abs"
d.key("A")="B"
此时原字典中的关键字 A 被更改为 B
d.key("A")="B"
再次运行此代码,因关键字 A已不存在,报错误。
通俗的理解是,修改 key
4、Item 属性
用法 Object.Item(Key)[=NewItem]
4.1、Item为Dictionary的缺省(默认)属性,因此在使用时可以 d(key)=""
4.2、在一个 Dictionary 对象中设置或返回所指定 key 的 Item。对于集合则根据所指定的key返回一个 item。读/写
4.3、Object 必需的,总是一个 Dictionary 对象的名字
4.4、Key 必需的,与被查找或添加的 item 相关联的 key
4.5、NweItem 可选项,仅适用于 Dictionary 对象,就是与所指定的 Key 相关联的新值
4.6、如果在改变一个 key 的Item时候没有该 key ,那么将利用所指定的 NewItem 创建一个新的 Key
4.7、如果在试图返回一个已有项目的时候没有找到 Key ,那么将创建一个新的 Key 且其相关的项目被设置为空
示例代码
D.Add "A","Abs"
在字典中添加一个关键字 A,它对应的 item是 “Abs”
D.Item("A")="And" 等同于 D("A")="And"
将字典中关键字为 A 的Item修改为 “And”
D.item("E")="Excel"
试图修改关键字 E 的item为 Excel,因在字典中并没有该关键字的存在,此句起了 add 的作用
Debug.Print D.Item("B")
返回字典中关键字为 B 的Item,因字典中并没有添加这个关键字,因此会将该关键字添加到字典中其对应的 Item 为 ""
根据它的特性,理解为修改指定key的Item,若没有该 key 则根据表达式新建一个,其对应的 Item 将受表达式影响。 参考技术A
A.最好的方式是别用这种方式赋值,为什么不用St(1 to 53)这样的数组进行赋值?方便、简单。
B。可以用CallByName取值,以及赋值,取值操作:
将变量定义成Public类型
取值可以用CallByName,
For x=1 To 53
Debug.Print CallByName(Me, "st" & x, VbGet)
Next x
赋值操作:
同样要将变量定义成Public
For x=1 To 53
CallByName Me, "st" & x, VbLet, ""
Next x
可以msgbox st1 试试是否更改了值
参考技术B 变量存放在什么地方?某个单元格区域,还是输入53个变量?先定义数组变量arr,然后for x = 0 to UBound(arr)-LBound(arr)就可以逐个循环了。
arr(x)=""
数组默认从0开始 参考技术C 不行,但是可以用字典过渡
dim dic as object
set dic=createobject("scripting.dictionary")
for x=1 to 53
dic("st" & x)=""
next
调用的时候
比如你想知道st5
msgbox dic("st5")本回答被提问者采纳 参考技术D 你可以用数组
Excel VBA里面怎样把数字转换成字符串
假如数字在A1单元格,公式如下:
=""&A1
参考技术A Excel VBA编程会用到很多字符串的处理,如字符串的提取,查找字符串,字符串的转换,字符串比较等,本部分将对字符串的处理函数进行总结系统讲解,通过本章,你可以学习到一般常用的VBA编程字符串处理函数及其用法。字符串提取函数
Mid函数可以从字符串中提取任何指定的子字符串,返回包含字符串中指定数量的字符的字符串。其语法为:
Mid(String,Start[,Len])
其中,如果参数String包含Null,则返回Null;如果参数Start超过了String的字符数,则返回零长度字符串(“”);如果参数Len省略或超过了文本的字符数,则返回字符串从Start到最后的所有字符。
Left函数可以从字符串的左边开始提取字符或指定长度的字符串,即返回包含字符串中从左边算起指定数量的字符。其语法为:
Left(String,CharNum)
其中,如果参数String包含Null,则返回Null;如果参数CharNum的值大于或等于String的字符数,则返回整个字符串
与Left函数不同的是,Right函数从字符串的右边开始提取字符或指定长度的字符串,即返回包含字符串中从右边起指定数量的字符。其语法为:
Right(String,CharNum)
字符串查找函数
可使用InStr函数返回一字符串在另一字符串中的位置,因此,也可以使用该函数确定一个字符串中是否包含有另一个字符串。其语法为:
InStr([Start,]string1,string2[,compare])
其中,参数Start为可选参数,设置查找的起点,如果省略,则从第一个字符的位置开始查找,当指定了参数Compare时,则要指定此参数。参数string1为被查找的字符串,参数string2为要查找的字符串,这两个参数都是必需的。
如果在String1中没有找到String2,返回0;如果找到String2,则返回String2第一个出现的首字符位置(即1到String1的长度);如果String2的长度为零,返回Start。
也可以使用InStrRev函数返回一个字符串在另一个字符串中出现的位置,与InStr函数不同的是此函数从字符串末尾开始查找,此处要注意,虽是从后往前查找,但是返回的值还是从前往后算的。。其语法为:
InStrRev(String1,String2[,[Start[,compare])
参数String1为被查找的字符串,参数String2为要查找的字符串,这两个参数都是必需的。参数Start为可选参数,设置每次查找开始的位置,若忽略则使用-1,表示从上一个字符位置开始查找。参数Compare为可选参数,表示所使用的比较方法,如果忽略则执行二进制比较。 参考技术B VBA 里面转换成 字符串 之后要做什么哪?
format、str cstr 这些函数 都可以转换
另外 通过 把一个数字 赋值给一个 String类型的变量 也可以自动转换成字符串格式……本回答被提问者和网友采纳
以上是关于EXCEL VBA 里面如何动态获取字符串转换为变量名?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Excel/VBA 中获取 RGB 颜色的相应十六进制值?
Excel里面的VBA,小小的剪切板问题,急!急!急!急急急!!!!