- ベストアンサー
結合セルと単独セルの文字列マージ
以下のような処理をしたいのですが、どのように実現すればよいかアドバイスをお願いします。 ----------------------- 以下のようなデータがあります。 ※等幅フォント以外は見にくいと思います。。。すいません。 ┌――――――┬―――――――┬――┐ | |ニンテンドーDS| ○ | | ├―――――――┬――┤ | |PSP | | | ゲーム機 ├―――――――┬――┤ | |Wii | ○ | | ├―――――――┬――┤ | |プレステ3 | | ├――――――┴―――――――┴――┤ | |ビエラ | | | ├―――――――┬――┤ | |ブラビア | | | テレビ ├―――――――┬――┤ | |Wooo | ○ | | ├―――――――┬――┤ | |アクオス | | └――――――┴―――――――┴――┘ 左端は結合セル、その他は単独セルです。 上記のとき、以下のように文字列をひとつのセルにまとめたいです。 ★以下の結果がひとつのセルに書き込まれる。 ゲーム機(ニンテンドーDS、Wii)、テレビ(Wooo) ----------------------- 結合セルのマクロでの処理が、調べたのですがいまいち理解できずでした。ヒントをいただければと思います。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
結合セルをマクロで調べて処理しなくても、良いと思いますが。 以下の例を参考にしてください。 Sub test() Dim wStr As String Dim wStr2 As String Dim wSeq As Integer Dim mR As Long ' wStr = "" With ActiveSheet mR = .Cells(Rows.Count, "B").End(xlUp).Row wStr2 = "" For wR = 1 To mR If .Cells(wR, 1) <> "" Then If wStr2 <> "" And wSeq > 0 Then If wStr = "" Then wStr = wStr & wStr2 & ")" Else wStr = wStr & "、" & wStr2 & ")" End If End If wStr2 = .Cells(wR, 1) & "(" wSeq = 0 End If If .Cells(wR, 3) = "○" Then wSeq = wSeq + 1 If wSeq = 1 Then wStr2 = wStr2 & .Cells(wR, 2) Else wStr2 = wStr2 & "、" & .Cells(wR, 2) End If End If Next End With If wSeq > 0 Then If wStr = "" Then wStr = wStr & wStr2 & ")" Else wStr = wStr & "、" & wStr2 & ")" End If End If MsgBox wStr End Sub
その他の回答 (1)
- imogasi
- ベストアンサー率27% (4737/17069)
何をしたいのか、質問文から良くつたわらない。 課題達成後の表の様子が良くわからない。 「ゲーム機」の枠は現在は4セル結合してあるのでしょう。 これを「ゲーム機」を結合してない1セルにいれ、 ニンテンドーDS、Wii・・を隣のセル(同一セル?)に ニンテンドーDS、|PSP 、Wii、プレステ3を改行していれるのか、 改行もしないで入れるのか。 全体は罫線つきの表か? ーー 一般化してやるにはVBAが必要な気がする。 ーー 関数などセルを結合した範囲に適用すると、式の複写がうまく行かない。 そうすると関数を使うメリットがなくなる。
お礼
分かりにくい質問になっていてすみません。 望む結果は 「ゲーム機(ニンテンドーDS、Wii)、テレビ(Wooo)」 という文字列(改行なし)を出力させる、というものでした。 文字列がほしい、という点をきちんと書いていなかったため分かりづらかったです。すみません。 回答ありがとうございました。
お礼
回答ありがとうございます! とりあえず動かしてみたところ、望みの結果(文字列)が出力されました。 回答内容をベースに適宜変更して利用させていただきたいと思います。