- ベストアンサー
Excelで複数セルからの文字の結合
- ExcelのVBAを使用して、複数のセルの内容を結合する方法について質問です。
- B列からF列までのセルの内容をH列に結合したいのですが、うまくいきません。
- マクロのコードを実行すると、結果が意図した通りに表示されません。どこが間違っているのか教えてください。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
で、このソースを使うとすると For Each c In .Range(.Cells(i, "B"), .Cells(i, "B").Cells(i, "F")) を For Each c In .Range(.Cells(i, "B"), Cells(i, "F")) と直せばうまくいくと思います #2でも指摘されている .Cells(i, "B").Cells(i, "F") ですが、これは .Cells(i, "B")を基点(A1)としたときの.Cells(i, "F") という意味になります そのため、i=1のときは .Range(.Cells(1, "B"), .Cells(1, "B").Cells(1, "F")) ⇒ .Range(.Cells(1, "B"), .Cells(1, "G")) i=2のときは .Range(.Cells(2, "B"), .Cells(2, "B").Cells(2, "F")) ⇒ .Range(.Cells(2, "B"), .Cells(3, "G")) i=3のときは .Range(.Cells(3, "B"), .Cells(3, "B").Cells(3, "F")) ⇒ .Range(.Cells(3, "B"), .Cells(5, "G")) と解釈され、ごらんの有様になるわけです
その他の回答 (4)
- Trick--o--
- ベストアンサー率20% (413/2034)
追記:致命的ではない問題点 Do While .Cells(i, "A") <> "" If .Cells(i, "A") <> "" Then Do While の条件で .Cells(i, "A") <> "" としているのだから その直後の If .Cells(i, "A") <> "" Then は常に真となる(If文の意味が無い)と思いまし。
- Trick--o--
- ベストアンサー率20% (413/2034)
Sub セル内容の連結() Dim r As Long, c As Long Dim txt As String ' A列の一番下までループする For r = 1 To Cells(65536, 1).End(xlUp).Row txt = "" ' B列~F列でループする For c = 2 To 6 txt = txt & Cells(r, c).Value & "/" Next c ' H列に書き込む Cells(r, 8).Value = txt Next r End Sub ……? 何か、複雑なこと考えてる?
お礼
ありがとうございます サンプル用のシートでは問題なさそうなので、 本番用のシートで試してみます
- akina_line
- ベストアンサー率34% (1124/3287)
こんにちは。 >For Each c In .Range(.Cells(i, "B"), .Cells(i, "B").Cells(i, "F")) このRangeはどの範囲を得ようとしているのでしょうか。.Cells(i, "B").Cells(i, "F")が変なのでは? では。
- yucco_chan
- ベストアンサー率48% (828/1705)
Sub test() Dim rowc As Long Dim colc As Long rowc = 1 Do While Cells(rowc, 1) <> "" For colc = 2 To 6 Cells(rowc, 8) = Cells(rowc, 8) + Cells(rowc, colc) + "/" Next colc rowc = rowc + 1 Loop End Sub これでいいですか? セルに数字が入っているとエラーになりますが。。
お礼
ありがとうございます 実は、元々拾い物のソースを改造していたのですが その際は、"B"の部分が"A"になっていました A列に連番(空白が無いセル)を付け加えた事を考慮してなかったです