• ベストアンサー

共通データのある複数のセルを1つにまとめる

宜しくお願いします。 Excelで住所録を編集したいのですが、 画像の様に、B列の文字(市町村区)が一致する場合、 以降の住所を同じセルでまとめたいのですが、 関数でできることなのでしょうか? 画像の上が元データになります。 下画像のAB列は、入力済みとお考えください。 C列に関数を入れ、該当データを引っ張ってきたいです。 まとめられたデータに区切り等は不要です。 お分かりの方はお力添えください。 宜しくお願いいたします。

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

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

元のデータがシート1に有るとし、A,B,C列にお示しのデータが1行目は項目名で2行目から下方にあるとします。 DおよびE列は作業列として、お求めの表はシート2に表示させることにします。 シート1のD2セルには次の式を入力して下方にドラッグコピーします。 =IF(B2="","",IF(B1=B2,D1&C2,IF(B1<>B2,C2,""))) E2セルには次の式を入力して下方にドラッグコピーします。 =IF(B2="","",IF(COUNTIF(B$2:B2,B2)=COUNTIF(B:B,B2),MAX(E$1:E1)+1,"")) なお、1万行にも及ぶデータの場合にはD2およびE2セルをコピーしてから、名前ブックスでD2:E10000と入力して確定すればそのセル範囲が指定されますので右クリックして貼り付けを操作すればよいでしょう。 シート2では1行目を項目名などにしてA2セルには次の式を入力しC2セルまでドラッグコピーしたのちに下方にもドラッグコピーします。 =IF(ROW(A1)>MAX(Sheet1!$E:$E),"",INDEX(Sheet1!$A:$D,MATCH(ROW(A1),Sheet1!$E:$E,0),IF(COLUMN(A1)<=2,COLUMN(A1),IF(COLUMN(A1)=3,4,10)))) これでシート2には予めAおよびB列にデータを入れておく必要はありません。自動的に表示されます。

totoko8839
質問者

お礼

望む通りの結果を得られました。 ありがとうございます。 昨日4時間以上かけて行った12000行のデータ処理が、 教えていただいた関数では、10程度で終了しました。 残り10万近いデータをどうしようか悩んでいましたので 本当に助かりました。 大感謝です!ありがとうございました♪

その他の回答 (3)

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.4

No.1です! 前回のコードは同一Sheetでの操作のコードでした。 お礼欄を見ると、 (1)Sheet1にC列までのデータがあり、Sheet2にB列までのデータしか入っていない (2)希望の操作はSheet2で行いたい! というコトですよね? Sheet2のSheet見出し上で右クリック → コードの表示 → VBE画面に 前回同様↓のコードをコピー&ペーストしてマクロを実行してみてください。 両Sheetともデータは1行目からあるとします。 Sub test() 'この行から Dim i, k As Long Dim ws As Worksheet Set ws = Worksheets("Sheet1") Application.ScreenUpdating = False For i = Cells(Rows.Count, 1).End(xlUp).Row To 2 Step -1 If Cells(i, 1) = Cells(i - 1, 1) And Cells(i, 2) = Cells(i - 1, 2) Then Rows(i).Delete End If Next i For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row For k = 1 To ws.Cells(Rows.Count, 1).End(xlUp).Row If ws.Cells(k, 1) = Cells(i, 1) And ws.Cells(k, 2) = Cells(i, 2) Then Cells(i, 3) = Cells(i, 3) & ws.Cells(k, 3) End If Next k Next i Columns.AutoFit Application.ScreenUpdating = True End Sub 'この行まで こんな感じではどうでしょうか?m(_ _)m

totoko8839
質問者

お礼

ありがとうございます。 そして、お手数おかけしました。 お蔭さまで、望む結果を得られました。 然しながら、5000行を超える処理を一度に行うと相当時間がかかってしまいます。 また、データを追加した際の継続処理は、関数の方がマッチしていました。 1000件程度の処理なら、教えていただいたマクロの方が手間が少ないので、 部分的な処理で利用させていただきます。 私のために時間を割いていただき、ありがとうございました。

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.2

丁寧に手を動かしていけば別に何もムズカシイことをせずとも、猿でも結果を得られます。 添付図: ご相談のような作り方をしないで、1行目にはふつーにタイトル行を記入します。 D2セルには =C2&IF(A2&B2=A3&B3,D3,"") と記入して、リストの下端までコピー貼り付けます E2セルには =IF(A2&B2<>A1&B1,D2,"") と記入してリストの下端までコピー貼り付けます 必要ならオートフィルタを設定し、E列を「空白ではない」で絞り込んで全体をコピー、シート2にでも貼り付けます。

totoko8839
質問者

お礼

早速のご回答ありがとうございました。 また、私の説明不足をお詫びします。 元データが数万行でしたので、 手作業ではちょっと…、でご質問させていただきました。 お答えいただいた数式でもいけそうです。 ありがとうございます。

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.1

こんばんは! 関数で!というのがご希望のようですが、仮にできたとしてもかなりの数式になると思います。 (簡単にできる方法があればごめんなさい) そこでVBAになってしまいますが・・・一例です。 画面左下の操作したいSheet見出し上で右クリック → コードの表示 → VBE画面に ↓のコードをコピー&ペーストしてマクロを実行してみてください。 (Alt+F8キー → マクロ → マクロ実行です) データは画像通り、1行目からあるとします。 Sub test() 'この行から Dim i As Long For i = Cells(Rows.Count, 1).End(xlUp).Row To 2 Step -1 If Cells(i, 1) = Cells(i - 1, 1) And Cells(i, 2) = Cells(i - 1, 2) Then Cells(i - 1, 3) = Cells(i - 1, 3) & Cells(i, 3) Range(Cells(i, 1), Cells(i, 3)).Delete (xlUp) End If Next i Columns.AutoFit End Sub 'この行まで ※ 関数ではないのでデータ変更があるたびにマクロを実行する必要があります。 参考にならなかったらごめんなさいね。m(_ _)m

totoko8839
質問者

お礼

丁寧なご回答をありがとうございました。 私のためにお手数かけていただき感謝いたします。 教えていただいたマクロを実行してみました。 AB列の重複行は削除されますが、C列に値を取得できませんでした。 <Sheet1>   A列    B列    C列 1 東京都  渋谷区  上原 2 東京都  渋谷区  鶯谷町 3 東京都  渋谷区  宇田川町 4 東京都  板橋区  相生町 5 東京都  板橋区  赤塚 6 東京都  板橋区  小豆沢 <Sheet2>   A列    B列    C列 1 東京都  渋谷区 2 東京都  渋谷区 3 東京都  渋谷区 4 東京都  板橋区 5 東京都  板橋区 6 東京都  板橋区 マクロ実行結果(Sheet2)   A列    B列    C列 1 東京都  渋谷区 2 東京都  板橋区 ご迷惑でなければ、もう少し面倒みていただけないでしょうか 宜しくお願いいたします。

関連するQ&A

  • 一部データの一致するセルを並べ替える

    エクセル2000での質問です。以下の文字データが一列上に並んでいます。 あか☆あいうえお あか☆かきくけこ あさを☆さしすせそ あさを☆たちつてと あさを☆なにぬねの これを あか☆あいうえお,かきくけこ あさを☆さしすせそ,たちつてと,なにぬねの のように「☆以前が一致する」セルを行単位でまとめて行きます。 ※2列目以降の「***☆」はできれば排除したいです。 データ数は約1200行です。文字データ内の文字数は不定です。 よろしくお願い致します。

  • 一つのセルにあるデータを項目別に複数列に分割したい

    一つのセルにあるデータを項目別に複数列に分割したいです。 初歩な質問かも知れませんが教えて下さい。Excel 2010使用です。 一つのセルに「」に囲まれた項目別のデータが全て詰まっています。「」に囲まれた複数の文字列は項目名が書かれているのですが、これを分割し、列の先頭に項目名を付けて分割したいです。A2のセルから1列にデータが入っており、セル内にある項目は「郵便番号」「住所」「氏名」「電話番号」「誕生日」「血液型」。 これを分割していきたいのですが、必ずしも全てのデータが入っているわけではなく、データが欠けているものがあります。添付の2行目のような結果を出す関数やマクロなど、わかりましたらご教授いただけないでしょうか・・・。(画像が小さいため、A列とB~G列と分割しました。わかりづらくスミマセン。) たくさん調べたのですが、なかなか当てはまるものが見つからず、お力を貸してください。。

  • CSV 1つのセルに改行されてるデータを加工2

    お世話になります。 エクセル、VB開発者の皆様からご解答を頂戴しました。ありがとうございました。 ひとつひとつ確めさせていただきます。本当にありがとうございます。 補足をというお声もありましたので、 データが本当に3行に改行されているかを確認してみました。 添付画像の住所の表示方法は、折り返しで表示を解除してあります。 上段に、セルの内容を見えるようにしました。3行になっています。 これを、全データに対して、一度に行える、マクロ、BV、または関数での 達人者の方からのお知恵を、スキルをお借りできればと切に思っております。 どうぞよろしくお願い致します。 *住所1、住所2、住所3は、私が挿入した列で、CSVに落としたときには、ないものです。

  • エクセル2007 複数セルのデータを1つに連結

    いつもお世話になります。 エクセルで、複数セルのデータを1つに連結して表示させる方法を教えてください。 データ件数が多い(1000件以上)ため、 関数(CONCATENATE)や、連結記号(&) は、セルを1つずつ選択する時間が掛かるため、 その他に方法があれば教えてください。 また関数(CONCATENATE)でセル範囲をドラッグなど簡単に指定できる方法があれば教えてください。 【やりたいこと】  A列が同じデータの場合、B列の値をC列のセルに連結して表示させたい 【イメージ】 A列 B列 C列 xxx aaa aaa bbb ccc ddd eee xxx bbb xxx ccc xxx ddd xxx eee yyy ffff fff ggg hhh yyy gggg yyy hhh zzz iii iii jjj zzz jjj

  • Excelデータの照合

    Excelデータの照合 こちらでも色々調べさせて頂いたのですが、自分のデータにうまくあてはめられず困っています。 Excelの元データ、入力データがあります。 元データが正規のデータで、入力データにモレがないか、ミスがないかをチェックする為に 照合をしたいんですけど、どうやったらうまく出来るかわかりません。 是非ご教授下さい。 元データ、入力データ共に2列あり、どちらも A列・・・コードナンバー B列・・・コードナンバーに対応する金額 が入力されています。 これは今現在は同一シート内に抜き出してありますが、元は別シートです。 なので別シートにあるものとして回答頂いても結構です。 入力データの中から、元データのA列、B列共に一致するものだけを抽出することは出来ますか? 不一致もしくは該当するデータがないものと、一致しているものが区別で切れば形式は何でもOKです。 (作業列を増やすとか、色分けするとか、文字で表示するとか) 出来ればVBAやマクロを使わず関数のみでお願いします。 検索を使うからVLOOKUP? 複数条件だからIF?? と色々考えましたが、2つセットで検索をかけるのがどうしても出来ず・・・(-_-;) よろしくお願いします!!

  • 完全一致したら複数のセル代入するマクロは?

    エクセルのSheet1のa列にある文字列と、Sheet2にあるa列にある文字列と完全一致したら、前者のセルの右隣から3番目までのセルに、後者のセルの右隣から3番目までの文字列を順に代入するマクロをお教えください。単純にvlookup関数を使えばいいのですが、VBAで行いたいのです。複数のセルに順に代入するのに苦慮しています。よろしくお願い申し上げます。

  • セルに入力したデータと同じデータを抜き出す

    エクセル2002を使っています。 画像の様なシートがあり、B2セルに入力した文字を、FXセルの上から10個抜き出します。 その10個のデータの関連セルのデータごと、、緑で色づけされた部分に表示させるには、どうしたらよいでしょうか? 詳しい方、よろしくお願いいたします。 ■ ■ 出来れば関数のみで実現したいです。

  • セル内の文字列操作について

    Excelでセル内の文字列を操作したいのですが、Excelの標準の関数では出来そうにないので、どなたかお力をお貸しください。 1つのセル内に、文字列や数値が複数入っています。 (例) Excel 12 りんご Word 11 このセルを調べて、数値のデータが複数入っている場合、最大値のみを表示させ、残りの数値データは削除したいのです。 (結果) Excel 12 りんご Word この処理の対象はセル内の数値データであって文字列には作用させず、結果的には文字列はそのまま表示させたいのです。 Excelの文字列に関する関数を調べてみたのですが、該当するものがなく、VBAを使用しなくてはならないのかもしれません。処理するデータが大量なため、VBAマクロなどで処理できれば大変ありがたいのですが、どなたかご存知の方がいらっしゃいましたら、ご教授くださいませ。どうぞよろしくお願いいたします。

  • 複数セルから文字列を検索して・・・

    どう検索していいのかわからなかったので質問します。 複数のセルから特定の文字列を検索して、該当したセルに対応するB列の数字の合計を関数によって出したいです。 例えば画像を例にすると、A列で"()"という文字列が入っているセルがいくつかあります。 これらのセルに対応するB列の数字の合計を出したいです。 "()"は必ず文字列の末尾にくることとします。 回答よろしくお願いします。

  • Excel同一セル内の、アルファベットと数字を別々のセルに置き換える方法を教えてください

    ExcelのA列のセルに、アルファベットと数字の組み合わせが3000行くらい入っています。 アルファベットは1~5個でA~Z、 数字は1~3個で0~9  全て半角です。 の組み合わせです。アルファベットと数字の配置は A1    A12    A123 AB1 AB12 AB123 HD167 SDM12 WB987 の組み合わせです。 (アルファベットと数字はそれぞれまとまっていて、入り混じることはありません) これを、   A  B  C   1 A1  A   1 2 A12 A 12 3 A123 A 123 4 AB1 AB 1 のように、アルファベットと数字を別々にセルに置き換えたいのです。 マクロを使わず、B列以降のセルを使って関数でできないでしょうか? よろしくお願いいたします。

専門家に質問してみよう