查找数组中存储的范围值的列号

Posted

技术标签:

【中文标题】查找数组中存储的范围值的列号【英文标题】:Finding column number of a stored range value in an array 【发布时间】:2022-01-23 01:28:49 【问题描述】:

我通过下面的代码将一系列单元格存储在一个数组中:

MyArr()=sheet1.range(x1:y1)

X 和 y 改变。我的数组没问题,效果很好。

通过一个循环我读取数组值,如果假设一个值是“样本”,那么我需要在固定行和“样本”列中找到一个单元格的值。

我找不到存储范围的列号或行号。

当我输入 MyArr (1,n) 时,它会返回值,但当我尝试 MyArr(1,n) 时。列来获取这个值列号它不像一个对象并给出错误。 n 是相关的数组索引号。

当我在数组中存储一个范围时,我如何获取这个存储的范围值的行号或列号?

【问题讨论】:

【参考方案1】:

当您执行MyArr() = MyRange 时,您正在编写Let 语句,该语句将值从表达式分配给变量。 MyRange 访问其默认成员 MyRange.Value。由于它是一个多单元格范围,因此它创建了一个变量值数组,这些值被保存到MyArr

这是一个很长的说法,您不是将范围放入数组中,而是将范围的值放入数组中。因此,一旦您在 MyArr 中获得了值,这些元素就没有像 Range.RowRange.Column 这样的成员,因为它们不是对象,只是值。

如果你想将 Range 保存为一个对象,你可以这样做

    Dim MyRange As Range
    Set MyRange = Sheet1.Range("x1:y1")

如果您需要访问来自 MyRange 的值,您可以执行 MyRange.Cells(1,1).ValueMyRange.Value()(1,1) ,这与您在 MyArr 中的相同。

但由于它保存在范围对象中,因此您可以访问范围对象的所有对象成员。例如,您可以找到行和列 - MyRange.Cells(1,1).RowMyRange.Cells(1,1).Column。或者您可以在同一行中找到其他值,例如 MyRange.Cells(1,1).EntireRow.Cells(5)

【讨论】:

因此,将范围值存储在范围中可以为我们提供与范围成员一样多的范围对象。 范围对象仍然是工作表的成员,您可以通过 Range.Parent 查看。您正在做的是保存对该对象的引用或快捷方式。变量名MyRange 只是一个参考。因此范围和值永远不会离开工作表,但您可以通过 MyRange.Cells(i, j).Value 快速引用它们

以上是关于查找数组中存储的范围值的列号的主要内容,如果未能解决你的问题,请参考以下文章

excle vba,如何查找一个已知值的行号和列号?

二分法查找数字在数组中的索引,确定数字对应的索引

查找和引用函数INDEX

在特定元素上查找排序数组的范围索引

如何从给定数组的范围查询中获取给定值的最小异或值

在numpy数组Python中提取特定范围的列