精华内容
下载资源
问答
  • VBA列数字与字母互换

    千次阅读 2018-01-31 12:33:24
    vba列数字与字母互换: 方案一:速度:快 Function NumToStr(ByVal Num As Long) As String '数字转字母  Dim M As Long  If Num  Do  M = Num Mod 26  If M = 0 Then M = 26  NumToStr
    <内容来至Excelhome>
    


    vba列数字与字母互换:


    方案一:速度:快


    Function NumToStr(ByVal Num As Long) As String   '数字转字母
        Dim M As Long
        If Num < 1 Then Exit Function
        Do
            M = Num Mod 26
            If M = 0 Then M = 26
            NumToStr = Chr(64 + M) & NumToStr
            Num = (Num - M) / 26
        Loop Until Num <= 0
    End Function




    Function StrToNum(ByVal Str As String) As Long '字母转数字
        Dim s As String, S1 As String
        If Str = "" Then Exit Function
        Str = UCase(Str)
        s = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
        For i = 1 To Len(Str)
            S1 = Mid(Str, i, 1)
            If InStr(s, S1) = 0 Then Crazy_Num = -1: Exit Function
            StrToNum = StrToNum + InStr(s, S1) * 26 ^ (Len(Str) - i)
        Next
    End Function
    方案二:迭代 速度:略快 


    Function colinf(t) '列标签字母⇔列序号数值 相互转换
        If t = "" Then colinf = "": Exit Function '如果引用単元格=空白 即返回空白退出
        If IsNumeric(t) Then '如果引用単元格=数值(列序号),計算返回列标签大写英文字母
            If t < 1 Then colinf = "": Exit Function '如果数是0或負数返回空白退出
            Do
                colinf = Chr((t - 1) Mod 26 + 65) & colinf '以26除数反複Mod求余得到1-26字母
                t = Int((t - 1) / 26) '求余后再用26除后Int取整……
            Loop Until t <= 0 '反複迭代计算直至数t已不能除26求余止
        Else '如果引用単元格=文本字符,計算返回序号数値
            t = UCase(t) '首先文本転換大写字母
            For i = 1 To Len(t) '遍各字符
                colinf = colinf + (Asc(Mid(t, i, 1)) - 64) * 26 ^ (Len(t) - i) '按26冪乗計算累計数
            Next
        End If
    End Function




    方案三:递归 速度:略快 


    Function getColStr$(n) '列序号数字→列标签字母
        Dim s$, t as long
        t = n
        Do
            s = Chr((t - 1) Mod 26 + 65) & s
            t = Int((t - 1) / 26)
        Loop Until t <= 0
        getColStr = s
    End Function


    方案四:


    Function getC_Str(n) '列序号数字→列标签字母


        getC_Str = Split(Cells(1, n).Address, "$")(1)


    End Function


    ------------------以下为测试3种方案全码-----------------
    Sub test()
        dqT = Timer
        M = 1000: n = 10000
        Dim strTmp


        For i = 1 To M
            For j = 1 To n
                strTmp = getC_Str(n)
            Next j
        Next i


        dqT1 = Timer
        For i = 1 To M
            For j = 1 To n
                strTmp = getColStr(j)
            Next j
        Next i
        dqT2 = Timer


        For i = 1 To M
            For j = 1 To n
                strTmp = NumToStr(n)
            Next j
        Next i


        MsgBox " getC_Str  用时:" & Format(Timer - dqT1, "0.0000") & vbLf & "getColStr 用时:" & Format(dqT2 - dqT1, "0.0000") & vbLf & "NumToStr用时:" & Format(Timer - dqT2, "0.0000")
    End Sub


    Function getColStr$(n) '列序号数字→列标签字母
         Dim s$, t as long
        t = n
        Do
            s = Chr((t - 1) Mod 26 + 65) & s
            t = Int((t - 1) / 26)
        Loop Until t <= 0
        getColStr = s
    End Function


    Function NumToStr(ByVal Num As Long) As String   '数字转字母
        Dim M As Long
        If Num < 1 Then Exit Function
        Do
            M = Num Mod 26
            If M = 0 Then M = 26
            NumToStr = Chr(64 + M) & NumToStr
            Num = (Num - M) / 26
        Loop Until Num <= 0
    End Function


    Function getC_Str(n) '列序号数字→列标签字母


        getC_Str = Split(Cells(1, n).Address, "$")(1)


    End Function
    展开全文
  • vba_获取使用行数和列数,vba_获取使用行数和列数,vba_获取使用行数和列数
  • '列数转字母 Function CNtoW(ByVal num As Long) As String CNtoW = Replace(Cells(1, num).Address(False, False), "1", "") End Function '字母转列数 Function CWtoN(ByVal AB As String) As Long ...

    gold_star

    1. 方法一:
    '列数转字母
    Function CNtoW(ByVal num As Long) As String
        CNtoW = Replace(Cells(1, num).Address(False, False), "1", "")
    End Function
    '字母转列数
    Function CWtoN(ByVal AB As String) As Long
        CWtoN = Range("a1:" & AB & "1").Cells.Count
    End Function
    1. 方法二:
    Function GetColumn(char)
        Dim t
        On Error Resume Next
        If IsNumeric(char) Then
            t = Split(Cells(1, char).Address, "$")(1)
        Else
            t = Columns(char & ":" & char).Column
        End If
        If Err.Number <> 0 Then GetColumn = "超出范围" Else GetColumn = t
    End Function

     

    3,方法三:


    不过就功能、目的来说,确实意义不大。

    因为既然用到了VBA,就可以后台使用多种方法处理列数,没必要再写一个函数来用。

    比如, cells(n,"AB") 或者 Range("AB" & n) 就可以直接定位到指定列标所在列。

    或者用 cells(n,28).Address 来获取列标字母。

    如同楼上各位的例子那样。
    而如果需要自己计算把列序号转换为字母标签,则可以用下面迭代计算:

    假设t为列序号,那么:

          s = ""
          Do
              s = Chr((t - 1) Mod 26 + 65) & s       '以26除数反複Mod求余得到对应1-26字母
           t = Int((t - 1) / 26)                         '再用26除后Int取整进行迭代计算
        Loop Until t <= 0                                 '反複算直至数t已不能除26求余止
    +++++++
    Function f(t)
        Do
            f = Chr((t - 1) Mod 26 + 65) & f
            t = Int((t - 1) / 26)
        Loop Until t = 0
    End Function
    +++++++
    或者写成:
    +++++++
    Function f(t)
        Do
            f = Chr((t - 1) Mod 26 + 65) & f
            t = (t - 1) \ 26
        Loop While t
    End Function
    +++++++

     

    (本文主要内容归纳自网上文章:EXCEL列标数字与字母的转换)

    展开全文
  • VBA取得EXCEL表格中的行数和列数

    千次阅读 2019-07-25 15:50:41
    VBA取得EXCEL表格中的行数和列数 请注意不要使用Columus等关键字作为变量,例如"Columus = ActiveSheet.UsedRange.Columns.Count"! 初学EXCEL宏的童鞋,总是很想知道表格中含有数据的行数和列数,尤其是行数和列数...

    VBA取得EXCEL表格中的行数和列数

    请注意不要使用Columus等关键字作为变量,例如"Columus = ActiveSheet.UsedRange.Columns.Count"!

    初学EXCEL宏的童鞋,总是很想知道表格中含有数据的行数和列数,尤其是行数和列数不确定的情况下。这样可以避免很多的错误,并且可以提高效率。但每次用到的时候到网上查找时,总是给了很多无用的答案,往往找不到想要的结果。笔者也是每次使用时,临时查找总是很头疼。偶然发现一篇博客,上面详细记录了不同的方法,笔者测试了几种发现真的很好用。本着分享万岁的精神,将博客内容共享出来。希望对大家有所帮助。

    来源:http://www.okexcel.com.cn/bbs/viewthread.php?tid=26

    注:每种方法中上面的是Excel的行数,下面的是Excel的列数。

    方法1:

    ActiveSheet.UsedRange.Rows.Count

    ActiveSheet.UsedRange.Columns.Count

    缺点:有时可能会比实际数大一些,原因是如果你把最后几行(列)数据清除后(非整行或整列删除),用这个命令仍返回未清除前的值。就是说现在虽然是空的,但是你曾经用过也算你的。

    方法2:

    ActiveSheet.Range(“A65535”).End(xlUp).Row

    ActiveSheet.Range(“IV1”).End(xlToLeft).Column

    可以简写为:

    ActiveSheet.[A65536].End(xlUp).Row

    ActiveSheet.[IV1].End(xlToLeft).Column

    缺点:只能计算出一列(行)的最后一个单元格所在的行(列)数。本例是只返回A列最后一个单元格所占的行数。

    方法3:

    ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row

    ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Column

    缺点:在工作表进行对删除或清除操作时也会变得比实际情况大。

    方法4:

    ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row

    ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Column

    缺点:在工作表进行对删除或清除操作时也会变得比实际情况大。

    方法5:

    Application.CountA(ActiveSheet.Range(“A:A”))

    Application.CountA(ActiveSheet.Range(“1:1”))

    只能统计一列(行)的实际使用情况,得到的不一定是最后一行(列)的位置。方法2的数值比此方法大时,说明在A列的数据间有空白未填写的单元格。

    方法6:

    ActiveSheet.Cells.Find(What:="*", After:=[A1], SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row

    ActiveSheet.Cells.Find(What:="*", After:=[A1], SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column

    效果同方法2

    以上方法中比较常用的是方法1和方法2。
    在这里插入图片描述

    展开全文
  • excel VBA获取EXCEL中的行数和列数.
  • '获取总列数 MsgBox ActiveSheet.Range("IV1").End(xlToLeft).Column '获取单元格列号 MsgBox Range("AE1").Column '求和 Cells(2189, 33).Formula = Application.Sum(Range(Cells(901, 33), Cells(902, 33)...
    Sub get()
       '获取总行数
       total_row = Range("a65536").End(xlUp).Row
       total_row = ActiveSheet.UsedRange.Rows.Count
       
        '获取总列数
        MsgBox ActiveSheet.Range("IV1").End(xlToLeft).Column
        
        '获取单元格列号
        MsgBox Range("AE1").Column
    	'求和
    	Cells(2189, 33).Formula = Application.Sum(Range(Cells(901, 33), Cells(902, 33)))
    
    	'另一种求和方式
    	Range("A1").Formula ="=Sum(A2:B3)"
      
    End Sub
    

    在这里插入图片描述

    参考

    https://zhuanlan.zhihu.com/p/341838473


    https://stackoverflow.com/questions/10106465/excel-column-number-from-column-name/10107264

    展开全文
  • VBA 号转列名

    2019-07-11 17:33:47
    前段时间做的一个项目(Vista print)中需要将...总不能就这么下去吧。 最后写了个Funtion解决这一问题。代码如下: Public Function NumToChr(PureNum As Integer) As String If PureNum Mod 26 = 0 Then ...
  • VBA中将数字转换成字母的方法

    千次阅读 2016-03-06 12:51:32
    传入参数为Excel中的序号。例如:传入1返回A,传入2返回B。 Public Function Fun_GetEngName(ByVal argColumn As Integer) As String Dim strEngName As String Dim iNum, iMod As Integer iNum = argColumn \ ...
  • 如Columns(27).Address表示27的地址,也就是"$AA:$AA" 2.使用split函数 按照字符"$"进行拆分得到数组,索引为2的就是我们需要的字母 Function ColLetter(Num As Long) As String ColLetter = Split(Columns...
  • '号转字母(列名) Function Num2Name(ByVal ColumnNum As Long) As String On Error Resume Next Num2Name = "" '超出范围返回空,如调用Num2Name(100000) Num2Name = Replace(Cells(1, ColumnNum)....
  • 展开全部Sub ()a = Columns("C:H").Count 'c:h的长度b = Cells(1, Columns.Count).Address '的最大值c = Cells(1, Columns.Count).End(xlToLeft).Column '有效(包含32313133353236313431303231363533e59b9ee...
  • excel vba Excel VBA:将标题切换为数字 (Excel VBA: Switch Column Headings to Numbers) It's Friday, and your brain is almost full, but let's try to cram a little bit of Excel VBA in there before ...
  • VBA 获取最大行数和最大列数

    万次阅读 2020-01-12 09:19:29
    在EXCEL中,对数据进行定位操作,必然要用到...columnmax = Range("IV1").End(xlToLeft).Column '取得1行的最大列数 columnmax =cells(i,columns.count).end(xltoletf).column 'i行的最大列数 rowmax = Sheet1.Range(...
  • range(“a1:c5”), 如果用x 和 y 这2个变量替代c5,... x) 这样的,接触vba以来,n次被类似的地址引用问题难住了。 解析: x=“c” y=5 range(“a1:” & x & y) 或 x=3 y=5 range(cells(1,1),cells(x,y)) ...
  • How do I find the number of used columns in an Excel sheet using VBA?Dim lastRow As LonglastRow = Sheet1.Range("A" & Rows.Count).End(xlUp).RowMsgBox lastRowUsing the above VBA I'm able to find the...
  • 由于递增的列数为从1开始,Excel文件最大列数为16384,顾进行如下代码测试: Sub 方法1() Dim v(2 To 16384) As String, a As Double a = Timer For num = 2 To 16384 v2 = Split(Cells(1, num).Address, "$") v...
  • VBA得到EXCEL表格中的行数和列数  每种方法中上面的是 Excel的行数,下面的是 Excel的列数。方法1:  ActiveSheet.UsedRange.Rows.Count  ActiveSheet.UsedRange.Columns.Count 缺点:有时可能会比实际数大...
  • VBA(excel)实现的统计两列重复个,快速统计,简洁明了。
  • 网上看到很多方法,但是最简单的感觉还是利用Cells.Address这个方法来加工得到英文字母。 毕竟是Excel里面的东西,怎么简单怎么来。
  • VBA得到EXCEL表格中的行数和列数  每种方法中上面的是Excel的行数,下面的是Excel的列数。 方法1:  ActiveSheet.UsedRange.Rows.Count   ActiveSheet.UsedRange.Columns.Count  缺点:有时可能会比实际...
  • VBA中将 Excel 号转换为字母字符
  • VBA代码学习for循环

    2021-05-08 20:55:42
    Option Explicit Sub 输入奇数() Dim i As Byte, a As Byte For i = 1 To 100 Step 2 a = a + 1 Range("I" & a).Value = i Next i End Sub Application.Cells ... For i = 3 To 100 Step ..
  • VBA 代表列名转换:数字转换成字母

    万次阅读 2013-08-06 13:05:31
    废话不多少先上代码: '*********************************************...'将Excel中列数转换为列名(如27列--->AA列) '参数:var 列数 '返回:列名 string '******************************************************
  • vba隐藏,显示

    千次阅读 2020-04-17 10:24:54
    2个页面(首页、数据库整理),在首页中D填写1来选择数据库整理页面中要隐藏的。首页中C内容通过超链接连接到数据库整理页面的对应中。 支持选择性隐藏;显示隐藏的;隐藏所有的 '隐藏 Sub ...
  • Excwl VBA:整行和整列区域

    千次阅读 2020-01-02 19:47:04
    Range.EntireRow 属性 返回一个 Range 对象,该对象表示包含指定区域的整行(或多行)。只读。 ... 对象,该对象表示包含指定区域的整列(或多)。...本示例对包含活动单元格的中的第一个...source:VBA Help
  • Excel VBA 名列标转换函数

    千次阅读 2016-11-29 13:12:40
    Function CI(c) 'Cells.Address.Information If IsNumeric(c) Then On Error GoTo NumErr CI = Replace(Cells(, c).Address(0, 0), 1, "") Else On Error GoTo TxtErr CI =
  • vba遍历数据

    千次阅读 2020-10-09 14:10:13
    Sub funcff() Dim i, j, l, o, d, h l = Columns.Count l = 21 j = 2 o = 22 d = 4 h = 20 For i = 1 To l Cells(h, j).Select j = j + 7 Selection.Copy Cells(o, 1).Select ActiveSheet.Paste ...o = o +

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,125
精华内容 2,850
关键字:

vba列数