• 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
方法一：
'列数转字母
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
方法二：
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表格中的行数和列数 请注意不要使用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 展开全文 • 前段时间做的一个项目（Vista print）中需要将...总不能就这么下去吧。 最后写了个Funtion解决这一问题。代码如下： Public Function NumToChr(PureNum As Integer) As String If PureNum Mod 26 = 0 Then ... • 传入参数为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 ...
• 在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)实现的统计两列重复个，快速统计，简洁明了。
• VBA得到EXCEL表格中的行数和列数 　每种方法中上面的是Excel的行数，下面的是Excel的列数。 方法1: 　ActiveSheet.UsedRange.Rows.Count  　ActiveSheet.UsedRange.Columns.Count  缺点：有时可能会比实际...
• VBA中将 Excel 号转换为字母字符
• 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 ..
• 废话不多少先上代码： '*********************************************...'将Excel中列数转换为列名（如27列--->AA列） '参数：var 列数 '返回：列名 string '******************************************************
• ## vba隐藏，显示列

千次阅读 2020-04-17 10:24:54
2个页面(首页、数据库整理)，在首页中D填写1来选择数据库整理页面中要隐藏的。首页中C内容通过超链接连接到数据库整理页面的对应中。 支持选择性隐藏；显示隐藏的；隐藏所有的 '隐藏 Sub ...
• Range.EntireRow 属性 返回一个 Range 对象，该对象表示包含指定区域的整行（或多行）。只读。 ... 对象，该对象表示包含指定区域的整列（或多）。...本示例对包含活动单元格的中的第一个...source:VBA Help
• 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 +

...