如何按指定顺序复制单元格 实现C列存A列内容、D列按规则填充B列数据
批量规整数据操作方法
规则对齐说明
完全匹配你描述的操作流程的最终效果(以B列有效数据从B2开始、每轮D列填充完所有B2及以下的有效内容为基准):
- 每轮操作对应1个A列单元格值,D列固定重复填充B2到B列最后一个有效单元格的全部内容
- 第1轮:C1及向下连续L行(L=B列从B2开始的有效内容总数)全部填A1;D1填B2,D2填B3…直到连续L行填完B列的全部有效内容
- 循环进入下一轮时:C列从上一轮结束的下一行开始,填下一个A列的单元格值,D列同步从同一行开始重复填充B2到B列末尾的内容,直到A列所有有效值处理完毕
方法1:函数公式批量生成(零代码,适合常规数据量)
- 先计算单轮需要的行数L:找一个空白单元格输入
=COUNTA(B:B)-1,得到的数值就是每轮需要占的连续行数(如果你的B列有效内容从B1开始,就把公式改成=COUNTA(B:B)) - 在C1单元格输入公式:
=INDEX(A:A, INT((ROW()-1)/L)+1)
把公式里的L替换成上一步算出的实际数值,比如L=4的话,公式就是=INDEX(A:A, INT((ROW()-1)/4)+1) - 在D1单元格输入公式:
=INDEX(B:B, 2 + MOD(ROW()-1, L))
同样把公式里的L替换成实际数值;如果你的B列有效内容从B1开始,就把公式里的数字2改成1 - 选中C1、D1两个单元格,鼠标移到D1单元格右下角,等光标变成黑色十字填充柄时,向下拖动到总长度为 L*A列有效行数 的位置即可自动生成全部内容
方法2:VBA一键生成(适合超大数据量,无公式卡顿问题)
- 按
Alt+F11打开VBA编辑器,在左侧工程栏右键点击当前工作表,选择「插入-模块」 - 在弹出的代码编辑窗口粘贴以下内容:
Sub BatchFillData() Dim lastA As Long, lastB As Long, l As Long, currentRow As Long, i As Long ' 获取A、B列最后一行的行号 lastA = Cells(Rows.Count, "A").End(xlUp).Row lastB = Cells(Rows.Count, "B").End(xlUp).Row ' 计算单轮D列需要填充的行数 l = lastB - 1 currentRow = 1 ' 遍历A列的每一个有效单元格 For i = 1 To lastA ' 给C列连续填充当前A列单元格的值 Range("C" & currentRow & ":C" & currentRow + l - 1).Value = Cells(i, "A").Value ' 给D列填充B2到B列末尾的内容 Range("D" & currentRow).Resize(l).Value = Application.Transpose(Range("B2:B" & lastB).Value) ' 移动到下一轮的起始行 currentRow = currentRow + l Next i End Sub - 按F5运行代码,即可自动在C、D列生成符合规则的全部内容
内容的提问来源于stack exchange,提问作者user5520049
相关产品推荐
相关产品推荐

