精华内容
下载资源
问答
  • 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
    展开全文
  • 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 ...

    excel vba 列

    It's Friday, and your brain is almost full, but let's try to cram a little bit of Excel VBA in there before the weekend. We've talked about the Excel Column Headings before, and seen how to change the Reference Style setting from R1C1 (Numbers) to A1 (Letters).

    现在是星期五,您的大脑几乎已满,但是让我们尝试在周末之前在其中塞满一点Excel VBA。 我们之前已经讨论过Excel列标题 ,并了解了如何将“参考样式”设置从R1C1(数字)更改为A1(字母)。

    That setting is pretty well hidden, and it's a bit of a pain to switch on and off. We'll create a macro that will let us quickly switch from A1 to R1C1, or from R1C1 to A1.

    该设置隐藏得很好,打开和关闭它有点麻烦。 我们将创建一个宏,使我们能够快速从A1切换到R1C1,或从R1C1切换到A1。

    步骤1:记录宏以将列标题切换为数字 (Step 1: Record a Macro to Switch Column Headings to Numbers)

    To see the Excel VBA code that changes the setting, we can use the Excel Macro Recorder.

    要查看更改设置的Excel VBA代码,我们可以使用Excel Macro Recorder

    1. Turn on the Macro Recorder

      打开宏录制器
    2. Name the macro, ToggleR1C1, and store it in the Personal Macro Workbook

      将宏命名为ToggleR1C1,并将其存储在“个人宏工作簿”中
    3. With the Macro Recorder on, turn the R1C1 reference style on, then turn it off

      在宏录制器打开的情况下,打开R1C1参考样式,然后将其关闭
    4. Turn off the Macro Recorder

      关闭宏录制器

    步骤2:查看记录的Excel VBA代码 (Step 2: View the Recorded Excel VBA code)

    1. On Developer tab, click Macros

      在开发人员选项卡上,单击宏
    2. In the list of Macros, click ToggleR1C1

      在宏列表中,单击ToggleR1C1
    3. Click Edit, to see the recorded code, that will look something like this:

      单击编辑,以查看记录的代码,该代码将类似于以下内容:

      ToggleR1C1_01
    4. The lines that start with an apostrophe are comments, and you can delete them in this example.

      以撇号开头的行是注释,您可以在本示例中将其删除。

    步骤3:编辑记录的Excel VBA代码 (Step 3: Edit the Recorded Excel VBA code)

    In the recorded Excel VBA code, you can see the two lines that change the reference style. The first line sets it to R1C1 and the second line sets it to A1 style. We'd like our macro to toggle the setting.

    在记录的Excel VBA代码中,您可以看到两条更改参考样式的行。 第一行将其设置为R1C1,第二行将其设置为A1样式。 我们希望宏可以切换设置。

    If it's currently A1, our macro will change it to R1C1, and vice versa. To do that, we'll add bit of If...Then code, similar to an IF formula on the worksheet.

    如果当前是A1,我们的宏会将其更改为R1C1,反之亦然。 为此,我们将添加If ... Then代码,类似于工作表上的IF公式。

    Our code, if written in English instead of Excel VBA, would say this: If the current reference style is A1, change it to R1C1, otherwise (if it's not A1), change it to A1.

    如果我们的代码是用英语而不是Excel VBA编写的,则会这样说:如果当前参考样式为A1,请将其更改为R1C1,否则(如果不是A1)将其更改为A1。

    Here's how you can edit your code to say the same thing in Excel VBA:

    您可以通过以下方法在Excel VBA中编辑代码以表达相同的意思:

    Switch Column Headings to Numbers

    The Macro Recorder showed us how to change the reference style setting. By adding If...Then...Else...End If, we created a simple macro that will make it easy to switch between the settings.

    宏录制器向我们展示了如何更改参考样式设置。 通过添加If ... Then ... Else ... End If,我们创建了一个简单的宏,可以轻松在设置之间进行切换。

    步骤4:将宏添加到QAT (Step 4: Add the Macro to the QAT)

    To make this macro easy to use, you can add it to the Quick Access Toolbar (QAT) in Excel 2007. (If you're using Excel 2003, or an earlier version, you can customize the Excel toolbars, and add a button for the macro.)

    要使此宏易于使用,可以将其添加到Excel 2007中的快速访问工具栏(QAT)中。(如果使用的是Excel 2003或更早版本,则可以自定义Excel工具栏,并为宏。)

    1. At the right end of the QAT, click the drop down arrow

      在QAT的右端,单击下拉箭头
    2. Click More Commands

      单击更多命令
    3. In the Choose commands from drop down, click Macros

      在从中选择命令下拉菜单中,单击宏
    4. In the list of macros, click the PERSONAL.XLS!ToggleR1C1 macro

      在宏列表中,单击PERSONAL.XLS!ToggleR1C1宏
    5. Click Add, to move it to the Quick Access Toolbar

      单击添加,将其移至快速访问工具栏

      QATMacroAdd
    6. In the QAT list, click the PERSONAL.XLS!ToggleR1C1 macro

      在“ QAT”列表中,单击“ PERSONAL.XLS!ToggleR1C1”宏
    7. Click Modify, and click on an icon for the macro (I use the 8-ball), then click OK

      单击修改,然后单击宏的图标(我使用8球),然后单击确定

      QATMacroIcon
    8. Click OK, to close the Excel Options window.

      单击确定,关闭“ Excel选项”窗口。

    步骤5:测试您的宏以将列标题切换为数字 (Step 5: Test Your Macro to Switch Column Headings to Numbers)

    On the QAT, click the new button, to toggle the reference style setting between A1 and R1C1.

    在QAT上,单击新按钮,以在A1和R1C1之间切换参考样式设置。

    Congratulations! Your Excel VBA work is done, and now you can easily switch column headings to numbers.

    恭喜你! Excel VBA工作已完成,现在您可以轻松地将列标题切换为数字。

    观看视频 (Watch the Video)

    To see the steps for adding the macro to the QAT, watch this short video.

    要查看将宏添加到QAT的步骤,请观看此简短视频。

    演示地址

    翻译自: https://contexturesblog.com/archives/2009/12/04/excel-vba-switch-column-headings-to-numbers/

    excel vba 列

    展开全文
  • VBA实现数字与字母的相互转化

    万次阅读 2016-09-13 16:31:41
    VBA实现数字与字母的相互转化的方法

    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


    2,方法二:

    1. Function GetColumn(char)
    2.     Dim t
    3.     On Error Resume Next
    4.     If IsNumeric(char) Then
    5.         t = Split(Cells(1, char).Address, "$")(1)
    6.     Else
    7.         t = Columns(char & ":" & char).Column
    8.     End If
    9.     If Err.Number <> 0 Then GetColumn = "超出范围" Else GetColumn = t
    10. 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表格中的行数和列数初学EXCEL宏的童鞋,总是很想知道表格中含有数据的行数和列数,尤其是行数和列数不确定的情况下。这样可以避免很多的错误,并且可以提高效率。但每次用到的时候到网上查找时,总是给...

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

    初学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。

    展开全文
  • vba_获取使用行数和列数,vba_获取使用行数和列数,vba_获取使用行数和列数
  • 展开全部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 获取最大行数和最大列数

    千次阅读 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(...
  • 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 \ ...
  • Vba第三十九课Vba中index函数使用如图:要求:根据单元格A15提供的姓名,查找它的详细信息;代码如下:Sub 查询()Dim arr, nameSheets(1).Range("b15:g15") = ""name = Sheets(1).[a15].Valuearr = Sheets(1).Range...
  • 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取得EXCEL表格中的行数和列数

    千次阅读 2019-07-25 15:50:41
    VBA取得EXCEL表格中的行数和列数 请注意不要使用Columus等关键字作为变量,例如"Columus = ActiveSheet.UsedRange.Columns.Count"! 初学EXCEL宏的童鞋,总是很想知道表格中含有数据的行数和列数,尤其是行数和列数...
  • 网上看到很多方法,但是最简单的感觉还是利用Cells.Address这个方法来加工得到英文字母。 毕竟是Excel里面的东西,怎么简单怎么来。
  • VBA实践+快速合并表格且竖线对齐有一份pdf...这些子表格都具有相同的列数,但每列的宽度不尽相同,如果直接合并,后面调整表格竖线对齐会比较麻烦,而且要合并的表格数量较多,耗时将会很长。这样的表格如下图所示,...
  • VBA取得EXCEL表格中的行数和列数 请注意不要使用Columus等关键字作为变量,例如"Columus = ActiveSheet.UsedRange.Columns.Count"! 初学EXCEL宏的童鞋,总是很想知道表格中含有数据的行数和列数,尤其是行数和...
  • VBA得到EXCEL表格中的行数和列数

    万次阅读 多人点赞 2013-07-15 15:38:46
    VBA得到EXCEL表格中的行数和列数    每种方法中上面的是Excel的行数,下面的是Excel的列数。 方法1:  ActiveSheet.UsedRange.Rows.Count   ActiveSheet.UsedRange.Columns.Count  缺点:有时可能...
  • 由于递增的列数为从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...
  • Public Function GetColName(ByVal y As Integer) As String Dim z As Integer Dim i As Integer Dim n(25) As String For i = 0 To 25 n(i) = Chr(65 + i)...
  • VBA得到EXCEL表格中的行数和列数  每种方法中上面的是Excel的行数,下面的是Excel的列数。 方法1:  ActiveSheet.UsedRange.Rows.Count   ActiveSheet.UsedRange.Columns.Count  缺点:有时可能会比实际...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 451
精华内容 180
关键字:

vba列数