お世話になっております。
エクセルとはほとんど初対面といった状態で、四苦八苦している状況です。
今やりたいことは、下記のようなことです。
実現方法やアドバイスなど、何でもいいので教えてください。
宜しくお願いします。
シートA,シートBがある。
シートAは今回取込んだデータ。
シートBはこれまで取込んだ累計データ。
2つのシートの項目は同じで、複数列ある。
その中にキーとなる列がある。
(例:項目番号,項目名称,説明,etc 項目番号がキー)
(1)まず、シートAのデータを一旦消去し、CSVファイルを読み込む。
(2)次に、シートBの既存のデータとシートAのデータを比較する。
シートAにあってシートBにないデータは追加する。
シートAにあってシートBにもあるデータは上書きする。
(2)の方法が分りません。
シートAにあるデータがシートBにあるのかどうかと言うところはAdvancedFilterと言う関数を使って出来たのですが、追加/上書きと言うところが出来ません。
AdvancedFilter以外にもっと使いやすい関数があるのでしょうか?
それとも根本的にもっと違ったやり方があるのでしょうか?
ちなみに、別のデータベースを使うとかは不可です。
エクセルでやらないといけない仕様なのです。
宜しくお願いします。
No.3ベストアンサー
- 回答日時:
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
凄い!
完璧です!!
しかも速い!!!
教えて頂いて、直ぐに出来たのですが、どうしてこんなに簡単に出来るのか理解しようとして時間がかかってしまいました。
すみません...
本当にどうもありがとうございました。
No.2
- 回答日時:
》(2)の方法が分りません。
これはデータベースソフトのならではの仕事です。Excelでやろうとすると、極めて厄介です。すなわち、Accessや桐を使えば極めて簡単です。
》ちなみに、別のデータベースを使うとかは不可です。
》エクセルでやらないといけない仕様なのです。
私なら、桐で処理してその結果をExcelに書き出します。そして、余った時間をのんびりします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excelマクロ 差分抽出の方法が知りたいです。 2 2023/03/07 13:25
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- Excel(エクセル) VBAで、シート間の転記するコードを教えてください。 4 2023/03/26 10:43
- Excel(エクセル) Excelで、別シートの表のステータスに伴った動的な自動転記をしたいです。 2 2023/06/14 15:56
- Visual Basic(VBA) VBAで、1つのエクセルで、2つのシートからもう1つのシートに条件のある転記コードを教えてください。 1 2023/03/16 18:07
- Excel(エクセル) Excelマクロの差分抽出のコードを教えていただきたいです。 2 2023/03/14 11:40
- Visual Basic(VBA) Excel VBA 最終行を取得しVlookup関数をコピーする方法をコーディングで教えてください。 3 2023/05/11 13:14
- Excel(エクセル) エクセルシートのデータを1列飛ばしで別ブックのシートに貼り付けるマクロが知りたい 2 2023/06/05 22:37
- Visual Basic(VBA) エクセルについて教えてください。 3 2023/06/28 09:11
- Excel(エクセル) マクロか関数で処理したいのですが、教えて頂けませんか。 8 2022/10/31 15:18
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excel関数-文字列で自動作成さ...
-
エクセルの関数について教えて...
-
Excelデータをコピペして、ペー...
-
職場の人から聞かれており、こ...
-
ユーザー定義関数をアドイン登...
-
Excelで50個のセルに同じ文字を...
-
スプレッドシート、Excelでの数...
-
Microsoft Officeの中古は信用...
-
エクセルで不等号記号(≠)が上に...
-
スプレッドシートで使う数式を...
-
エクセルでの特別な文字を上に...
-
エクセル日付 文字列の関数がエ...
-
A列とB列を参照してC列に連番を...
-
エクセルVBA、別ブックへ転記す...
-
各ページの1番上の表示について
-
エクセルでセルに標準で入力さ...
-
EXCELの質問です 119から足した...
-
pdfの表をexcelにはりつけて計...
-
Excelのif関数で文字が見えなく...
-
【マクロ】アクティブセルにブ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルVBA、別ブックへ転記す...
-
エクセルでの作業計算方法について
-
時間によってファイル名が変わ...
-
【関数】適切な文字数の数字を...
-
Excelについて教えてください
-
エクセル初心者です 関数の入れ...
-
【マクロ】ファイル名の変更に...
-
UNIQUE関数が使えないバージョ...
-
エクセルの計算
-
【関数】先頭だけにある、半角...
-
Excelで、決まった行を繰り返し...
-
Excelでセルの値が同じか...
-
LOOKUP関数を使えばいいのでし...
-
Excel
-
はがきについて。
-
エクセルの条件付き書式につい...
-
エクセルのデーターが2か月前の...
-
エクセル②
-
エクセルで「-0.0」と表示さ...
-
Microsoft1Officeの互換ソフト...
おすすめ情報