ここから本文です

エクセルで、文字が入力されたセルの中身を結合したいのですが、 その方法を教え...

アバター

ID非公開さん

2018/3/3112:48:07

エクセルで、文字が入力されたセルの中身を結合したいのですが、
その方法を教えていただけないでしょうか?

Q1
ああ いい うう ええ おお(ひとつのセルに2文字ずつ入ってる)

ああいいううええおお(←ひとつのセル内にまとまる)

また、

Q2
ああ いい うう ええ おお(ひとつのセルに2文字ずつ入ってる)

ああ いい うう ええ おお(←スペースを空けてひとつのセル内にまとまる)

この方法も知りたいです。
ちなみに結合したいセルの数は(横長に)1,000個くらいあり、手作業は無理だと判断しました。よろしくお願いします。

セル,End Function,SimpleTextJoin,MsgBox Atai,Dim r As Range,buf As String,rng As Range

閲覧数:
80
回答数:
4
お礼:
50枚

違反報告

ベストアンサーに選ばれた回答

MKさん

2018/3/3113:24:08

EXCEL 2016 でしたら TextJoin 関数が便利です。

それ以前だったら同じ機能をマクロで作るのが楽と思いますが、
標準モジュールに下記を置き、

Function SimpleTextJoin(delim As String, dataRange As Range)
Dim ar
If dataRange.Rows.Count = 1 Then
ar = WorksheetFunction.Transpose(WorksheetFunction.Transpose(dataRange))
Else
ar = WorksheetFunction.Transpose(dataRange)
End If
SimpleTextJoin = Join(ar, delim)
End Function


Q1 なら
=SimpleTextJoin("",B4:F4)

Q1 なら
=SimpleTextJoin(" ",B4:F4)

のような形で。

関数はSimple なので、セルは1列か1行の連続しか対応していません。

アバター

質問した人からのコメント

2018/4/1 12:28:40

ありがとうございます。できました。
他の回答をくださった方も何とお礼を言ったら良いか・・・本当に感謝しかありません(T_T)

ベストアンサー以外の回答

1〜3件/3件中

並び替え:回答日時の
新しい順
|古い順

db1********さん

2018/3/3118:13:50

こんな感じでどうでしょう?
セル内文字の数は考慮していません。

3行目のセル、A列から順に値が入っているとしています。
結果は、A6セルに代入します。


Sub 横方向にセル値をつなげて1セルに代入する()

Dim xretu As Long
Dim Atai As String
Dim i As Long

xretu = Range("A3").End(xlToRight).Column

For i = 1 To xretu
Atai = Atai + Cells(3, i).Value
' Atai = Cells(3, i).Value + atai ' 最後のセル値から結合する。
Next

MsgBox Atai
Range("a6") = Atai

End Sub

Sub 横方向にセル値を全角空白を入れながらつなげて1セルに代入する()

Dim xretu As Long
Dim Atai As String
Dim i As Long

xretu = Range("A3").End(xlToRight).Column
'MsgBox xretu

For i = 1 To xretu
If i = 1 Then
Atai = Atai + Cells(3, i).Value
Else
Atai = Atai + " " + Cells(3, i).Value
' Atai = Cells(3, i).Value + atai ' 最後のセル値から結合する。
End If
Next

MsgBox Atai
Range("a6") = Atai

End Sub

hel********さん

2018/3/3117:07:20

>ちなみに結合したいセルの数は(横長に)1,000個くらい
一般的な関数ならCONCATINATE関数を使うか、&演算子を使うかで文字列を結合できますが、1000個のセルだと作業が大変です。
そのような場合は関数を自分で作ります。

ALT+F11キーでVBE画面を起動させ、メニューから「挿入」-「標準モジュール」を選択します。
コードウィンドウが表示されるので、下のコードをコピペします。

Function StringJoin(rng As Range) As String
Application.Volatile
Dim r As Range, buf As String
For Each r In rng
buf = buf & r.Value
Next r
StringJoin = buf
End Function

Function StringJoinSpace(rng As Range) As String
Application.Volatile
Dim r As Range, buf As String
For Each r In rng
buf = buf & r.Value & " "
Next r
StringJoinSpace = buf
End Function

コピペが終わったらVBE画面を閉じます。
これで、StringJoin関数とStringJoinSpace関数を作りました。Spaceの付いている方が文字の間にスペースを付ける関数です。

後は、1つの文字に連結したいセルに =StringJoin(A1:P1) などを引数につなげたいセル範囲を指定すれば文字が連結されます。

suk********さん

2018/3/3113:11:05

A1 ああ B1いい C1うう D1ええ E1おお

Q1 =CONCATENATE(A1,B1,C1,D1,E1)

Q2 =CONCATENATE(A1," ",B1," ",C1," ",D1," ",E1)

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる