• ベストアンサー

複数セルを結合して一つのセルにしたい

エクセル関数の質問です。 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

質問者が選んだベストアンサー

  • ベストアンサー
  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.3

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

tico1981
質問者

お礼

ありがとうございます!!! まさにこれがやりたかったんです。 感謝感激です。

その他の回答 (6)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.7

>、数字が並んでいます と言ってながら、aaa_0002 などは文字列のはず。言っていることが判らない。 > aaa_0001  aaa_0002 aaa_0003 aaa_0002  aaa_0001 aaa_0003 aaa_0003  aaa_0001 aaa_0002 B列は(A列データを結合するにしても)組み合わせているのではないか? もしそうなら、その組み合わせのルールはどうなっているか。(注) ーー 色々質問しているが、セルの値の結合は「&」かCONKATENATEしかないのだから、自分で考えること。 他の点で判らない点を中心に質問のこと ーーー >表題の、「複数セルを結合して一つのセルにしたい、」などは、絶対関数では出来ないので、文字通りだと変な質問(の表現)である。 「複数セル値を結合して一つのセルに入れたい」、とでもすれば、正当になる。 >VBAやマクロ、ユーザー定義関数になっても構いません。 質問者が経験無いのなら、丸投げになるから、こういうことは言うべきでない。 ==== 色々言ったが (注)の部分を補足してほしい。

tico1981
質問者

補足

失礼しました。 先に頂いたVBAでの方法で解決出来たのですが、他にもご回答をいただいていたので、そちらの回答の方の方法も週明けに検討してから解決済にしようとしていたので、更に回答を受けつている形になっていて申し訳ありませんでした。 おっしゃる通りで組み合わせのルールについて書いていませんでしたね。 同カテゴリーの数値(例では分かりやすくするためにローマ字にしました。)のA列にある数値以外の他のセルを一つのセルに結合して入れたいということでした。 ご指摘ありがとうございます。

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.6

ご質問のケースで答えを得るために関数で対応すつためには次のようにしてはどうでしょう。 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,""))

tico1981
質問者

お礼

ご回答ありがとうございます。 C列を使ってカテゴリーの各数値に番号を振るんですね。 勉強になりました。 同カテゴリーの最大の個数が決まっていればこちらで、対応出来ると思います。 有効な情報を教えていただきまして、本当にありがとうございました。

tico1981
質問者

補足

こちらの方法も週明けに試してみたいと思います。 こちらで、やりたかったことが実現出来たかどうか、お礼にて別途報告させて頂きます。

  • gyouda1114
  • ベストアンサー率37% (499/1320)
回答No.5

>B列の数値をつなぐということではなく、A列のそれぞれのセルに入っている数値をつなげて、B列に入れたいということです。 例えば C列に =CONCATENATE(A2," ",B2) C列をコピー → 形式を選択して貼り付け → 値 → B列を削除 以上でA列のセルをB列に繋げたのと同じになりますが

tico1981
質問者

お礼

すみません、私の書き方の問題で、質問の意図が伝わらなかったようです。 既にご回答いただけたVBAでのマクロ処理で問題は解決済ですが、他にご回答いただいている方の方法も試したのちに回答を締め切りたかったので、再度ご回答いただいてしまい申し訳ありませんでした。 お気に留めていただいて、ありがとうございました。

回答No.4

ユーザ定義関数の一例です。 一応、それなりにエラー処理もしたつもりです。 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) という感じです。

tico1981
質問者

お礼

ご回答ありがとうございます。 こちらも試してみたのですが、うまく使うことができませんでした。 問題は私が書いた例があまりよくなかったということで、例の通りの数値なら問題なく使えました。 ありがとうございました。

tico1981
質問者

補足

こちらの方法も週明けに試してみたいと思います。 こちらで、やりたかったことが実現出来たかどうか、お礼にて別途報告させて頂きます。

  • gyouda1114
  • ベストアンサー率37% (499/1320)
回答No.2

A列とB列をスペースを入れて繋ぐ。 これでできませんか =CONCATENATE(A2," ",B2)

tico1981
質問者

補足

すみません、B列の数値をつなぐということではなく、A列のそれぞれのセルに入っている数値をつなげて、B列に入れたいということです。 説明が分かりづらくて申し訳ありませんでした。

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.1

A列にあるデータを貼り合わせるのに一定のルールあると思うのですが、それがわかりませんので単にA1セルのデータとA2セルのデータを空白を作って合わせるのでしたら=A1&" "&A2のような式でよいでしょう。

tico1981
質問者

補足

ちょっと説明不足ですよね。 A列には先頭にカテゴリーをしめす値(aaa)を含む数値が入っています。 B列には、その該当するカテゴリーの他のセルの数値を、スペースで区切って連結させたいということです。