2 番目の配列を使用して、長すぎるセルの長さを格納し、これらを個別に反復処理できます。
このマイクロソフトのサポート記事 から、 Excel-2003は911文字より長い配列文字列を書き戻すことができませんExcel-2010は私のテストでは問題なく動作しました)
以下のコード:
- 範囲を読み取る主要なバリアント配列を設定します
- 最初の配列と同じサイズの 2 番目の空白バリアントを設定します
- 配列の各部分のセルの長さが 911 文字を超えているかどうかをテストし、次のいずれかを行います。
- 最初の配列の短い方の値を操作する、または、
- 最初の配列から値を削除し、それを 2 番目の配列に書き込みます
- 最初の配列は、範囲に戻るシングルショットでダンプされます
- 2 番目の配列はセルごとに反復され、他の文字列をダンプします。
コード
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