![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?a65a0e2)
EXCELの文字列連結について教えてください。
【表】
A B C
あいうえ ××× ≫お
くもり △△△
スカイツ ○○〇 ≫リー
やまのて ◆◆◆ ≫せん
オレンジ ×××
【条件】
・表中、A列の続きがC列に記載されている場合と、記載されていない場合がある。
・記載されている場合、C列の ≫ 以降の文字列を取得し、同じ行にあるA列の文字列最後に連結させたい。
・上記の表におけるA列の文字数は25文字と決まっているが、C列の文字数は決まっていない。
・文字列連結後にA列の文字数が増える(25文字以上になる)のは問題ない。
【質問】
C列で ≫ を検索語、≫ 以降の文字をコピーし、同じ行にあるA列最後の文字と連結させる方法を教えていただけないでしょうか。
C列コピー時に、Len関数とLeft関数を使う or ≫ を検索後、≫を削除してコピーしたらいいのかなと思いましたが、いまいち方法が思いつきません…。
膨大な量があるため、VBAで自動化させたいと思っています。
よろしくお願いいたします。
No.3ベストアンサー
- 回答日時:
こんなのはいかがでしょうか?
-------------------------------------------------------------------------
Sub Sample()
Dim 行 As Long
For 行 = 1 To Cells(Rows.Count, 3).End(xlUp).Row
If Left(Cells(行, 3).Value, 1) = "≫" Then
Cells(行, 1).Value = Cells(行, 1).Value & Mid(Cells(行, 3).Value, 2)
Cells(行, 3).ClearContents
End If
Next
End Sub
-------------------------------------------------------------------------
※ 連結後C列の文字を消去させていますが、残したいのならば「Cells(行, 3).ClearContents」を削除して下さい。
ありがとうございます!
最終行までカウントして繰り返す方法、こんなにすっきりできるんですね。
まだまだ学ばないといけないことが沢山ありますが、ここで皆さんに教えていただいて
本当に助かります。
No.7
- 回答日時:
No.4です。
補足します。
>最後の255はどういう事を表しているのでしょう?
この255は、MID関数の3番目の引数で、下式の文字数に該当します。
MID(文字列,開始位置,文字数)
指定した文字数(=255) ≧ 実際の文字数 の場合、実際の文字数が得られますので、エクセルの仕様から1セルに入力可能な最大文字数の255としました。
しかし、自分の記憶が古く、エクセル95以前は最大255文字だったのですが、エクセル97以降は最大32767文字となるエクセルの仕様変更があったようです。
ということで、『255』を『LEN(C1)』に置き換えるのがよいかもしれません。必要に応じて修正ください。
ちなみに、"≫"をCHAR(8804)に置き換えているのは、マクロからセルに式を入れる場合"(ダブルクォーテーション)が入力できないためです
No.6
- 回答日時:
こんばんは!
すでに回答は出ていますので、参考程度で・・・
Sub Sample1()
Dim i As Long
For i = 1 To Cells(Rows.Count, "A").End(xlUp).Row
If InStr(Cells(i, "C"), "≫") > 0 Then
With Cells(i, "A")
.Value = .Value & Mid(Cells(i, "C"), InStr(Cells(i, "C"), "≫") + 1, Len(Cells(i, "C")))
End With
End If
Next i
Range("A:A").Columns.AutoFit
End Sub
こんな感じではどうでしょうか?m(_ _)m
No.5
- 回答日時:
No.4です。
No.4の回答では結果をD列に書いていましたが、連結した結果はA列に上書きしたい。になっていましたね。
ということで、修正版です。
---------------
Sub 結合()
Dim t0
t0 = Time
start_rw = 1
end_rw = Cells(Rows.Count, 1).End(xlUp).Row
Cells(start_rw, 4) = "=CONCATENATE(A1,MID(C1,IF(ISERROR(FIND(CHAR(8804),C1,1)),0,FIND(CHAR(8804),C1,1))+1,255))"
Range(Cells(start_rw, 4), Cells(start_rw, 4)).Copy Destination:=Range(Cells(start_rw, 4), Cells(end_rw, 4))
Range(Cells(start_rw, 1), Cells(end_rw, 1)).Value = Range(Cells(start_rw, 4), Cells(end_rw, 4)).Value
'D列に式を残す場合は下の1行をリマークにする(消去する)
Range(Cells(start_rw, 4), Cells(end_rw, 4)).Clear
MsgBox ("開始" & t0 & Chr(13) & "終了" & Time)
End Sub
No.4
- 回答日時:
これでいけると思います。
結果をD列に書き込みます。
◆ご参考
・データ開始行は1行目で作っていますが、start_rw により変更できます。
・結果は値(文字列)にしていますが、このマクロはエクセル関数で計算していますので、式を残したい場合はマクロの下から3行目をリマークに変えてください。(消去してもよい)
・『≫』 を CHAR(8804) に置き換えています。うまくいかない場合は、エクセルで使われている『≫』とこの質問で使われた『≫』の文字コードが異なる可能性(似た文字がある)があります。エクセルの関数で『=CODE("≫")』を入力して違っていたら8804をその数字に書き換えてください。
------------------
Sub 結合()
Dim t0
t0 = Time
start_rw = 1
end_rw = Cells(Rows.Count, 1).End(xlUp).Row
Cells(start_rw, 4) = "=CONCATENATE(A1,MID(C1,IF(ISERROR(FIND(CHAR(8804),C1,1)),0,FIND(CHAR(8804),C1,1))+1,255))"
Range(Cells(start_rw, 4), Cells(start_rw, 4)).Copy Destination:=Range(Cells(start_rw, 4), Cells(end_rw, 4))
'セルに式を残す場合は下の1行を消去する(リマークにする)
Range(Cells(start_rw, 4), Cells(end_rw, 4)).Value = Range(Cells(start_rw, 4), Cells(end_rw, 4)).Value
MsgBox ("開始" & t0 & Chr(13) & "終了" & Time)
End Sub
![「【EXCEL・VBA】文字列の連結につい」の回答画像4](http://oshiete.xgoo.jp/_/bucket/oshietegoo/images/media/2/120327_5806378748272/M.jpg)
ありがとうございます!
エクセル関数も使えばいいですね。
エクセルもVBAも苦手で、知識が不足していることを痛感しました。
もしよろしければ教えていただきたいのですが、
=CONCATENATE(A1,MID(C1,IF(ISERROR(FIND(CHAR(8804),C1,1)),0,FIND(CHAR(8804),C1,1))+1,255))
の最後の255はどういう事を表しているのでしょう?
No.2
- 回答日時:
あらっ!
ちょいと抜けてしまったようなので訂正です。(汗)
If Left(Cells(r, 3).Text, 1) = "≫" Then
str = Cells(r, 1).Text & Mid(Cells(r, 3).Text, 2)
No.1
- 回答日時:
こんにちは
考え方のみですが・・・
C列に文字がある場合は必ず「≫」で始まることが保証されているなら、C列に文字があるか否か(<>"")で判断できますね。
「≫」以外で始まる文字がある可能性もあって、その場合は処理しないのであれば、文字列の1文字目が「≫」かどうかで処理を分岐すればよいでしょう。
また、文字列の連結は2文字目以降を取り出して、普通に行えば良いので、例えば、変数rが行数を示しているとして…
If Left(Cells(r, 3).Text) = "≫" Then
str = Cells(r, 1).Text & Mid(Cells(r, 3).Text, 2)
~~~
のような感じで処理をなされば宜しいのではないでしょうか?
ありがとうございます!
恥ずかしながら、&で連結できるとは、全く思いつきませんでした!
勉強を初めたばかりですが、こういう類いの考え方が元々苦手なのもあり、とても勉強になります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excelの文字列を数字に変換する方法について 6 2023/07/31 21:18
- Visual Basic(VBA) VBAで、特定の文字より後を削除して残った数値を文字列に変換と特定の文字より前も削除したい 3 2022/04/15 19:21
- Excel(エクセル) Excel 文字列を結合するときに重複をなくしたい 関数・VBA 2 2022/12/12 10:40
- Excel(エクセル) Excelの列から検索して該当する行を別シートに転記するVBA 2 2022/12/20 09:35
- その他(コンピューター・テクノロジー) googleスプレッドシートでカッコ内の文字数をカウントしたい 1 2023/01/17 15:52
- Visual Basic(VBA) Excel VBAで教えてください 4 2022/05/11 22:20
- Excel(エクセル) エクセルで2つの表を比較して、文字列が同じだが、その行のある値が違うものを抽出したい 1 2022/10/06 21:48
- Excel(エクセル) Excelでの検索結果を含む行だけを表示させたい 5 2023/03/10 17:08
- Visual Basic(VBA) VBA初心者です 検索した数字の行に色をつける 5 2023/02/13 14:22
- Excel(エクセル) Excelの空文字判定について 7 2023/01/06 13:25
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・「これはヤバかったな」という遅刻エピソード
- ・初めて自分の家と他人の家が違う、と意識した時
- ・いちばん失敗した人決定戦
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelで、あるセルの値に応じて...
-
B列の最終行までA列をオート...
-
URLのリンク切れをマクロを使っ...
-
Cellsのかっこの中はどっちが行...
-
vba 2つの条件が一致したら...
-
Worksheets メソッドは失敗しま...
-
VBAのFind関数で結合セルを検索...
-
IIF関数の使い方
-
【VBA】2つのシートの値を比較...
-
エクセル 2つの表の並べ替え
-
VBA 何かしら文字が入っていたら
-
VBAを使って検索したセルをコピ...
-
オートフィルタをマクロで作成...
-
Changeイベントでの複数セルの...
-
複数csvを横に追加していくマク...
-
VBAで、離れた複数の列に対して...
-
データグリッドビューの一番最...
-
エクセル アクティブセルから...
-
SUM関数の範囲を変数を代入して...
-
VBAで指定範囲内の空白セルを左...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
B列の最終行までA列をオート...
-
Cellsのかっこの中はどっちが行...
-
Worksheets メソッドは失敗しま...
-
Excelで、あるセルの値に応じて...
-
vba 2つの条件が一致したら...
-
IIF関数の使い方
-
VBA 何かしら文字が入っていたら
-
VBAのFind関数で結合セルを検索...
-
【VBA】2つのシートの値を比較...
-
文字列の結合を空白行まで実行
-
Changeイベントでの複数セルの...
-
URLのリンク切れをマクロを使っ...
-
VBAで指定範囲内の空白セルを左...
-
【Excel VBA】 B列に特定の文字...
-
VBAを使って検索したセルをコピ...
-
VBAで、特定の文字より後を削除...
-
エクセル 2つの表の並べ替え
-
データグリッドビューの一番最...
-
rowsとcolsの意味
-
VBAでのリスト不一致抽出について
おすすめ情報