Excel VBA复制B列前4字符到I列时出现1004错误求助
问题分析与修复
你的代码存在三个核心问题,导致1004错误(通常因引用无效单元格或逻辑偏差触发):
- 目标列搞反:需求是把B列内容的前4位复制到I列,但你代码里是修改B列的值,完全偏离需求。
- 偏移方向错误:B列到I列是向右偏移7列(I列列号为9,B列是2,9-2=7),你用
Offset(0,-7)会跳到A列,和需求无关。 - 逻辑判断错误:你只在B列单元格为空时才赋值,这和“复制B列前四个字符到I列”的需求不符。
修正后的代码
Sub CopyFirstFourChars() Dim Cell As Range ' 循环B2到B100的单元格,对应赋值到I2到I100 For Each Cell In Range("B2:B100").Cells ' 把当前B列单元格的前4位,赋值到同行的I列单元格 Cell.Offset(0, 7).Value = Left(Cell.Value, 4) Next End Sub
额外优化选项
如果想跳过B列空单元格(只处理有内容的B列单元格),可以添加判断:
Sub CopyFirstFourChars() Dim Cell As Range For Each Cell In Range("B2:B100").Cells If Cell.Value <> "" Then Cell.Offset(0, 7).Value = Left(Cell.Value, 4) End If Next End Sub
内容的提问来源于stack exchange,提问作者Edmund
相关产品推荐
相关产品推荐

