【发布时间】:2020-11-06 05:02:00
【问题描述】:
我需要获取宏范围的列字母。我特别需要列字母,直接使用 VBA Address 函数获得的列数字将不起作用。由于范围始终仅来自一列,因此简化了任务。检索到的范围可能类似于 B3 或 B3:B5,但始终是同一列并且位于表内。
所以,我需要(在这种情况下)得到 B 作为字符串。我尝试执行以下操作:
RangeOfInterest = Worksheets("Sheet1").Range("Table1[Column1]").Address(0, 0)
RangeColumn = Right(RangeOfInterest, Len(RangeOfInterest) - InStr(RangeOfInterest, [0-9]))
但是,我遇到了一系列问题。首先,有InStr 函数。我认为这是最好的方法,因为这个函数从左边开始搜索字符的位置,这正是我所需要的。但是,我需要它来搜索许多值(从 0 到 9 的任何数字)。我可以将所有数字添加为搜索参数还是使用某种技巧在一系列数字之间进行搜索?我试过的肯定不行。
另一方面,我假设如果我设法将所有从 0 到 9 的数字相加,该函数将开始逐个搜索它们,而不是在字符串中第一次出现任何数字时停止?这将导致问题,例如,如果有一个像 B3:B10 这样的范围,它将开始搜索 0 并返回 0 的位置并完成,因此我的代码将返回字符串 B3:B1 而不仅仅是 @987654329 @。
另外,我不能只使用像 Left(RangeOfInterest, 1) 这样的固定解决方案来获得 B,因为代码应该适用于任何范围,一旦你到达 Z,列字母就会变成双倍并且像 AA、AB等等。
我认为另一种选择是循环,但我所有的尝试都导致了非常复杂的代码片段,而这似乎有一个非常简单的解决方案。另外,如果可能的话,我想避免循环,尽管如果没有其他选择也没关系。我非常感谢任何解决此问题的建议。
【问题讨论】:
-
列功能试过了吗?
-
根据上面@Solar Mike 的建议,一旦你有了列号——比如说你叫它
ColNum——那么得到这封信就相对容易了。ColumnLetter = Split(Cells(1, ColNum).Address, "$")(1)