2016-07-18 17 views
0

Excelファイルの各行の内容をテキストファイルに追加する単純なマクロがあり、各セルの値の間に区切り文字があります。これは、各行を反復するforループを実行することによって実行され、各反復の終わりに値がString変数の末尾に追加されます。VBA 255 1セル内の最大文字数

各行には多くの文字が含まれている可能性がありますが、それには何の問題も気づいていません。ただし、1つのセルに255文字を超える文字が含まれていると、連結が失敗します。文字列の制限(私はそれが当てはまるとは思わない)、またはこの制限を含むトリム、結合、またはインデックス関数であるかどうか、あるいはそれが何か他のものであるかどうかはわかりません。より多くの洞察を得るための助けに感謝します。

当該行が(R '' は、行/反復回数を意味する):

stringVariable = stringVariable & vbNewLine & Application.Trim(Join(Application.Index(Cells(R, "A").Resize(, 25).Value, 1, 0), "|")) 

エラーがある:

実行時エラー '13':データ型の不一致

答えて

1

問題はApplication.Indexです。デバッグするには?

行1の値がすべてアクティブシートになります。すべて255文字未満です。しかし、行1で、この細胞の一つで、C1で例えば、式のようになります。

=REPT("c",255) 

は今の部分にコードを分割:あなたが式を変更するまで

Sub test() 

r = 1 

v2DArray = Cells(r, "A").Resize(, 25).Value 
index1DArray = Application.Index(v2DArray, 1, 0) 
joinString = Join(index1DArray, "|") 
stringVariable = Application.Trim(joinString) 

MsgBox stringVariable 

End Sub 

は、これは動作します=REPT("c",256)。今度はApplication.Indexで失敗します。代わりにApplication.Indexあなたが次のことを行うことができますの

Sub test2() 

r = 1 

v2DArray = Cells(r, "A").Resize(, 25).Value 
ReDim v1DArray(LBound(v2DArray, 2) To UBound(v2DArray, 2)) As String 
For i = LBound(v2DArray, 2) To UBound(v2DArray, 2) 
    v1DArray(i) = v2DArray(1, i) 
Next 
joinString = Join(v1DArray, "|") 
stringVariable = Application.Trim(joinString) 

MsgBox stringVariable 

End Sub 
+0

私は返信を送ったと確信していました。私たちの投稿の数時間の間、私は解決策を見つけることができました。私は他の人が見るためにここにそれを掲示します。あなたが最も正確に特定したように、問題は索引機能に関連していました。 – user3341082

0

既に存在している機能の異なる組み合わせを使用して実験した後は、私は、インデックスが使用されていない問題もなくそのマクロが終了しました。

最後に、各セルの値を文字列の最後に1つずつ追加することにしました。解決策:

For i = 1 To numberOfColumns 
    If i < numberOfColumns Then 
     stringVariable = stringVariable & Trim(Cells(R, i).Value) & "|" 
    Else 
     stringVariable = stringVariable & Trim(Cells(R, i).Value) 
    End If 
Next i 
stringVariable = stringVariable & vbNewLine 
関連する問題