[[20210423114357]] 『文字の結合で空白セルを無視したい』(Kay) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『文字の結合で空白セルを無視したい』(Kay)

こんにちは、質問失礼します。

B3-200に入るセルの文字をC3で結合したく、以下マクロを登録しました。

Sub セルの文字を結合()

    Dim 結合文字 As String
    Dim 範囲 As Range
    結合文字 = ""
    For Each 範囲 In Range("B3:B200")
        結合文字 = 結合文字 & 範囲.Text & " ; "
    Next 範囲
    Range("C3").Value = 結合文字
End Sub

結合の際に”;”を入れるようにしています。
ここで問題なのが、結合対象のセルはMaxで200で変動する場合があります。
(100までしか文字が入らない場合もある)
その場合でも”;”の文字のみ結合されてしまうのですが、空白セルを無視することはできますでしょうか?(もしくは文字が入っている行のみ結合?)
VBA初心者のため初歩的な質問で申し訳ありませんが、ご教示いただけると幸いです。何卒よろしくお願いします。

< 使用 Excel:Office365、使用 OS:Windows10 >


 If 範囲.Value <> "" Then 処理
(通りすがり) 2021/04/23(金) 11:52

 2016以降でないので未確認で申し訳ないのですが、
 365であればWorksheetFunctionからTEXTJOIN関数を使えば希望の処理が可能かと思います。
http://officetanaka.net/excel/function/function/concat.htm
(*) 2021/04/23(金) 11:52

 あるいはこういうことかな?

    For Each 範囲 In Range("B3:B200")
      If 範囲.Value <> "" Then
         If 結合文字 <> "" Then 結合文字 = 結合文字 & " ; "
        結合文字 = 結合文字 & 範囲.Text
    Next 範囲
(通りすがり) 2021/04/23(金) 11:55

 おお、TEXTJOIN関数は空白セルを無視してくれるのか。
 当方Excel2007
 早く乗り換えたい・・・。
(通りすがり) 2021/04/23(金) 11:57

 *さんの字方法であれば
 Sub tst()
    Range("C3").Value = WorksheetFunction.TextJoin(";", True, Range("B3:B200"))
 End Sub
(ねむねむ) 2021/04/23(金) 11:59

データの行数を取得してfor分の条件で指定している"B200"を置換すればよいかと!

最終行取得は↓
Range("B3").End(xlDown).Row

(az) 2021/04/23(金) 11:59


 そもそもC3セルにTEXTJOIN関数を入れるのではだめなのだろうか?
(ねむねむ) 2021/04/23(金) 12:03

みなさま、ありがとうございます!
TEXTJOIN関数というものを知らず、セットしてみたところほしい結果が出てきました!
Excelの関数もどんどん進化しているのですね、、勉強不足で申し訳ありません。

この短い時間の中でたくさんの方々にアドバイスいただき、本当に助かりました。
ありがとうございますした。

(Kay) 2021/04/23(金) 12:08


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.