如何用VBA在Excel两列生成1-26的顺序数字组合?
嘿,我懂你这种不想重复劳动的心情!手动一个个设置Range区域确实太折磨人了,这里有几个高效的方案,帮你轻松生成1到26的所有组合:
方案一:用VBA数组批量写入(最推荐,效率最高)
这种方法先在内存里生成数据数组,再一次性写入Excel单元格,大幅减少了VBA和Excel界面的交互次数,速度快得飞起,数据量越大优势越明显:
Sub GenerateAllCombinations() Dim totalRows As Long Dim i As Long, j As Long Dim arr As Variant totalRows = 26 * 26 ' 1到26的全组合共676行 ReDim arr(1 To totalRows, 1 To 2) ' 定义对应A、B列的二维数组 ' 填充数组内容 For i = 1 To 26 For j = 1 To 26 arr((i - 1) * 26 + j, 1) = i ' A列:每个数字重复26次 arr((i - 1) * 26 + j, 2) = j ' B列:循环1到26 Next j Next i ' 一次性把数组写入工作表 Range("A1:B" & totalRows).Value = arr End Sub
方案二:改进你提到的DataSeries方法
如果你想沿用DataSeries的思路,我们可以分步骤定制A、B列的序列:
- A列需要每个数字重复26次,用
Step:=0固定值,设置Count:=26生成重复项 - B列先生成1到26的基础序列,再复制25次实现循环效果
Sub GenerateWithDataSeries() Dim i As Long Dim startRow As Long ' 生成A列:每个数字重复26次 startRow = 1 For i = 1 To 26 Range("A" & startRow).Value = i ' Step:=0 表示不递增,Count:=26 表示生成26个重复值 Range("A" & startRow).DataSeries Rowcol:=xlColumns, Type:=xlLinear, Step:=0, Count:=26 startRow = startRow + 26 Next i ' 生成B列:1到26循环26次 Range("B1:B26").DataSeries Rowcol:=xlColumns, Type:=xlLinear, Step:=1, Stop:=26 Range("B1:B26").Copy Range("B27:B676") End Sub
额外小技巧:不用VBA,用Excel公式快速生成
如果你不想写代码,直接用公式也能搞定:
- 在A1单元格输入:
=INT((ROW()-1)/26)+1 - 在B1单元格输入:
=MOD(ROW()-1,26)+1 - 选中A1:B1,下拉填充到第676行,就能得到你要的组合
内容的提问来源于stack exchange,提问作者Rich Prag
相关产品推荐
相关产品推荐

