Arrays 单元验证和阵列
两个问题,首先你能提醒我在分配多维数组时如何处理它吗?我总是用for循环来完成它,如何静态地完成它似乎让我无法理解 但我真正想做的是使用数组来验证单元格内容。然而,在下面的例子中,我只想使用第二维度中的第一个元素 ieArrays 单元验证和阵列,arrays,validation,vba,elements,Arrays,Validation,Vba,Elements,两个问题,首先你能提醒我在分配多维数组时如何处理它吗?我总是用for循环来完成它,如何静态地完成它似乎让我无法理解 但我真正想做的是使用数组来验证单元格内容。然而,在下面的例子中,我只想使用第二维度中的第一个元素 ie 0,0 1,0 2,0 3,0 4,0 有没有办法更新.Add Type:=xlValidateList,Formula1:=Join(ary,“,”)行,使其仅从5×4数组返回这5个值 奶酪 亚伦 将二维阵列调整为一维的速度很快 下面的代码用示例数据填充5*4数组,然后第二个循
0,0
1,0
2,0
3,0
4,0 有没有办法更新.Add Type:=xlValidateList,Formula1:=Join(ary,“,”)行,使其仅从5×4数组返回这5个值 奶酪 亚伦
将二维阵列调整为一维的速度很快 下面的代码用示例数据填充5*4数组,然后第二个循环只提取第一个维度到一个与初始数组行长度相同的新1D数组
Sub test()
Dim ary As Variant
Dim X As Variant
Dim lngRow As Long
Dim lngCol As Long
ReDim ary(1 To 5, 1 To 4)
ReDim X(1 To UBound(ary, 1))
For lngRow = 1 To UBound(ary, 1)
For lngCol = 1 To UBound(ary, 2)
ary(lngRow, lngCol) = "I am row " & lngRow & " and dimension " & lngCol
Next
Next
For lngRow = 1 To UBound(ary, 1)
X(lngRow) = ary(lngRow, 1)
Next
With ActiveSheet.Cells(1, 1).Validation
.Delete
.Add Type:=xlValidateList, Formula1:=Join(X, ",")
.IgnoreBlank = False
.InCellDropdown = True
.ShowInput = True
.ShowError = True
End With
End Sub
为什么这里需要多维数组?如果您实际上是从一个区域填充它,那么您可以给该区域一个名称,然后在验证中使用该名称。该数组以以下格式保存数据:0,0=描述,0,1=开始位置,0,2=结束位置。我只想在描述上验证单元格。actulay数组在运行时填充。它的尺寸是x乘以3。我知道我可以将描述提取到一个单独的数组中,但这似乎是不可能的。因为我说过提取到1d数组没有问题,我想知道我是否可以在不采取这一步骤的情况下实现上述目标。我不相信,我从未见过2D到1d方法的捷径。也就是说,循环数组在时间上非常有效,即使感觉编码效率很低。我认为我上面的方法可能有一些用处,这取决于你现有的风格,如果不是的话,可以忽略它。干杯。我将向您的专业知识鞠躬,我非常震惊地看到您无法简单地从数组中提取单个行/冒号的值。将所有尺寸从一个位置锁定。我想这是你在网络中经常做的事情,应用遮罩来限制什么可以改变,什么不能改变。在多维度数组上使用UBound对代码有很大帮助。因为这是我需要使用的东西:)谢谢你的帮助和评论。
Sub test()
Dim ary As Variant
Dim X As Variant
Dim lngRow As Long
Dim lngCol As Long
ReDim ary(1 To 5, 1 To 4)
ReDim X(1 To UBound(ary, 1))
For lngRow = 1 To UBound(ary, 1)
For lngCol = 1 To UBound(ary, 2)
ary(lngRow, lngCol) = "I am row " & lngRow & " and dimension " & lngCol
Next
Next
For lngRow = 1 To UBound(ary, 1)
X(lngRow) = ary(lngRow, 1)
Next
With ActiveSheet.Cells(1, 1).Validation
.Delete
.Add Type:=xlValidateList, Formula1:=Join(X, ",")
.IgnoreBlank = False
.InCellDropdown = True
.ShowInput = True
.ShowError = True
End With
End Sub