- ベストアンサー
複数セルを結合して一つのセルにしたい
エクセル関数の質問です。 A列のセルに、数字が並んでいます。 aaaという部分はカテゴリーを示すものです。 B列のセルに同じカテゴリーの別の数値を連結させ、スペースで区切ってひとつのセルに表記させるにはどうすればいいでしょうか? concatenate関数を組み合わせて式を作ろうとしたのですが、うまく出来ませんでした。 VBAやマクロ、ユーザー定義関数になっても構いません。 ご教授ください。 A B aaa_0001 aaa_0002 aaa_0003 aaa_0002 aaa_0001 aaa_0003 aaa_0003 aaa_0001 aaa_0002 bbb_0012 bbb_0013 bbb_0013 bbb_0012 ccc_0017
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
VBAでやるとこんな感じですかね。(かなり手抜きですが)。 4文字目までが一致するセルの文字列を全部スペース区切りで結合させ、Replaceで自行の文字列をそこから削除。 Trimで余計なスペースを削除してB列に貼り付けています。 なお、サンプルですので、エラー処理も変数宣言も適当です。 Sub Sample() nCount = ActiveSheet.Range("$A$65536").End(xlUp).Row For i = 1 To nCount sCat = Left(Cells(i, 1), 4) sString = "" For j = 1 To nCount If Left(Cells(j, 1), 4) = sCat Then sString = sString & " " & Cells(j, 1) End If Next j sString = Trim(Replace(sString, Cells(i, 1), "")) Cells(i, 2) = sString Next i End Sub
その他の回答 (6)
- imogasi
- ベストアンサー率27% (4737/17069)
>、数字が並んでいます と言ってながら、aaa_0002 などは文字列のはず。言っていることが判らない。 > aaa_0001 aaa_0002 aaa_0003 aaa_0002 aaa_0001 aaa_0003 aaa_0003 aaa_0001 aaa_0002 B列は(A列データを結合するにしても)組み合わせているのではないか? もしそうなら、その組み合わせのルールはどうなっているか。(注) ーー 色々質問しているが、セルの値の結合は「&」かCONKATENATEしかないのだから、自分で考えること。 他の点で判らない点を中心に質問のこと ーーー >表題の、「複数セルを結合して一つのセルにしたい、」などは、絶対関数では出来ないので、文字通りだと変な質問(の表現)である。 「複数セル値を結合して一つのセルに入れたい」、とでもすれば、正当になる。 >VBAやマクロ、ユーザー定義関数になっても構いません。 質問者が経験無いのなら、丸投げになるから、こういうことは言うべきでない。 ==== 色々言ったが (注)の部分を補足してほしい。
補足
失礼しました。 先に頂いたVBAでの方法で解決出来たのですが、他にもご回答をいただいていたので、そちらの回答の方の方法も週明けに検討してから解決済にしようとしていたので、更に回答を受けつている形になっていて申し訳ありませんでした。 おっしゃる通りで組み合わせのルールについて書いていませんでしたね。 同カテゴリーの数値(例では分かりやすくするためにローマ字にしました。)のA列にある数値以外の他のセルを一つのセルに結合して入れたいということでした。 ご指摘ありがとうございます。
- KURUMITO
- ベストアンサー率42% (1835/4283)
ご質問のケースで答えを得るために関数で対応すつためには次のようにしてはどうでしょう。 C列を作業列としてC1セルには次の式を入力して下方にオートフィルドラッグします。 =IF(A1="","",LEFT(A1,3)&COUNTIF(A$1:A1,LEFT(A1,3)&"*")) そこでB列に答えを表示させるのですが、B1セルには次の式を入力し下方にオートフィルドラッグします。 =TRIM(SUBSTITUTE(IF(COUNTIF(C:C,LEFT(A1,3)&1)=0,"",INDEX(A:A,MATCH(LEFT(A1,3)&1,C:C,0)))&" "&IF(COUNTIF(C:C,LEFT(A1,3)&2)=0,"",INDEX(A:A,MATCH(LEFT(A1,3)&2,C:C,0)))&" "&IF(COUNTIF(C:C,LEFT(A1,3)&3)=0,"",INDEX(A:A,MATCH(LEFT(A1,3)&3,C:C,0)))&" "&IF(COUNTIF(C:C,LEFT(A1,3)&4)=0,"",INDEX(A:A,MATCH(LEFT(A1,3)&4,C:C,0))),A1,""))
お礼
ご回答ありがとうございます。 C列を使ってカテゴリーの各数値に番号を振るんですね。 勉強になりました。 同カテゴリーの最大の個数が決まっていればこちらで、対応出来ると思います。 有効な情報を教えていただきまして、本当にありがとうございました。
補足
こちらの方法も週明けに試してみたいと思います。 こちらで、やりたかったことが実現出来たかどうか、お礼にて別途報告させて頂きます。
- gyouda1114
- ベストアンサー率37% (499/1320)
>B列の数値をつなぐということではなく、A列のそれぞれのセルに入っている数値をつなげて、B列に入れたいということです。 例えば C列に =CONCATENATE(A2," ",B2) C列をコピー → 形式を選択して貼り付け → 値 → B列を削除 以上でA列のセルをB列に繋げたのと同じになりますが
お礼
すみません、私の書き方の問題で、質問の意図が伝わらなかったようです。 既にご回答いただけたVBAでのマクロ処理で問題は解決済ですが、他にご回答いただいている方の方法も試したのちに回答を締め切りたかったので、再度ご回答いただいてしまい申し訳ありませんでした。 お気に留めていただいて、ありがとうございました。
- cistronezk
- ベストアンサー率38% (120/309)
ユーザ定義関数の一例です。 一応、それなりにエラー処理もしたつもりです。 Function hoge(r As Range, c As Range) As String Dim vals As Variant If c.Cells.Count <> 1 Then Exit Function vals = Split(c.Value, "_") If UBound(vals) <> 1 Then Exit Function Dim acell As Range, tmp As Variant, retstr As String For Each acell In r If acell.Row <> c.Row Or acell.Column <> c.Column Then tmp = Split(acell.Value, "_") If UBound(tmp) = 1 Then If tmp(0) = vals(0) Then retstr = retstr & " " & acell.Value End If End If Next hoge = Trim(retstr) End Function <<使い方>> 第1引数に、A列全体を、第2引数に除外するセルを指定します。 例)セルB1に =hoge($A$1:$A$6,A1) という感じです。
お礼
ご回答ありがとうございます。 こちらも試してみたのですが、うまく使うことができませんでした。 問題は私が書いた例があまりよくなかったということで、例の通りの数値なら問題なく使えました。 ありがとうございました。
補足
こちらの方法も週明けに試してみたいと思います。 こちらで、やりたかったことが実現出来たかどうか、お礼にて別途報告させて頂きます。
- gyouda1114
- ベストアンサー率37% (499/1320)
A列とB列をスペースを入れて繋ぐ。 これでできませんか =CONCATENATE(A2," ",B2)
補足
すみません、B列の数値をつなぐということではなく、A列のそれぞれのセルに入っている数値をつなげて、B列に入れたいということです。 説明が分かりづらくて申し訳ありませんでした。
- KURUMITO
- ベストアンサー率42% (1835/4283)
A列にあるデータを貼り合わせるのに一定のルールあると思うのですが、それがわかりませんので単にA1セルのデータとA2セルのデータを空白を作って合わせるのでしたら=A1&" "&A2のような式でよいでしょう。
補足
ちょっと説明不足ですよね。 A列には先頭にカテゴリーをしめす値(aaa)を含む数値が入っています。 B列には、その該当するカテゴリーの他のセルの数値を、スペースで区切って連結させたいということです。
お礼
ありがとうございます!!! まさにこれがやりたかったんです。 感謝感激です。