现在我正在使用以下代码将股票代码列表从小写字母转换为大写字母:
Dim Tickers As String
Dim n As Integer
For n = 2 To Last
Tickers = UCase(W.Cells(n, 1).Value)
W.Cells(n, 1).Value = Tickers
Next n
有没有一种方法可以用来在一行中转换整个范围?就像是:
Range("A1:A20").convertouppercasesomehow
有没有一种方法可以用来在一行中转换整个范围?
是的,您可以在不循环的情况下进行转换。尝试这个
Sub Sample()
[A1:A20] = [INDEX(UPPER(A1:A20),)]
End Sub
或者,使用可变范围,尝试以下操作:
Sub Sample()
Dim rng As Range
Set rng = Range("A1:A20")
rng = Evaluate("index(upper(" & rng.Address & "),)")
End Sub
按照你的例子
W.Range("A1:A20") = [index(upper(A1:A20),)]
解释
有两个部分[A1:A20] = [INDEX(UPPER(A1:A20),)]
PART 1
如上图所示,[A1:A20]
只不过是一种简短的写法Range("A1:A20")
PART 2
[INDEX(UPPER(A1:A20),)]
Index
and Upper
是工作表函数。所以你可以使用Application.Worksheetfunction.Index()
但因为我们没有等价的UPPER
like Application.Worksheetfunction.UPPER()
,我们只能写成[cell] = [UPPER(cell)]
现在我们用这条线来指导VBA
返回一个数组,这就是INDEX
发挥作用。 (据我们所知,有两种形式INDEX
功能:数组形式和引用形式。)通过不指定数组的行或列,我们只是让 Excel 知道我们需要整个数组。 (VBA帮助中也提到了)所以基本上我们正在做的是将每个单元格转换为[A1:A20]
变成大写
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)