Sheet1には今月の、Sheet2には先月の顧客NO.、会社名、商品名、金額データがあります。Sheet1にはエリア情報がありますが、Sheet2にはありません。
これらエリア情報を除く4つのセルの内容、全てマッチしている行はそのままで、1つでも違う組み合わせのあるものがあれば、Sheet3ヘ移動したいのですが。。
つまり今月新しく上がってきたもののみを行ごと、別のシートに移動できればと思います。
下記のイメージです。
<Sheet1> 今月分
No. 会社 商品 金額 エリア
123 ABC商事 ペン ¥500 新宿区
456 DEFコープ ノート ¥200 渋谷区
789 GHI DVD ¥30000 中野区
113 UFP CD ¥25000 港区
<Sheet2> 先月分
No. 会社 商品 金額
155 XXX クリップ ¥4000
456 DEFコープ ノート ¥200
113 UFP CD ¥25000
<Sheet3> 今月NEW分
123 ABC商事 ペン ¥500 新宿区
789 GHI DVD ¥30000 中野区
どなたか分かる方いらっしゃいますか?
教えてください!!
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
ACCESS 2003 なら簡単にできます。
クエリで
二つのテーブルを比較すればよいわです。
______________________________________________________________
◆ Sheet1もしくはSheet2 にしか存在しないデータを抽出
Select No,会社,商品,金額 FROM Sheet1_TBL
INNER Join Sheet2_TBL
On key NOT ( Sheet1_TBL.No = Sheet2_TBL.No and
Sheet1_TBL.会社 = Sheet2_TBL.会社 and
Sheet1_TBL.商品 = Sheet2_TBL.商品 and
Sheet1_TBL.金額 = Sheet2_TBL.金額)
____________________________________________________________
このクエリを EXCEL でAccess と同じように Excelシートを
テーブルに見立てて ADO で抽出できます。
参考HP
→ ADO を使用して Excel ワークシートにクエリを実行する
http://www.microsoft.com/japan/technet/scriptcen …
を参考にプログラムを作成してみてください
No.2
- 回答日時:
NO1.です。
クエリに誤りがありました。
以下のクエリと置き換えてください。
___________________________________________________
SELECT *
FROM DATA1
where NOT EXISTS ( Select * from DATA2
where (DATA1.[No] = DATA2.[No])
AND (DATA1.会社 = DATA2.会社)
AND (DATA1.商品 = DATA2.商品)
AND (DATA1.金額 = DATA2.金額) )
_______________________________________________________________
以上
ありがとうございます。
頂いたサイトとNOBNNNさんからのクエリを元に修正したのですが、
SELECT のところで、コンパイルエラーが出てしまいます。
objRecordset.Open
SELECT * FROM DATA1
where NOT EXISTS ( Select * from DATA2
where (DATA1.[No] = DATA2.[No])
AND (DATA1.会社 = DATA2.会社)
AND (DATA1.商品 = DATA2.商品)
AND (DATA1.金額 = DATA2.金額) )
objConnection, adOpenStatic, adLockOptimistic, adCmdText
どこがいけないのでしょうか?
No.3
- 回答日時:
失礼しました。
複数テーブルの単純なクエリならSELECTできましたが
結合や Exsits は EXCEL ではできないようです。
Access にデータをインポートしてでの上記クエリを使用しての
操作はできます。
抽出後、Excel にエクスポートすれば簡単です。
もしくは上記参考HPの方法で行うには
Data1 側のみ Select でレコードセット 作成し、
data2 はEXCELで開きワークシートの操作で1件ずつ
データを検索してみれば可能かと思います。
やはりAccess上で行った操作が一番簡単です。
No.4
- 回答日時:
簡単なコードにも拘わらずなかなか回答が付かないようなので、一案。
Sheet1(今月分)1行目:見出し、 2行目~:データ
Sheet2(前月分)1行目:見出し、 2行目~:データ
Sheet3(抽出分)1行目:見出し、 2行目~:抽出データ
'------------------------------------------------------
Sub Test()
Dim R As Long
Dim LastRow As Long
Dim myCell As Range
With Sheets("Sheet3")
.Select
.Cells.Clear
End With
With Sheets("Sheet2")
For R = 2 To .Range("A65536").End(xlUp).Row
.Cells(R, "G") = .Cells(R, "A") & .Cells(R, "B") & .Cells(R, "C") & .Cells(R, "D")
Next R
End With
With Sheets("Sheet1")
For R = 2 To .Range("A65536").End(xlUp).Row
.Cells(R, "G") = .Cells(R, "A") & .Cells(R, "B") & .Cells(R, "C") & .Cells(R, "D")
Next R
For R = 2 To .Range("A65536").End(xlUp).Row
Set myCell = Sheets("Sheet2").Columns("G").Find(.Cells(R, "G"), , xlValues, xlWhole)
If myCell Is Nothing Then
LastRow = Sheets("Sheet3").Range("A65536").End(xlUp).Row + 1
.Rows(R).Copy Sheets("Sheet3").Cells(LastRow, "A")
End If
Next R
.Rows(1).Copy Sheets("Sheet3").Cells(1, "A")
End With
Sheets("Sheet3").Columns("G").Delete xlShiftToLeft
Sheets("Sheet2").Columns("G").Delete xlShiftToLeft
Sheets("Sheet1").Columns("G").Delete xlShiftToLeft
End Sub
'--------------------------------------------------------------------------------
コードを見てもらえれば分かると思いますが、
Sheet1,2 の”No.と会社と商品と金額”を結合したものを使用してない列(今回は、G列)にセットしそれを検索に使ってます。
また、Sheet3の見出しは、Sheet1の見出しをコピーしてます。
それから、も少し短いコードで、かつ作業列を使わない方法もありますが、それだとデータ件数が多いと遅くなるので速い方法にしました。
質問では「移動」となってますが、一応、「コピー」にしてあります。
以上です。
kobouzu_suさん
ありがとうございした。
.Rows(R).Copy Sheets("Sheet3").Cells(LastRow, "A")を
.Rows(R).Copy Sheets("Sheet3").Cells(R, "A") に変更して成功しました!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA For Each 〜 複数条件について 3 2022/10/20 20:05
- Excel(エクセル) SUMIFSと日付変換 10 2023/04/16 15:38
- Visual Basic(VBA) VBAコードが作動せず、どこに問題があるのか教えて下さい。 3 2023/06/13 13:20
- Excel(エクセル) VBAで同フォルダ内の別ブックを開かず参照して条件の一致する行の指定セルを抽出するには? 1 2022/07/21 19:29
- Excel(エクセル) Excel 売上管理シートに入力した売上データを、日報に自動反映させたいと考えています。 売上管理シ 3 2023/04/29 18:08
- その他(Microsoft Office) 従業員増減対応で当番種類の増減対応な当番表 21 2022/07/19 07:30
- Excel(エクセル) Excelで日報を自動で作成したい 売上管理シートに入力した売上データを、日報に自動反映させたいと考 1 2023/04/29 18:07
- Visual Basic(VBA) 改行ごとに行を追加し、数量を分割 4 2023/07/11 16:39
- その他(プログラミング・Web制作) pythonでクラスで複数のメソッドを利用する方法 2 2022/04/15 04:17
- Excel(エクセル) EXCEL 関数を教えてください。(A列の同じ値が複数ある場合vlookupで出来ますか) 4 2022/12/07 20:54
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
教えて下さい
-
配列でデータが入っている要素...
-
【エクセル】測定時間がバラバ...
-
S9タイプからXタイプにデータ...
-
メモ帳(テキストデータ)をExc...
-
この行は既に別のテーブルに属...
-
VBにおいてフォーム間の変数の...
-
VBA 空白セルを削除ではない方...
-
大学のゼミのレポートがムカつ...
-
エクセルで2つの時系列のデー...
-
[C言語] コメント文字列を無視...
-
VBAを使ってOutlookメール本文...
-
ユーザーフォームのテキストボ...
-
シーケンサにパソコンからアク...
-
C# でDataTableの更新を高速化...
-
EXCELVBAでSQLserverからデータ...
-
Excelのマクロでワードのテキス...
-
0が含まれる幾何平均が「#NUM!」
-
WEBサイトの構築。表示データと...
-
CString型の文字列連結について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
教えて下さい
-
【エクセル】測定時間がバラバ...
-
配列でデータが入っている要素...
-
多量のSUMIF式を軽くしたい
-
エクセルで2つの時系列のデー...
-
Excelのマクロでワードのテキス...
-
メモ帳(テキストデータ)をExc...
-
VBA 空白セルを削除ではない方...
-
VBAを使ってOutlookメール本文...
-
Accessで該当データにフラグを...
-
合計3TBのデータのハッシュ値を...
-
シーケンサにパソコンからアク...
-
S9タイプからXタイプにデータ...
-
カンマからスラッシュに
-
VBAでシートからコンボボックス...
-
VBA 毎日取得するデータを順番...
-
ビットシフトについて
-
ユーザーフォームのテキストボ...
-
EXCELVBAでSQLserverからデータ...
-
特定のデータの抽出方法を教え...
おすすめ情報