- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我知道 Range()
和 Cells()
属性是访问工作表上单元格的等效方法。但是,什么时候在这种组合中使用 Range.Cells()
是明智的呢?
我遇到了一个使用 Range("A1").Resize(2,3).cells.value
的示例。这相当于 Range("A1").Resize(2,3).value
吗?
如果不是,前者的优点是什么?
最佳答案
从技术上讲,Range
和Range.Cells
不等价。有一个很小但很重要的区别。
但是在您的具体情况中,您
Range("something")
构建范围,并且.Value
感兴趣在这个范围内,完全没有区别。
<小时/>VB中有一个方便的子句,For Each
,枚举集合中的所有元素。在 Excel 对象模型中,有一些方便的属性,例如 Columns
, Rows
,或Cells
,返回各个单元格范围的集合:列的集合、行的集合或单元格的集合。
从语言的流动方式来看,您自然会期望 For Each c In SomeRange.Columns
会枚举列,一次一个,并且 For Each r In SomeRange.Rows
会枚举行,一次一行。事实上他们就是这么做的。
但您可以注意到 Columns
属性返回 Range
,以及Rows
属性还返回 Range
。然而,前者Range
会告诉For Each
它是一个“列的集合”,后者 Range
会将自己介绍为“行集合”。
这有效是因为 apparently Range
的每个实例内都有一个隐藏标志类,它决定 Range
的这个实例如何将在 For Each
内表现.
查询Cells
关闭Range
确保您获得 Range
的实例有 For Each
枚举模式设置为“单元格”。如果您不打算For Each
从一开始的范围来看,这种差异对你来说没有什么区别。
即使您确实关心 For Each
模式,在您的特定情况下 Range("A1").Resize(2,3)
和Range("A1").Resize(2,3).Cells
也相同,因为默认情况下 Range
以“cells”的枚举方式构造,Resize
不会更改其调整大小的范围的枚举模式。
所以我能想到的唯一情况是查询 Cells
来自已存在的Range
当你有一个接受 Range
的函数时,就会产生影响。作为参数,你不知道Range
是怎么做的构建后,您想要枚举该范围内的各个单元格,并且您想要确保它是单元格 For Each
将枚举,而不是行或列:
function DoSomething(byval r as range)
dim c as range
'for each c in r ' Wrong - we don't know what we are going to enumerate
for each c in r.cells ' Make sure we enumerate cells and not rows or columns (or cells sometimes)
...
next
end function
关于vba - Range() vs Cells() vs Range.Cells(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51093274/
我创建了以下 sub 来简单地说明问题。我将事件工作表的范围 A2:E10 分配给范围变量。然后,对于另一个范围变量,我将这个范围的子范围,单元格 (1, 1) 分配给 (3, 3)。 我原以为这将包
我使用正则表达式来搜索以下属性返回的纯文本: namespace Microsoft.Office.Interop.Word { public class Range {
我正在开发一个宏来突出显示某些行/单元格以供进一步审查。一些值/空白将以红色突出显示,其他以橙色突出显示,而整行应为黄色。我从上一个问题中得到了一些帮助,并添加了更多细节,它工作得几乎完美,但我被困在
这个问题在这里已经有了答案: What is the difference between range and xrange functions in Python 2.X? (28 个答案) 关闭
我在尝试运行脚本时遇到这个奇怪的错误,代码似乎是正确的,但似乎 python (3) 不喜欢这部分: def function(x): if int
我正在编写一种算法,将一些数据写入提供的输出范围(问题的初始文本包括具体细节,这将评论中的讨论转向了错误的方向)。我希望它在 API 中尽可能接近标准库中的其他范围算法。 我查看了 std::rang
这按预期工作: #include #include int main() { auto chunklist = ranges::views::ints(1, 13) | ranges::vie
我这里有一个字符串,我正在尝试对其进行子字符串化。 let desc = "Hello world. Hello World." var stringRange = 1..' 的值转换为预期的参数类型
我有一个高级搜索功能,可以根据日期和时间查询记录。我想返回日期时间范围内的所有记录,然后从该范围内返回我想将结果缩小到一个小时范围(例如 2012 年 5 月 1 日 - 2012 年 5 月 7 日
Go 中的 range 函数和 range 关键字有什么区别? func main(){ s := []int{10, 20, 30, 40, 50, 60, 70, 80, 90}
如果我有一个范围,如何将其拆分为一系列连续的子范围,其中指定了子范围(存储桶)的数量?如果没有足够的元素,则应省略空桶。 例如: splitRange(1 to 6, 3) == Seq(Range(
我正在开发 VSTO Excel 项目,但在管理 Range 对象时遇到一些问题。 实际上,我需要知道当前选定的范围是否与我存储在列表中的另一个范围重叠。所以基本上,我有 2 个 Range 实例,我
在即将推出的 C++20 系列中,将有 range concept具有以下定义: template concept range = __RangeImpl; // exposition-only de
希望有人能回答我的问题。我在 VHDL 代码中遇到了这个命令,但不确定它到底做了什么。有人可以澄清以下内容吗? if ( element1 = (element1'range => '0')) the
可以将范围嵌套在范围中吗?使用范围内的变量?因为我想取得一些效果。为了说明这个问题,我有以下伪代码: for i in range(str(2**i) for i in range(1,2)):
我想在 2 个日期之间创建一个范围,并且我的范围字段有时间 damage_list = Damage.objects.filter(entry_date__range=(fdate, tdate))
在下面的代码中 #include #include #include int main() { std::unordered_mapm; m["1"]=1; m["2"]=2
我试图为我的电子表格做一个简单的循环,它循环遍历一个范围并检查该行是否为空,如果不是,则循环遍历一系列列并检查它们是否为空,如果是则它设置一个消息。 问题是每次它通过循环 ro.value 和 col
我在将一个工作簿范围中的值分配给当前工作簿中的某个范围时遇到问题。当我使用 Range("A1:C1") 分配我的范围时,此代码工作正常,但是当我使用 Range(Cells(1,1),Cells(1
我改写了原来的问题。 Sub s() Dim r As Range Set r = ActiveSheet.Range("B2:D5") Debug.Print r.Rows.Count
我是一名优秀的程序员,十分优秀!