【问题标题】:Excel - convert column letter to number equivalent vbsExcel - 将列字母转换为数字等效vbs
【发布时间】:2013-03-26 12:41:02
【问题描述】:

我正在编写一个 vbs 脚本来从 Excel 电子表格中提取一些数据。目前正在使用该功能:

objSheet.Cells(rowNum, colNum).Value

要获取单元格值,这允许我对列号进行数学运算,例如添加三个以跨三列移动。但在某些情况下,我想通过字母指定要获取哪些列:

objSheet.Cells(4, E).Value

因此我需要编写一个 vbs 函数来将列字母转换为数字 E => 5。需要能够处理超过 26 列宽的电子表格。

我在互联网上看到了很多功能,SO 用于做相反的事情,但没有找到太多以这种方式进行转换的功能。

谢谢

【问题讨论】:

  • 你说的是vbscript还是VBA?
  • 列函数techonthenet.com/excel/formulas/column.php呢?难道你不能将列(E:E)的vb等价物传递给你的函数吗?
  • 这是在 vbscript 中使用 Excel.Application 对象,其中 objSheet 定义为:objExcel.ActiveWorkbook.Worksheets(1)

标签: excel vbscript


【解决方案1】:

此代码将在没有 Excel 的情况下运行:

Function ColNum(strCol As String) As Integer
    Dim i As Integer, col As Integer

    For i = Len(strCol) To 1 Step -1
        col = col + (Asc(Mid(strCol, i, 1)) - 64) * (26 ^ (i - 1))
    Next
    ColNum = col
End Function

或者,在 Excel 中,您可以简单地使用:

Function ColNum(strCol As String) As Integer
    ColNum = Range(strCol & "1").Column
End Function

【讨论】:

  • 谢谢彼得,我已经编辑了你的答案,包括一个在 vbs 中运行的版本(基本上去掉了打字),供未来的谷歌用户使用,这样问题就得到了肯定的回答。
  • 编辑好像被拒绝了。 :-( 您是否必须在 vbscript 中省略函数的返回类型或代码是否按原样运行?
【解决方案2】:

没有 vba:

要将列号转换为字母,请输入以下公式:

=LEFT(ADDRESS(1,3,4)) (returns the column letter for the cell C1=C)

但这仍然不能令人满意,因为如果您在列 C 之前插入一列,数字 3 不会更改为 4,所以这里是一个修复:

=LEFT(ADDRESS(1,COLUMN(C1),4))

希望这会有所帮助。

例如,当您需要创建指定单元格范围的字符串时,这尤其有用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-11
    • 1970-01-01
    相关资源
    最近更新 更多