• ベストアンサー

エクセルでの比較データコピー

エクセル2010でマクロを組んでデータ処理を簡単に行いたいのですが、 よくわからないので、教えてください! シート2のC列とシート1のD列を比較し、同じ文字列があった場合に シート2のE列をシート1のF列にコピーする。 ただし、シート2のE列に〇が入っている場合は、シート2のG列をシート1のF列にコピーする。 どなたかご教示いただけませんか? よろしくお願いします!

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

  • ベストアンサー
  • watabe007
  • ベストアンサー率62% (476/760)
回答No.4

No3です。 >シート2の検索文字列がシート1の検索文字列と一致した場合で、 >シート2のE列に〇があった場合に、〇をコピーするのではなく、 >シート2のG列をシート1のF列へコピーするのは こちらでは問題なく処理されていますが 'シート2のC列の文字とシート1のD列の文字が一致した場合 If Not IsError(myR) Then   'C列の二つ右隣(E列)の値が〇の時   If c.Offset(, 2).Value = "〇" Then     'シート1のF列にシート2のC列のに四つ右隣(G列)の値をコピー     .Cells(myR, "F").Value = c.Offset(, 4).Value   Else     .Cells(myR, "F").Value = c.Offset(, 2).Value   End If End If >シート2のE列に〇が 〇 が正しく記載されていないのでは (セルに書かれている"〇"とコードの"〇"を確認してください。) 〇 ○ 0 o O

higedebuhot
質問者

お礼

早々に回答ありがとうございます! うまくいきました! 本当に助かりました。情報の少ない中、的確にご回答頂きまして ありがとうございました!

higedebuhot
質問者

補足

早々に回答ありがとうございます! うまくいきました! 本当に助かりました。情報の少ない中、的確にご回答頂きまして ありがとうございました!

その他の回答 (3)

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.3

参考に Sub Test()   Dim c As Range, myR As Variant   With Worksheets("Sheet1")     For Each c In Worksheets("Sheet2").Columns(3).SpecialCells(2)       myR = Application.Match(c.Value, .Columns(4), 0)       If Not IsError(myR) Then         If c.Offset(, 2).Value = "〇" Then           .Cells(myR, "F").Value = c.Offset(, 4).Value         Else           .Cells(myR, "F").Value = c.Offset(, 2).Value         End If       End If     Next   End With End Sub

higedebuhot
質問者

補足

ご回答ありがとうございます。 情報不足にも関わらず、ここまで作って頂いて・・・。 シート2の検索文字列がシート1の検索文字列と一致した場合で、 シート2のE列に〇があった場合に、〇をコピーするのではなく、 シート2のG列をシート1のF列へコピーするのは If Not IsError(myR) Then以下になりますか? ○がコピーされてしまい、どこを触れば良いか 教えて頂けますと助かります。 よろしくお願いします。

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.2

 御質問文の説明内容だけでは情報不足なため、どの様な処理を行いたいのかが判りません。 >シート2のC列とシート1のD列を比較し、同じ文字列があった場合にシート2のE列をシート1のF列にコピーする。 >ただし、シート2のE列に〇が入っている場合は、シート2のG列をシート1のF列にコピーする。 との事ですが、その文字列のデータは、シート1のD列の何行目から入力されているものなのでしょうか?  もし、1行目から処理を開始してしまう様にしてしまいますと、シート2のE列の一番上に入力されていた項目名が、シート1のF列の項目名の所にコピーされてしまいます。  それに、シート1のD列の中に、シート2のC列には存在していない文字列が入力されていて、尚且つ、シート1のF列やG列には既に何らかのデータが入力済みとなっていた場合にはどうすれば良いのでしょうか?  元々入力されていたデータをそのまま残さなければならないのでしょうか?  それとも、シート1のその行のF列とG列のセルのデータは消去した方が良いのでしょうか?  又、シート1のD列に入力されている文字列と同じ文字列が、シート2のC列に存在していて、尚且つ、シート2のE列に〇が入っている場合には、シート1のその行のF列のデータはそのまま残しておいた方が良いのでしょうか、それとも消去した方が良いのでしょうか?  又、シート1のD列に入力されている文字列と同じ文字列が、シート2のC列に存在していて、尚且つ、シート2のE列に〇が入っていない場合には、シート1のその行のG列のデータはそのまま残しておいた方が良いのでしょうか、それとも消去した方が良いのでしょうか?  又、シート1のD列が空欄となっていた場合には、シート1のその行のF列とG列のデータはそのまま残しておいた方が良いのでしょうか、それとも消去した方が良いのでしょうか?

higedebuhot
質問者

補足

コメントありがとうございます。下記回答致します。 情報不足ですみません。。。よろしくお願いします。 ●との事ですが、その文字列のデータは、シート1のD列の何行目から入力されているものなのでしょうか? もし、1行目から処理を開始してしまう様にしてしまいますと、シート2のE列の一番上に入力されていた項目名が、シート1のF列の項目名の所にコピーされてしまいます。 →両シート共に2行目からデータが入っています。 1行目はそれぞれのデータのタイトルが入っています。 ●それに、シート1のD列の中に、シート2のC列には存在していない文字列が入力されていて、尚且つ、シート1のF列やG列には既に何らかのデータが入力済みとなっていた場合にはどうすれば良いのでしょうか? 元々入力されていたデータをそのまま残さなければならないのでしょうか? それとも、シート1のその行のF列とG列のセルのデータは消去した方が良いのでしょうか? →上書きで処理できればと思っています(消えても問題ないということです)。 基本的には同じデータは1度しかでてこないと仮定してのことになります。 ●又、シート1のD列に入力されている文字列と同じ文字列が、シート2のC列に存在していて、尚且つ、シート2のE列に〇が入っている場合には、シート1のその行のF列のデータはそのまま残しておいた方が良いのでしょうか、それとも消去した方が良いのでしょうか? 又、シート1のD列に入力されている文字列と同じ文字列が、シート2のC列に存在していて、尚且つ、シート2のE列に〇が入っていない場合には、シート1のその行のG列のデータはそのまま残しておいた方が良いのでしょうか、それとも消去した方が良いのでしょうか? →シート1のF列は空欄になっている状態です。今回シート1のG列に データは入力しません。 ●又、シート1のD列が空欄となっていた場合には、シート1のその行のF列とG列のデータはそのまま残しておいた方が良いのでしょうか、それとも消去した方が良いのでしょうか? →シート1のD列は空欄はありません。

  • kkkkkm
  • ベストアンサー率65% (1620/2459)
回答No.1

同じ文字列って?セルの内容(文字列)が同じという意味?それともセルの内容の一部の文字列が一致したらという意味? そもそも何が良くわからないのでしょうか? 検索がわからない? 比較がわからない? コピーがわからない? そもそもマクロを知らない?としたら話にならない(笑) 仕様を示すのでマクロを無料で作成してくださいという話だとしたら、仕様が適当過ぎてこれもお話にならない(笑) まともな仕様を書けば誰かが気まぐれで作ってくれるかも(笑) か、とても親切な人が現れて、いちいち細かく打ち合わせしてお望みのものを作ってくれる、もしくは、たまたまテレパシーが伝わってお望みのコードができあがる。 かも(笑)

higedebuhot
質問者

補足

不十分な内容ですみません・・・。

関連するQ&A

  • エクセルのデータ比較

    シート1のA行のデータとB行のデータをすべて比較して、同じデータがあれば C列にそのデータを書き出したいのですが、どうすればよろしいのでしょうか。 行数(比較するデータの数)はそれぞれ数千行あります。 例(a~hはデータです) シート1     A列 B列 a c b d  c f d h の場合、比較した結果をC列に次のように表示させます。 A列 B列  C列 a c c b   d d c f d h どなたかよろしくご教示くださるよう、お願いします。

  • エクセルでのデータの照合

    お世話になります。WindowsXPエクセル2003を使っているマクロ初心者です。 A B C D E F G 1 2 3  1 2 2 2 3 4  2 3 4 3 4 5  2 4 5 4 5 6  4 4 6 5 6 7  5 6 8 (左グループを元データ、右グループを加工データとします) A列とE列・B列とF列・C列とG列…という流れでデータを比較し、 元データと値の違うセルの色を変え、赤の太字にするようなマクロを作るには どのように書けばいいのでしょうか。 上記例の場合では、E3・F5・G2・G7のセルを変化したいということになります。 条件付書式でも試してみたのですが、なかなかうまくいかなかったため、 これからマクロに触れる機会も増えることを考えて、マクロで対応したく思い、 連絡させていただきました。宜しくお願いいします^^

  • Excelデータコピーについて

    どうファイルのシートにデータをコピーする処理を 自動化したいのですが、 シート1のB列、C列、E列入ったデータを シート2のC列、D列、H列に出力。 のようなことをやりたいのですが、 あらかじめシート2に=セル番地で明示的にやっておけば できますが、関数を入れておくとファイルが重くなってしまうので、 シート1のデータがある分、出力させる処理を作りたいです。 自動化できる方法がありましたら教えてください。

  • エクセルのCSV取り込み、加工について

    こんばんは。 エクセルファイルの特定のシート(仮にsheet1としましょう)に任意名のCSVファイル外部データの取り込み→テキストファイルウィザード取り込み (取り込む形はカンマ区切り、全ての列が文字列、一部の列を削除で) その後にsheet1のある列と同一ファイルの他のシート(sheet2としましょう)のある列をマッチングさせて一致する行だけsheet1一部の列のデータ(E、F、Gのデータとしましょう)からデータをsheet2のE、F、Gにコピーするようなマクロを作る場合どのようなマクロを作るのでしょうか? お願い致します。

  • エクセルデータ比較・同一商品コードの増加分のみ出力

    A列に商品コード、B列に数値(値段)入力してあるところに、 別のファイルの商品コードと数値をCとDにコピーしました。 同じ商品コードで、Bの値よりDの値が大きい場合、 その商品コードと上昇分のみをE・F列に出力する方法を教えてください。 *A・B列は商品コード順ですが、C・D列は順序がまばらです。 *C・D列を別シートに用意して、A・B列と比較でもOKです。 _______A_____________B____________C_____________D______________E__________________F 商品コード______値段_____商品コード______値段_____商品コード______値段(上昇分) ITEM-00001____1000___ITEM-00002_____1200 ___ITEM-00002___ 400 ITEM-00002______800___ITEM-00005______900 ___ITEM-00003___ 500 ITEM-00003____2000___ITEM-00001______900 ITEM-00004______600___ITEM-00003____2500 ITEM-00005____1000___ITEM-00004______600 ・1万列以上扱いたいので、処理に負荷がかからない方法が好ましいです。 ・操作ミスをしないよう、1回の処理でEとFの列を出力する方法が望ましいです。 ・マクロでも良いのですが、マクロを利用した経験がありません。 ・使用しているエクセルは2010です。 説明が分かりやすいように箇条書きにしたところ、 少々ぶっきらぼうな文章になってしまいました。 よろしくお願いします。

  • Excelデータ比較

    エクセルにおいて、sheet2のA列、B列、C列をsheet1のA列、B列、C列と比較して、一致した場合sheet2のD列に書かれている納入先企業名を下記のように自動入力したいのですが、どうやってsheet2のD列に関数を組めばよいのか分からないので教えてください! 【sheet1】 A列 B列 C列 D列 1行 001 AAAA 部品1 A社 2行 002 BBBB 部品2 B社 3行 003 CCCC 部品3 C社 4行 004 DDDD 部品4 D社 5行 005 EEEE 部品5 E社 6行 006 FFFF 部品6 F社 7行 007 GGGG 部品7 G社 【sheet2】 A列 B列 C列 D列←この列に取引先企業が入るようにする 1行 001 AAAA 部品1 A社←sheet1にあるのでA社と入る 2行 008 HHHH 部品8 #N/A←sheet1にないので#N/Aとなる 3行 004 DDDD 部品4 D社 4行 009 IIII 部品9 #N/A 5行 005 EEEE 部品5 E社 6行 002 BBBB 部品2 B社 7行 010 HHHH 部品10 #N/A

  • 数値比較と並べ替え

    エクセルシート(またはカンマ区切りのCSVテキスト)のA~Dに名前1列と数値3列が入っています。 これとは別にE~Gに比較対象データが3列あります。 3列で1セットで、BとE、CとF、DとGがそれぞれ対応しています。 E~Gの値をB~Dの値とそれぞれ比較して、最も近いセットを探し出し、(A~DとE~Gを)同行に並べ替える必要があります。DとEの間は空いていてもかまいません。 またこれとは別に、E~G列列の比較対象値セットがB~D列のどのセットにも適合しない(しきい値を超えた)場合は一番下の行以下に順に配列する必要があります。 すべての数値は -5000.000~5000.000 (最大)で、しきい値は1にしたいと思っています。 データ数は最大で150行程度です。ただしAからDまでのデータセットと、EからGまでのデータセットが同じ行数とは限りません。 簡単にいえば、B±1かつ、C±1、D±1の範囲にあるデータセットを探して並び替えたいと言うことです。 私が今考えているのは、BとE、CとF、DとGの各値はほとんど一緒なのでまず差分を求めて一番差が少ないセットの組み合わせを求めればこれら機能を実現できそうな気がします。 ただ、これを実現するためのスクリプトが、良くわかりません。 最も簡単に書けそうなのはVBAでしょうか、JAVAでしょうか。そういったマクロを作れそうな参考サイトなど何でもいいので、ご教授いただけると幸いです。

  • エクセルのマクロで特定の文字があるときだけコピーできるようにしたい

    エクセルのマクロで特定の文字があるときだけコピーできるようにしたい エクセルでこういう表があるとします ココカラ 1 * 2 b 15 3 * 4 d 19 5 e 25 6 * 7 g 35 8 * 9 j 46 10 k 54 ココマデ このような表があるとき、マクロを使ってもしB列に「*」以外の文字(この場合アルファベットのb) があるときは左のセル(2)をずっと下のセルにコピー(仮にA50とします)した後、右のセル(15)をB51にコピー、 次は文字が「*」なのでコピーはせずにd列になったら4と19をC50,D51にコピー・・・ という作業をセルに「ココマデ」と書いているところまで繰り返す、というマクロを作りたいのですが、どうすれば いいのでしょうか?

  • エクセルの列から行へコピーするBVA教えて下さい

    エクセルのVBA(マクロ)について、素人なので教えてください。 下記のようなデータ変換を行がある限り変換するVBAマクロです 列1列2列3列4列5列6列7列8 社員1 A B C D E F G H 社員2 H I J K 社員3 L M 社員4 O P Q R ↓   列1列2 社員1 A B 社員1 C D 社員1 E F 社員1 G H 社員2 H I 社員2 I J 社員3 L M 社員4 O P 社員4 Q R 違うエクセルシートへ行がある限り、コピーを繰り返す。 BVAの解説付きだと助かります

  • EXCEL マクロ

    EXCEL マクロで、「セルB4とC4の文字が、同じだったら、セル範囲B6~D10をコピーして、セル範囲E6~G10に貼り付ける」という処理を行わせたいと思います。 そこで、文字の比較で、”同じだったら”という記述方法がわかりません。#VALUEになってしまいます。 文字が同じ場合は、セル範囲をコピーして張り付けるという処理です。よろしくお願いします。

専門家に質問してみよう