您可以使用第二个数组来存储太长的单元格长度,并分别迭代这些
从这篇 Microsoft 支持文章中 ,excel-2003无法处理写回长度超过911个字符的数组字符串, excel-2010在我的测试中运行良好)
下面的代码:
- 设置在范围内读取的主要变体数组
- 设置与第一个数组大小相等的第二个空白变量
- 测试数组的每个部分的单元格长度是否超过 911 个字符,然后
- 操作第一个数组中较短的值,或者,
- 从第一个数组中删除值,然后将其写入第二个数组
- 第一个数组一次性转储回范围
- 第二个数组逐个单元迭代以转储其他字符串
代码
Sub KudosRickyPonting()
Dim allPosts As Variant
Dim allPosts2 As Variant
Dim vStrs As Variant
Dim lngRow As Long
Dim lngCol As Long
allPosts = Range("A2:J5000").Value2
ReDim allPosts2(1 To UBound(allPosts, 1), 1 To UBound(allPosts, 2))
For lngRow = 1 To UBound(allPosts, 1)
For lngCol = 1 To UBound(allPosts, 2)
If Len(allPosts(lngRow, lngCol)) < 912 Then
allPosts(lngRow, lngCol) = "Updated:" & allPosts(lngRow, lngCol)
Else
allPosts2(lngRow, lngCol) = "NEW PART " & allPosts(lngRow, lngCol)
'erase long value from first array
allPosts(lngRow, lngCol) = vbNullString
End If
Next
Next
Range("A2:J5000").Value = allPosts
For lngRow = 1 To UBound(allPosts2, 1)
For lngCol = 1 To UBound(allPosts2, 2)
If Len(allPosts2(lngRow, lngCol)) > 0 Then Range("A2").Offset(lngRow - 1, lngCol - 1).Value2 = allPosts2(lngRow, lngCol)
Next
Next
End Sub