Excel VBA:如何从命名区域创建数组以替代手动定义?
从Excel命名区域生成目标格式数组的解决办法
你之前的代码只拿到单个单元格值,是因为RefersToRange(1,1)只会定位到区域里的第一个单元格。要把$A$5:$A$8这个单列命名区域转换成和手动定义Array("bardzo lekka", "lekka", "średnia", "ciężka")完全一致的一维字符串数组,这里有两种实用方法:
方法1:用Transpose快速转换(最简便)
单列区域转一维数组的经典操作,一行代码就能搞定:
Dim kategoria_a As Variant ' 先获取区域所有值,再转成一维数组 kategoria_a = Application.Transpose(ActiveWorkbook.Names("kategoria_agronomiczna_gleby").RefersToRange.Value)
运行后kategoria_a就是你想要的数组格式,直接就能投入使用。
方法2:手动遍历填充(适合自定义处理)
如果需要对每个单元格值做额外处理(比如过滤空值、转换格式),可以用循环遍历的方式,灵活性更高:
Dim targetRange As Range Dim kategoria_a() As String Dim rowIndex As Integer ' 先获取命名区域对应的Range对象 Set targetRange = ActiveWorkbook.Names("kategoria_agronomiczna_gleby").RefersToRange ' 根据区域行数初始化数组大小 ReDim kategoria_a(1 To targetRange.Rows.Count) ' 逐行填充数组 For rowIndex = 1 To targetRange.Rows.Count kategoria_a(rowIndex) = targetRange.Cells(rowIndex, 1).Value ' 这里可以加自定义逻辑,比如: ' If targetRange.Cells(rowIndex,1).Value <> "" Then ... Next rowIndex
小提示
- 如果你的命名区域是多行多列的,需要两次
Transpose才能转成一维数组:kategoria_a = Application.Transpose(Application.Transpose(targetRange.Value)) - 确认命名区域
kategoria_agronomiczna_gleby的引用是正确的,避免因区域引用错误导致运行时问题。
内容的提问来源于stack exchange,提问作者Filip Frątczak
相关产品推荐
相关产品推荐

