PC和Mac之间的Range.Count差异

时间:2013-12-28 17:54:42

标签: excel excel-vba excel-vba-mac vba

我正在从Yahoo Finance下载历史股票价格数据我需要计算下载的数据点数量。数据本身被下载,使得第16行是标题行,从第17行开始的所有内容都是数据。我希望这张表可以在Mac或PC上运行,这就是问题所在。

我用于数据点数的代码是:

Dim Cntr As Long
Cntr = Range(ActiveSheet.Range("A17"), ActiveSheet.Range("A17").End(xlDown)).Count

在Mac上,这会提供正确数量的数据点。但是,在PC上我得到的答案太多了,所以我必须改变这一行:

Cntr = Range(ActiveSheet.Range("A17"), ActiveSheet.Range("A17").End(xlDown)).Count
Cntr = Cntr - 1

如果您使用的是Mac或PC,Range.Count的工作方式会有所不同吗?我想我可以遍历数据并以这种方式计算,但这看起来很浪费。还有其他建议吗?

我正在使用Excel for Mac 2011(OS X Mavericks)和Excel 2010(64位Windows 7 - 通过Boot Camp和Parallels 9)

1 个答案:

答案 0 :(得分:0)

据我所知,MAC和PC在这方面应该没有任何区别。

当我需要返回包含数据的最后一行或列时,我通常会避免使用.End(xlDown)(或变体),因为当隐藏行或列/行具有不连续的数据时,它可能不可靠。

相反,我通常会使用.Find method。当我需要找到数据集中的最后一行时,我使用.Find,如下所示:

Range("A:A").Find("*",SearchDirection:=xlPrevious).Row

或者,找到最后一栏:

Rows("1:1").Find("*",SearchDirection:=xlPrevious).Column

此方法将始终返回最后一行/列,无论它是否隐藏。对于您的应用程序,它看起来像这样:

Cntr = Range(ActiveSheet.Range("A17"), ActiveSheet.Range("A:A").Find _ 
              ("*",SearchDirection:=xlPrevious)).Count

请注意,此方法仅适用于假设您需要找到最后一行数据的数据集下方没有任何其他表或数据集。这种方法确实找到了 last 单元格,其中包含指定行/列中的数据。