エクセルでのセルデータの分割方法

このQ&Aのポイント
  • エクセルでセルデータを分割する方法について説明します。
  • 共通する部分と共通しない部分を別のセルに分ける方法についても解説します。
  • VBAやマクロを使用して効率的に処理する方法も紹介します。
回答を見る
  • ベストアンサー

エクセルでのセルデータの分割方法

エクセル初心者ですのでわかりやすく教えていただけたらと思います。 仕事上急にデータの変更がありましたので早急に対応する必要に迫られています。  エクセル上、シート1と2にデータがあったとします。  シート1のデータからシート2にあるデータの共通する部分と共通する部分を除いたセル内のデータを別のセルに分けて作成したいと思います。また、毎日使用するので、VBAもしくはマクロで作成する場合どのようにしたらよいでしょうか? 教えていただけないでしょうか? 何万件もあるデータの中から照合して共通部分と共通部分でないデータを別々のセルに分けられればと思います。 見えにくいですがサンプル画像を添付しておきます。 アドバイスをよろしくお願いいたします。

この投稿のマルチメディアは削除されているためご覧いただけません。

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

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

No.1です。 補足に >1行目にはタイトルが入っています。 >シート1のc列に商品管理番号が並んでいて、 >シート2のB列には商品管理番号の一部が並んでいるのですが、 >シート1のC列とシート2のB列にある共通の部分を除いた数字もしくはアルファベットをシート1のDの列に表示 >共通の部分はシート1のEセルに表示できればと思います。 というコトですので↓のコードに変更してマクロを実行してみてください。 (操作方法は前回と一緒です) Sub Sample2() 'この行から Dim i As Long, k As Long, wS1 As Worksheet, wS2 As Worksheet Set wS1 = Worksheets("Sheet1") Set wS2 = Worksheets("Sheet2") Application.ScreenUpdating = False For i = 2 To wS1.Cells(Rows.Count, 3).End(xlUp).Row '←Sheet1の2行目~C列最終行まで(3は列番号でC列) For k = 2 To wS2.Cells(Rows.Count, 2).End(xlUp).Row '←Sheet2の2行目~B列最終行まで(2は列番号でB列) If InStr(wS1.Cells(i, 3), wS2.Cells(k, 2)) > 0 Then 'Sheet1のC列にSheet2のB列文字列が含まれている場合は With wS1.Cells(i, 3) .Offset(, 1) = Replace(wS1.Cells(i, 3), wS2.Cells(k, 2), "") .Offset(, 2) = wS2.Cells(k, 2) End With End If Next k Next i Application.ScreenUpdating = True End Sub 'この行まで ※ 1行・1列でも違った場合は予想外の表示になったり、何も表示されないという状態になりますので、 実データの配置を確認してみてください。m(_ _)m

pealhime
質問者

お礼

データを減らして実行してみたらうまくいきました。 親切な回答ありがとうございます。 大変助かりました。

pealhime
質問者

補足

親切に教えていただいてありがとうございます。 上記に記されているように実行したのですが、実行するとしばらくして画面が白くなって水色のリングが回りっぱなしになり”応答なし”と表示されるのですが、その場合データ量が多すぎて処理ができないのでしょうか? 当方初心者なものでよろしくお願いいたします。

その他の回答 (4)

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

sub macro2()  worksheets("Sheet1").select  application.screenupdating = false  range("D:D").insert shift:=xlshifttoright  range("D2:D" & cells(rows.count, "D").end(xlup).row).formula = "=COUNTIF(Sheet2!B:B,C2)"  application.calculation = xlcalculationmanual  range("D:D").autofilter field:=1, criteria1:=0  range("B:B").copy range("F1")  range("F1") = "除く"  range("C:C").autofilter field:=1, criteria1:="<>0"  range("B:B").copy range("E1")  range("E1") = "共通"  activesheet.autofiltermode = false  range("D:D").delete shift:=xlshifttoleft  application.calculation = xlcalculationautomatic  application.screenupdating = true end sub >あわてて説明が足りていませんでした。 それで? 寄せられた回答を自分で工夫してみるつもりはさらさら無くて、後出しの情報でまた書き直してくれという事ですね。

pealhime
質問者

お礼

ありがとうございました。 今後基礎から勉強してまいります。

pealhime
質問者

補足

不快な思いをさせて申し訳ありません。 当方初心者で申し訳ございません。 この問題が解決したら基本から学習しなおしてみます。

  • aokii
  • ベストアンサー率23% (5210/22062)
回答No.3

マクロはややこしいので、普通のエクセルでしたら、 別のシートに共通する部分のデータを作るには、 =IF(ISNA(VLOOKUP(Sheet1!A1,Sheet2!A:A,1,FALSE)),"",VLOOKUP(Sheet1!A1,Sheet2!A:A,1,FALSE)) で並べ替え 別のシートに共通する部分を除いたデータを作るには、 =IF(ISNA(VLOOKUP(Sheet1!A1,Sheet2!A:A,1,FALSE)),Sheet1!A1,"") で並べ替え ですが、何万件もあるデータでしたら、ExcelではなくAccessをお勧めします。

pealhime
質問者

お礼

ありがとうございました。

pealhime
質問者

補足

回答ありがとうございます。 あわてて説明が足りていませんでした。 シート1のB列に商品管理番号が並んでいて、シート2には商品管理番号の一部が並んでいるのですが、シート1と2の商品番号の並び順には共通性がないなかでシート1のA列にある共通の部分を除いた数字を表示させたいと思います また、共通の部分は共通の部分で別セルに表示できればと思います。 説明がうまく出来ずにすみません。

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

>何万件もある のでしたらホントはadvancedfilterの方がいいんですが。 sub macro1()  worksheets("Sheet1").select  range("1:1").insert shift:=xlshiftdown  range("B1") = "Title"  range("C1") = "Check"  range("C2:C" & cells(rows.count, "B").end(xlup).row).formula = "=COUNTIF(Sheet2!A:A,B2)"  application.calculation = xlcalculationmanual  range("C:C").autofilter field:=1, criteria1:=0  range("B:B").copy range("F1")  range("F1") = "NOT FOUND"  range("C:C").autofilter field:=1, criteria1:="<>0"  range("B:B").copy range("E1")  range("E1") = "EXIST"  activesheet.autofiltermode = false  range("C:C").clearcontents  application.calculation = xlcalculationautomatic end sub #ふつーなら、1行目にタイトル行、2行目からデータといった作り方をするのが常識ですが、そういう具合にシートを作成できていない前提のマクロです。 適切に修正して利用してください。

pealhime
質問者

補足

あわてて説明が足りていませんでした。 1行目にはタイトルが入っています。 シート1のc列に商品管理番号が並んでいて、シート2のB列には商品管理番号の一部が並んでいるのですが、シート1と2の商品番号の並び順には共通性がないなかでシート1のC列とシート2のB列にある共通の部分を除いた数字もしくはアルファベットを別のセルこの場合だとシート1のDの列に表示させたいと思います また、共通の部分は共通の部分で別にシート1のEセルに表示できればと思います。 説明がうまく出来ずにすみません。

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

こんにちは! VBAになってしまいますが、一例です。 >共通部分と共通部分でないデータを別々のセルに・・・ とありますが、どこに表示すれば良いのか判らないので、 Sheet1のC列に共通部分を! Sheet1のD列に共通部分でないデータを表示するようにしてみました。 Alt+F11キー → メニュー → 挿入 → 標準モジュール → VBE画面に ↓のコードをコピー&ペーストしてマクロを実行してみてください。 (Alt+F8キー → マクロ → マクロ実行です) Sub Sample1() 'この行から Dim i As Long, k As Long, wS1 As Worksheet, wS2 As Worksheet Set wS1 = Worksheets("Sheet1") Set wS2 = Worksheets("Sheet2") Application.ScreenUpdating = False For i = 1 To wS1.Cells(Rows.Count, 2).End(xlUp).Row For k = 1 To wS2.Cells(Rows.Count, 1).End(xlUp).Row If InStr(wS1.Cells(i, 2), wS2.Cells(k, 1)) > 0 Then With wS1.Cells(i, 2) .Offset(, 1) = wS2.Cells(k, 1) .Offset(, 2) = Replace(wS1.Cells(i, 2), wS2.Cells(k, 1), "") End With End If Next k Next i Application.ScreenUpdating = True End Sub 'この行まで こんな感じではどうでしょうか?m(_ _)m

pealhime
質問者

補足

あわてて説明が足りていませんでした。 1行目にはタイトルが入っています。 シート1のc列に商品管理番号が並んでいて、シート2のB列には商品管理番号の一部が並んでいるのですが、シート1と2の商品番号の並び順には共通性がないなかでシート1のC列とシート2のB列にある共通の部分を除いた数字もしくはアルファベットを別のセルこの場合だとシート1のDの列に表示させたいと思います また、共通の部分は共通の部分で別にシート1のEセルに表示できればと思います。 説明がうまく出来ずにすみません。

関連するQ&A

  • エクセルでのデータのあいまい検索のVBAについて

    VBAかマクロで作成したいと思いますが、あいまい検索ができずに困っております。 どなたかご教授お願いできますでしょうか? 一応画像を添付しておりますが大変見にくく申し訳ないです。  一つのファイルで2枚のワークシートを使用してデータのあいまい検索をしたいと思っております。 画像1の方のワークシートがSheet2になっていてこちらの”I”の列に入力しているデータが画像2になりますが登録商品リストの”G”の列に含まれているかを検索したいと思います。 その結果は”Sheet2”の緑色の部分”I”のセルにデータがあれば”*”をJのセルに表示したいと思います。 登録商品リストには長いもので桁数が30桁近いものもありますがこの桁数を8ケタくらいまでの一致でSheet2のIの列のデータと照合して結果をJに表示できればと思っております。何卒ご教授くださいますようお願いいたします。 照合するデータにつきましては、その日によって件数が違いますので、Sheet2のI列にあるデータが200件くらいの時もあれば2000件くらいの時もございます。 登録商品リストは登録するたびに量が増えていくので照合件数も増えていくことになりますので、どちらも1行指定でできればべすとだとおもっております。

  • アクセスでのセル内データの条件分割方法

    前回エクセルで質問したのですが、データがたくさんありすぎてエクセルでの作業では応答できません状態で処理ができませんので、アクセスでできればと思いご教授お願いいたします。 当方アクセスも初心者に近いので詳しくご教授お願いいたします。 アクセスにエクセルデータをインポートしてSheet1とSheet2というテーブルを作成してみました。 Sheet1にある品番の列のデータをSheet2にある商品管理番号と共通している部分と共通していない部分に分けたいと思います。 品番は60000.あります。商品管理番号は15000あります。 シート1とシート2の品番と管理番号の並びは相対していませんので探して照合していくことになります。 出てきたデータは”商品番号”と”サイズ”としてSHEET1のデータに追加した形で表示できればと思っております。 クエリでできるのではないかと思いますのでどうかご教授お願いでしませんでしょうか? 当方大変困って仕事に支障をきたしている次第です。 よろしくお願いいたします。

  • エクセルとデータの照合について

    エクセルとデータの照合について シート1に以下のような表を作成しました(上段) また、シート2にも以下のような表を作成しています(下段) 見にくいですが、要は同じデータが入っているのですが、入っているセルが 違うので、どんな関数や条件付き書式(色つき)を使って照合すればいいのかが わかりませんでした。 両者を見比べて照合をしたいのです。おもに上段の数字があっています。 初心者で申し訳ありませんが、教えてください。

  • エクセルのデータ入力をマクロで行う方法は?

    はじめまして。初めて質問させていただきます。 Excelで作業を行っていたのですが、マクロ(VBA?)で分からないことが出てきました。 Sheet1のQ6セルとQ7セルが結合されています。そこにはデータ(数式)が入力されています。 同様に、Q8とQ9、Q10とQ11・・・というように、データ(数式)が続いています。データ数は300個です。 他のシート(Sheet2)の A4セルから下に、先程のQ6セルのデータ A5セルにQ8のデータ・・・ というように書きたいのです。 これをマクロを組んで行うことは出来るのでしょうか? さらに、Sheet1で数式だったデータを文字列で保存できるとなお嬉しいです。 マクロ初心者ですいませんが、皆様のお知恵をお貸しください。よろしくお願いいたします。

  • エクセルで作成したリスト

    エクセルで作成したリスト(氏名・住所など10項目程度で200件ほどです)を各取引先ごとにブックを作成して(エクセルファイルでシートは6枚ある決まった書式です)ファイル名は取引先名にしたいのですがどのような方法がありますか? やはりマクロやVBAなどで作るのが一番でしょうか? マクロやVBAは初歩的な簡単なものは作ったことがありますがあまり詳しくありませんが出来るようなら挑戦してみたいのですがもしサンプルコードなど教えていただければお願いします。

  • Excelのシートを隠す方法

    Excelにて表作成をしえおります。 1枚のシートに定価と掛け率を入れて隠したデータを作りたいのですが、シートを隠す+保護+パスワード設定をしましたが、VBAにてシートがあることがわかってしまいます。VBA画面でもシートがあることがわからないようにする方法はありませんでしょうか?できればマクロは使わない方法にてお願いいたします。

  • Excel VBA 表の分割ってできます?

    Excel VBA 表の分割ってできます? Excelのバージョンは2007と19997です。 添付画像みたいに特定のデータを他のシートに別々に分割して出力することってできます? ※一個一個セルの値見てコピペするやり方は除いて!!! 簡単にExcelの機能か何かでできませんかね><なんか処理が重くならない良い方法をご教授願います。

  • EXCEL VBA シート内の特定のセルに値が入…

    EXCEL VBA シート内の特定のセルに値が入力された際に処理を実行するプログラム EXCELシート内の特定のセルに値が入力された際に処理を実行するプログラムをEXCEL VBAで作成したいと考えています。 EXCELに計測データを取込み、このデータが設定値以外の場合のみ、トリガーを出す様なイメージで使いたいと思います。 どの様に考えれば良いでしょうか?サンプル等ありましたら紹介ください。 上記質問の”トリガー”について補足します。 あるセルに値が入力されたら、マクロを実行するという風にしたいという意味です。 単純にマクロ実行を手動で行うのでは無く、ある値が判定値以外の場合に他アプリケーションを操作したいという意味です。。

  • VBAと照合について

    VBAと照合について 下記のような3枚のシート(上からシート1,2,3)をエクセル2007で作成しています。 シート1とシート2は全く同じ内容であるべきものです。 しかし、出所が違うため、両者のシートを照合して もし合っていれば、シート1を印刷したいのです。 なお、ここではあえて、1月4日分の売り上げは、わざと違う値を入力しています。 シート3にマクロのボタンを作成し、VBAで二枚のシートを照合し、メッセージボックスで 合っていれば印刷OK,違っていれば印刷中止にしたいのです。 IF関数までは理解でき、シート3のB2からE4までは=IF(sheet1!B2=sheet2!B2,"","×") 等で処理していて、違っているセルに条件付き書式で×を表示するようにしています。 ただ、関数ではなく、照合から印刷までをマクロで自動処理したいので、VBAコードが知りたいです。 よろしくお願いします。

  • エクセル【マクロ】について

    初心者です。 エクセルでシート1のA1からA10まで決めた文字(abc)という文字を検索して、検索文字があるセルの1行をコピーしてシート2のA1から下へ貼り付けるというマクロ(VBA)を作成したいと考えています。 詳しい方、よろしくお願いします。

専門家に質問してみよう