お世話になっております。
エクセルとはほとんど初対面といった状態で、四苦八苦している状況です。
今やりたいことは、下記のようなことです。
実現方法やアドバイスなど、何でもいいので教えてください。
宜しくお願いします。
シート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ランキング
-
【関数】スペースがいくつ入っ...
-
西暦や和暦の表示をyyyymmdd表...
-
【Microsoft Office Excel Comp...
-
Excelはなんで先頭の0を消すん...
-
Excelのセルを飛ばして入力する
-
別シートからの文字を変更
-
エクセルの行の抽出について質...
-
Excelのオートフィル
-
Excel 2019 のピボットテーブル...
-
スプレッドシート クエリ関数 1...
-
excelの不要な行の削除ができな...
-
Excel初心者です。 詳しい方、...
-
【Excel】セル内の時間帯が特定...
-
Excel初心者です。 詳しい方、...
-
EXACT関数とIF関数の組み合わせ...
-
Excelのグラフ軸について
-
スマートな関数を教えて下さい。
-
Excelで全角を半角にしたいので...
-
【マクロ】エクセルにかいてあ...
-
Excel:一部のフォントでセルの...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ファイル内にある数字の出現回...
-
Excel関数の先頭に「@」が入っ...
-
エクセルの気味悪い不思議
-
Excel VBAで、実行時にsheet上...
-
表示されている人数だけを数え...
-
他人が作ったマクロの理解
-
Excelの関数について質問です。
-
Excel 集計表
-
エクセル 日時の計算式について
-
Excelの関数に関して質問です。...
-
エクセル:セル内の文字列の下...
-
絞り込み検索
-
エクセルの関数で
-
エクセルの書式設定について教...
-
余分なEXCELファイルに印刷され...
-
VBA 同一シート内での転記の仕方
-
長期休みの関数はありますか
-
Excelの空のセル
-
エクセルで入力してある文を別...
-
Excelのマクロで、セルを結合し...
おすすめ情報