マンガでよめる痔のこと・薬のこと

エクセルで2つのファイルを比較し、編集上書きするマクロを教えて下さい。

マクロ・VBAを最近勉強し始めたものです。

まずデータの元となる、詳細データ(1)ファイルがあります。
毎日、CSV形式で新しいデータを取り込み、
取り込んだファイルは詳細は抜けているので、
詳細内容を調べて打ち込み、(1)にどんどん保存していっています。

CSVファイルで、特定のデータ(2)を取り込んだとき、
以前、詳細内容は調べて、(1)に入れているので
(1)から取り出して、(2)に記入するようにしたいです。

図で書くと
「ファイル(1)」
品番 価格 割引 担当 レジ
111 2000 500 小杉 山田
112 2500 600 三木 田中
113 3000 700 小杉 田中

「ファイル(2)」
品番 価格 割引 担当 レジ
111 2000
113 3000

のように、詳細内容がありませんので
エクセルのA行に記入されている品番で比較して、
B行以降はすべて上書きという作業をしたいです。

(1)と(2)は別ファイルですが、
別ファイルでの操作が難しければ、
同じファイル内の別シートに入れます。

この操作をする時のマクロを教えて下さい。
行き詰まって分からないのでお力を貸して下さい。
文章力がなく申し訳ありませんが、よろしくお願い致します。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

マクロの自動記録から修正してません。

添付図参照
Sub Macro1()
Range("G1").Select 'G1セル選択
Selection.CurrentRegion.Select '[Ctrl]+[Shift]+[*]
Selection.SpecialCells(xlCellTypeBlanks).Select '[Ctrl]+[G]ジャンプ ●空白セル
Selection.FormulaR1C1 = "=INDEX(C[-6],MATCH(RC7,C1,0))" '数式を入力して[Ctrl]+[Enter]
End Sub

H2:K3セル(H2セルアクティブ)に入力した数式は
=INDEX(B:B,MATCH($G2,$A:$A,0))
[Ctrl]押しつつ[Enter]
あとは応用です。

>A行に記入されている
A列、B列と呼びます

>B行以降はすべて上書きという作業をしたいです
B列は入力されているようなら、上記マクロではあわない可能性があります。
「エクセルで2つのファイルを比較し、編集上」の回答画像2
    • good
    • 0

まず最初に


個々の回答者はご質問者がマクロの何が分っていて何が分らないかが分りません
マクロを組む時の考え方のみの解説が必要なのか
全体のコードを回答としてほしいのか、一部のみで良いのか
コードの詳細な説明も必要なのか
マクロを使う必要もない状態、関数式のみで解決する場合でもマクロの回答が必要なのか

状況が見えません

行き詰ってわからないと言われても何で詰まっているかを明確にしないと丸投げ扱いと見なされます

前置きはこの辺で、回答ですが
質問の条件だけであればVLOOKUP関数の利用で解決します

どうしてもマクロ化したいのであれば
・B列以降にVLOOKUP関数での表示計算式を入力
・シート全体をコピーして値のみの貼り付け
上記動作をマクロの記録で記録すればマクロ化できます

この回答への補足

申し訳ありません。

コードを教えて頂きたく質問しました。

VLOOKUP関数だと、
エクセルのB行C行D行E行~とコピーしたい行が沢山あるけれども、
行ごとに1回1回関数を入力しないといけないと聞きましたので、
コードで、一度にできるのであれば、コードが良いと思った次第です。
もしよろしければ
関数だと、どういった関数式になるのか教えて頂けないでしょうか。

まだ、初歩的な事しか分かっていないのですが、
どうしても急ぎで必要で、
教えて教えてになってしまい本当に申し訳ありません…。

補足日時:2010/05/31 16:09
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qエクセルで異なるシートのデータを比較したり、コピーしたりしたい

お世話になっております。
エクセルとはほとんど初対面といった状態で、四苦八苦している状況です。

今やりたいことは、下記のようなことです。
実現方法やアドバイスなど、何でもいいので教えてください。
宜しくお願いします。

シートA,シートBがある。
シートAは今回取込んだデータ。
シートBはこれまで取込んだ累計データ。
2つのシートの項目は同じで、複数列ある。
その中にキーとなる列がある。
(例:項目番号,項目名称,説明,etc 項目番号がキー)

(1)まず、シートAのデータを一旦消去し、CSVファイルを読み込む。
(2)次に、シートBの既存のデータとシートAのデータを比較する。
 シートAにあってシートBにないデータは追加する。
 シートAにあってシートBにもあるデータは上書きする。

(2)の方法が分りません。
シートAにあるデータがシートBにあるのかどうかと言うところはAdvancedFilterと言う関数を使って出来たのですが、追加/上書きと言うところが出来ません。
AdvancedFilter以外にもっと使いやすい関数があるのでしょうか?
それとも根本的にもっと違ったやり方があるのでしょうか?
ちなみに、別のデータベースを使うとかは不可です。
エクセルでやらないといけない仕様なのです。
宜しくお願いします。

お世話になっております。
エクセルとはほとんど初対面といった状態で、四苦八苦している状況です。

今やりたいことは、下記のようなことです。
実現方法やアドバイスなど、何でもいいので教えてください。
宜しくお願いします。

シートA,シートBがある。
シートAは今回取込んだデータ。
シートBはこれまで取込んだ累計データ。
2つのシートの項目は同じで、複数列ある。
その中にキーとなる列がある。
(例:項目番号,項目名称,説明,etc 項目番号がキー)

(1)まず、シートAのデータを一旦消去...続きを読む

Aベストアンサー

VBAでの処理で良ければ、次の手順でテストしてみてください。

> シートAのデータを一旦消去し、CSVファイルを読み込む。

読み込みましたら、セルA1を Wクリックするだけで、ご希望どおり処理されます。

> 既存のデータとシートAのデータを比較する。

比較するのは、 キーになっている「項目番号」だけでいいのですね。

[操作手順]

・CSV読み込みシート(シートA)のシート名タブを右クリックして「コードの表示」を
 指定します。
・開いたコードウィンドウに下記コードをコピーして貼り付けます。
 必要により、コードの2~3行目を実情に合わせ変更します。
・Alt+ Q (または、右上隅の×)でウィンドウを閉じ、シートに戻ります。
・メニューから[ツール]-->[マクロ]-->[セキュリティ]で「セキュリティレベル」を
 「中」にして[OK]します。
・以上で設定完了です。 

これで、A1をWクリックすると、指定したシートのキー列に同じデータがあれば、
その行を上書きし、無かったら、一番下にデータを追加します。

これで如何でしょうか。

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Const RuikeiShN = "シートB" ' <--- 累積データ シート名指定
Const Col = "A" '  <----------- キー列指定
Const TopRow = 2 ' <-------------- データ先頭行指定(見出しを除く)
Dim Rng As Range
Dim R As Range
Dim Res As Integer
If Target.Address <> "$A$1" Then Exit Sub
Cancel = True
Res = MsgBox(RuikeiShN & " の累積データを更新しますか?", vbYesNo + vbExclamation)
If Res = vbNo Then Exit Sub
For Each Rng In Range(Col & TopRow, Range(Col & 65536).End(xlUp))
  Rng.EntireRow.Copy
  With Worksheets(RuikeiShN)
    Set R = .Range(Col & ":" & Col).Find(Rng.Value, lookat:=xlWhole)
    If R Is Nothing Then
      .Paste Destination:=.Range(Col & 65536).End(xlUp).Offset(1).EntireRow
    Else
      .Paste Destination:=R.EntireRow
    End If
  End With
Next Rng
Application.CutCopyMode = False
Set R = Nothing
End Sub

VBAでの処理で良ければ、次の手順でテストしてみてください。

> シートAのデータを一旦消去し、CSVファイルを読み込む。

読み込みましたら、セルA1を Wクリックするだけで、ご希望どおり処理されます。

> 既存のデータとシートAのデータを比較する。

比較するのは、 キーになっている「項目番号」だけでいいのですね。

[操作手順]

・CSV読み込みシート(シートA)のシート名タブを右クリックして「コードの表示」を
 指定します。
・開いたコードウィンドウに下記コードをコピーして貼り...続きを読む

Q2つのシート間での重複データのチェック

Excelについて教えてください。
以下の2つのシートがあります。

Sheet1
すずき 03-0000-0000
やまだ 03-1111-1111
たなか 03-2222-2222

Sheet2
03-1111-1111
03-4444-4444
03-0000-0000
03-2222-2222

Sheet1には名称と電話番号、Sheet2には別所から抽出した電話番号のみのデータがあります。
Sheet1のデータの中からSheet2に電話番号があるものだけを知りたいのですが、たとえばSheet1の 各行のC列 に Sheet2に一致する番号があった場合は●等付けるにはどうすればよいでしょうか。

よろしくお願いします

Aベストアンサー

シート1のC列に式を入れます。
=IF(ISNA(VLOOKUP(B1,Sheet2!A:A,1,FALSE))=TRUE,"-","●")

【式の説明】
シート1のセルB1の値が、シート2のA列に、存在する場合は●を、存在しない場合は-をセット。


人気Q&Aランキング