VBA设置cell.offset值触发Error 1004,求问题排查
问题分析与解决办法
错误根源
你编写的是Excel用户定义函数(UDF),Excel对UDF有核心限制:UDF只能返回计算结果到调用它的单元格,绝对不允许修改其他单元格的内容。你的代码尝试通过cell.Offset(0, 2).Value = Str(i)修改当前单元格右侧第2列的单元格,直接违反了这个规则,因此触发Error 1004错误。
解决办法
根据你的需求,有两种可行的调整方案:
方案1:改用宏(Sub过程)
这是最贴合你原本逻辑的方案,宏不受UDF的修改限制。修改后的代码如下:
Sub justcheck(rng As Range) Dim i As Integer i = 1 For Each cell In rng cell.Offset(0, 2).Value = Str(i) i = i + 1 Next End Sub
使用方式:
- 在VBA编辑器中选中该Sub过程,点击运行按钮执行;
- 或者在Excel界面添加按钮,将该宏绑定到按钮上,选中目标区域后点击按钮执行。
方案2:用UDF返回数组(适配公式调用)
如果一定要通过公式形式实现,可以让函数返回数组,再通过数组公式填充到目标区域。代码如下:
Function justcheck(rng As Range) As Variant Dim resultArr() As String ReDim resultArr(1 To rng.Rows.Count, 1 To rng.Columns.Count) Dim i As Integer i = 1 For Each cell In rng resultArr(cell.Row - rng.Row + 1, cell.Column - rng.Column + 1) = Str(i) i = i + 1 Next justcheck = resultArr End Function
使用方式:
- 选中与原区域大小一致的目标区域(比如原区域是A1:A5,就选中C1:C5);
- 输入公式
=justcheck(A1:A5); - 按下
Ctrl+Shift+Enter组合键,以数组公式形式确认输入。
内容的提问来源于stack exchange,提问作者mohsyn
相关产品推荐
相关产品推荐

