- ベストアンサー
簡単な質問ですみません
すみません。簡単な質問で申し訳ないですが、何年かぶりにVBAをやっています。 Cells(8,3)からCElls(8,8)までのセル内の文字列をCells(8,8)のセルに一つにまとめたいのですが、 セル内が文字の場合は問題ないのですが、1などの数値だけの場合はエラーになります。 必ず文字として認識して、文字列を作るようにしたいのですが、 セルの設定に問題があるのでしょうか、それともVBAに欠陥があるのでしょうか。 教えてください。次は、問題の箇所をシンプルにしたものです。 Sub TEST() For RETU = 3 To 7 Cells(8, 8) = Cells(8, 8) + Cells(8, RETU) Next RETU End Sub
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
C-G列が 1 sd fgh 安藤 33 結果 1sdfgh安藤33 Sub TEST() For RETU = 3 To 7 Cells(8, 8) = Cells(8, 8) & Cells(8, RETU) Next RETU MsgBox Cells(8, 8) End Sub でうまくいきますよ。昔のBASICと違って文字列連結に+は使わないほうが良いようです。 VB6.0の解説書では、&を使うことが推奨されています、という表現ですが、エクセルVBAではエラーになりますね。
その他の回答 (3)
- michi12345
- ベストアンサー率60% (3/5)
こんにちは。 &の連結でかまいませんが、データ型と表現を意識するならFORMATを使用して文字列型表現に明確化して 連結するとエラーになりません。 FORMATに第2パラメータを付与することで 表現方法をコントロールすることも可能です。 Sub TEST() For RETU = 3 To 7 Cells(8, 8) = Cells(8, 8) & FORMAT(Cells(8, RETU)) Next RETU End Sub
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 [&] でも[+]でも、きちんと、Cellsのプロパティや型を指定していれば、どちらでも問題はありませんね。[&]は、今は、文字列の結合には使うのが一般的になっているだけです。でも、自動キャストに任せておくと、うまくいかないことがありますから、データ型の指定やプロパティを明示的に行ったほうが、エラーが少ないです。 Sub TextBinding() Dim RETU As Long Dim buf As String For RETU = 3 To 7 buf = buf + Cells(8, RETU).Text 'buf = buf + CStr(Cells(8, RETU).Value) Next RETU Cells(8, 8).Value = buf End Sub
- inu2
- ベストアンサー率33% (1229/3720)
Cells(8, 8) = Cells(8, 8) & Cells(8, RETU) とか Cells(8, 8).Value = Cells(8, 8) & Cells(8, RETU) とか じゃだめですかね? 「+」使うと連結じゃなくて、計算されちゃうんじゃ?
補足
みなさん有難うございます。解決です。