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
ありがとうございます!
エクセル関数も使えばいいですね。
エクセルも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を探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
B列の最終行までA列をオート...
-
Excelで、あるセルの値に応じて...
-
Worksheets メソッドは失敗しま...
-
IIF関数の使い方
-
Cellsのかっこの中はどっちが行...
-
【Excel VBA】 B列に特定の文字...
-
vba 2つの条件が一致したら...
-
URLのリンク切れをマクロを使っ...
-
C# 列の挿入
-
C# dataGridViewの値だけクリア
-
VBA A列にありB列にないものま...
-
vba 数値がゼロになるまで引く
-
【VBA】2つのシートの値を比較...
-
DataGridViewに空白がある場合...
-
マクロについて。S列の途中から...
-
エクセルVBA シートモジュール...
-
ASP.NET DataGridのハイパーリンク
-
【Excel VBA】カンマと改行コー...
-
R言語で、列名でループ
-
オートフィルタをマクロで作成...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
B列の最終行までA列をオート...
-
Worksheets メソッドは失敗しま...
-
Excelで、あるセルの値に応じて...
-
Cellsのかっこの中はどっちが行...
-
URLのリンク切れをマクロを使っ...
-
vba 2つの条件が一致したら...
-
IIF関数の使い方
-
【Excel VBA】 B列に特定の文字...
-
VBAを使って検索したセルをコピ...
-
rowsとcolsの意味
-
文字列の結合を空白行まで実行
-
VBAのFind関数で結合セルを検索...
-
【VBA】2つのシートの値を比較...
-
VBAコンボボックスで選択した値...
-
データグリッドビューの一番最...
-
セルに値が入っていた時の処理
-
Changeイベントでの複数セルの...
-
VBAで、特定の文字より後を削除...
-
VBAで指定範囲内の空白セルを左...
-
マクロ 最終列をコピーして最終...
おすすめ情報