単純なものにしたいので教えてください。
Sheet1「元データ」
A B C D
コード 商品 店名 納入日
1 0001 みかん A店 3/1
5 0360 メロン D店
6 かき P店
7 0312 キウイ D店
9 0333 くり C店
Sheet2「最新データ」
A B C D
コード 商品 店名 納入日
1 0001 みかん A店 3/1
4 0311 いちご B店 3/10
6 0250
8 0312 キウイ
とあった時に元データのA列の番号と最新データの番号を見て同じ物があったら、元データに最新データの内容をうつし込み、一致しなかったらチェックデータへうつしこむというデータがあります。
Dim Sh1 As Worksheet
Dim Sh2 As Worksheet
Dim Sh3 As Worksheet
Dim myR As Range
Dim N_D As Long
Dim i As Long
Set Sh1 = Worksheets("元データ")
Set Sh2 = Worksheets("チェックデータ")
Set Sh3 = Worksheets("最新データ")
With Sh1
For i = 5 To .Range("A65536").End(xlUp).Row
N_D = .Range("E" & i).Value
Set myR = Sh3.Range("A:A").Find(What:=N_D, LookIn:=xlValues, _
MatchCase:=False)
If Not myR Is Nothing Then
myR.Offset(, 2).Resize(, 3).Copy _
Destination:=.Range("B" & i & ":D" & i)
Else
addR_No = Sh2.Range("A65536").End(xlUp).Row + 1
.Range("A" & i & ":D" & i).Copy _
Destination:=Sh2.Range("A" & addR_No & ":D" & addR_No)
End If
Next
End With
ここで、データが一致した場合は無視して、一致しなかったときだけチェックデータに内容を書き込むとする場合はどのように修正すればよいのでしょうか?あと、チェックデータのあたまに
コード 商品 店名 納入日
という言葉を入れたいのですが、どのように書き込むのでしょうか?
No.1ベストアンサー
- 回答日時:
>ここで、データが一致した場合は無視して、一致しなかったときだけチェックデータに
>内容を書き込むとする場合はどのように修正すればよいのでしょうか?
If Not myR Is Nothing Then
myR.Offset(, 2).Resize(, 3).Copy _
Destination:=.Range("B" & i & ":D" & i)
Else
addR_No = Sh2.Range("A65536").End(xlUp).Row + 1
.Range("A" & i & ":D" & i).Copy _
Destination:=Sh2.Range("A" & addR_No & ":D" & addR_No)
End If
を以下のように変更
If myR Is Nothing Then
addR_No = Sh2.Range("A65536").End(xlUp).Row + 1
.Range("A" & i & ":D" & i).Copy _
Destination:=Sh2.Range("A" & addR_No & ":D" & addR_No)
End If
>あと、チェックデータのあたまに
>コード 商品 店名 納入日
>という言葉を入れたいのですが、どのように書き込むのでしょうか?
始めにコード 商品 店名 納入日を入力しておけば、特にプログラムで設定する必要は無いと思いますが、あえてやるなら
Set Sh3 = Worksheets("最新データ") の直後の行に
If Sh3.Range("A1").Value <> "コード" Then
Sh3.Rows(1).Insert
Sh3.Range("A1").Value = "コード"
Sh3.Range("B1").Value = "商品"
Sh3.Range("C1").Value = "店名"
Sh3.Range("D1").Value = "納入日"
End If
あと余計なお世話でしょうが、元データと最新データの比較という場合、最新データが元データにあるかチェックするのが普通だと思いますが、今のマクロでは元データが最新データに存在するかどうかのチェックになっていますが、これが実現したいことなのでしょうか?
なるほど!Notをとることで普通にIf文になるからすすめれるわけですね。
通常元データを中心にして考えるんでしょうが、今回は毎月最新データを中心にして考えて元データを作るというにしてます。
実際のデータは大量にあるので、大分進んできて楽しくなってきました。また細かい所で質問させていただきますのでよろしくお願いします。
No.2
- 回答日時:
何がしたいか2つのケースが考えられす。
(1)元データの中で売れてない(最新データにない)明細
(2)最新データにあるが、元データにない明細
例えば、マスタになくて、販売データにある明細
(1)らしいのですが曖昧。
下記は(1)でやって見ました。
Sub test01()
Dim Sh1 As Worksheet
Dim Sh2 As Worksheet
Dim Sh3 As Worksheet
Dim myR As Range
Dim N_D As Long
Dim i As Long
'---------
Set Sh1 = Worksheets("元データ")
Set Sh2 = Worksheets("チェックデータ")
Set Sh3 = Worksheets("最新データ")
'---------チェックデータ・シートに項目見だしを入れる
Sh2.Cells(1, "A") = "コード"
Sh2.Cells(1, "B") = "商品"
Sh2.Cells(1, "C") = "店名"
Sh2.Cells(1, "D") = "納入日"
'-----初期値設定
j = 2 'チェックデータ・シートに第2行目から
'---------元データの各行に付いて繰り返し
For i = 2 To Sh1.Range("A65536").End(xlUp).Row
N_D = Sh1.Range("A" & i).Value
Set myR = Sh3.Range("A:A").Find(What:=N_D, LookIn:=xlValues, _
MatchCase:=False)
If myR Is Nothing Then
'-----見つからなかった場合
Sh2.Cells(j, "A") = Sh1.Cells(i, "A")
Sh2.Cells(j, "B") = Sh1.Cells(i, "B")
Sh2.Cells(j, "C") = Sh1.Cells(i, "C")
Sh2.Cells(j, "D") = Sh1.Cells(i, "D")
j = j + 1 '次に書く行をポイント
Else
'見つかった場合何もしない
End If
Next
End Sub
質問のコードに誤り?の箇所があるようで、修正しました。出来るだけ原型を尊重しましたが、私の好みのスタイルになっている箇所があります。
(データ例)元データA1:D9
コード商品店名納入日
1みかんA店1月3日
360メロンD店
312かきP店
313キウイD店
333くりC店
344リンゴF店
322バナナD店
318ももA店
最新データA1:D7
コード商品店名納入日
1みかんA店1月3日
311いちごB店10月3日
250
313キウイF店
360メロンG店
344リンゴC店
(結果)チェックデータA1:D5
コード商品店名納入日
312かきP店
333くりC店
322バナナD店
318ももA店
とっても参考になりました。
結局のところ(1)も(2)も両方やりたかったりします。色々なシートに書き写すので。。
でも、とりあえず一つのことを教えてもらえば、あとは自分で考えようと思ってこのような曖昧な質問になってしまい、申し訳ありません。
大分進んできて楽しくなってきています。
また細かい質問いれますのでよろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 別シートのデータを参照して値を入れたい。 まとめデータシートのC列D列の値を商品一覧シートのコードが 7 2022/08/17 13:20
- Visual Basic(VBA) 2つのシートの任意のセルの番号が一致したら、一致した行をコピーする VBA 2 2023/06/19 20:48
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) 2つ目のコンボボックスが動作しません。 3 2023/03/25 12:29
- Visual Basic(VBA) VBAが止まります。 1 2022/09/02 14:51
- Visual Basic(VBA) 追記する列を増やしたい 2つのデータを検索・照合して元データにないデータを下記マクロで商品名を追記し 9 2022/10/05 10:50
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
- Visual Basic(VBA) エクセルVBAのコードで質問です。 下のコードはJ16の文字列をB3を起点とする範囲から探して、見つ 5 2023/04/07 11:07
- Visual Basic(VBA) vbaを早くしたい 5 2022/09/09 10:58
- Visual Basic(VBA) VBAが止まります。 3 2022/08/31 14:09
このQ&Aを見た人はこんなQ&Aも見ています
-
つい集めてしまうものはなんですか?
人間誰もは1つ「やたらこればかり集めてしまう」というものがあるもの。 あなたにとって、つい集めてしまうものはなんですか?
-
人生最悪の忘れ物
今までの人生での「最悪の忘れ物」を教えてください。 私の「最悪の忘れ物」は「財布」です。
-
【お題】引っかけ問題(締め切り10月27日(日)23時)
【大喜利】 「日本で一番高い山は富士山……ですが!」から始まった、それは当てられるわけ無いだろ!と思ったクイズの問題
-
この人頭いいなと思ったエピソード
一緒にいたときに「この人頭いいな」と思ったエピソードを教えてください
-
好きな和訳タイトルを教えてください
洋書・洋画の素敵な和訳タイトルをたくさん知りたいです!【例】 『Wuthering Heights』→『嵐が丘』
-
VBAでのリスト不一致抽出について
Visual Basic(VBA)
-
EXCEL VBA 一致しないデータの抽出及びデータ更新
Excel(エクセル)
-
エクセルVBAで 2種のリストを比べて重複していないデータを最下行に追加するには
Excel(エクセル)
-
-
4
A列にあってB列にはない単語をC列に残したいです。
Excel(エクセル)
-
5
離れた2列を比べて重複しないデータを隣の列に表示させる方法 Excel
Visual Basic(VBA)
-
6
VBA A列にありB列にないものまた逆
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・ハマっている「お菓子」を教えて!
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
教えて下さい
-
配列でデータが入っている要素...
-
多量のSUMIF式を軽くしたい
-
アクセス2000で画像データ...
-
【エクセル】測定時間がバラバ...
-
メモ帳(テキストデータ)をExc...
-
特定のデータの抽出方法を教え...
-
プログラミング python pandas ...
-
<VB>String→Object
-
ビットシフトについて
-
カンマからスラッシュに
-
EXCELVBAでSQLserverからデータ...
-
マクロVBAについて
-
大学のゼミのレポートがムカつ...
-
VBにおいてフォーム間の変数の...
-
シーケンサにパソコンからアク...
-
CSVダウンロードできる容量
-
VBA 円グラフ 特定条件に一致し...
-
Delphiで設定データの保存には...
-
Matlab:plotで特定の値だけをプ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
教えて下さい
-
【エクセル】測定時間がバラバ...
-
配列でデータが入っている要素...
-
メモ帳(テキストデータ)をExc...
-
VBA 空白セルを削除ではない方...
-
カンマからスラッシュに
-
VBA 円グラフ 特定条件に一致し...
-
EXCELVBAでSQLserverからデータ...
-
特定のデータの抽出方法を教え...
-
CString型の文字列連結について
-
[C言語] コメント文字列を無視...
-
エクセルで2つの時系列のデー...
-
多量のSUMIF式を軽くしたい
-
この行は既に別のテーブルに属...
-
ACCESSからEXCELに出力する際、...
-
Accessで該当データにフラグを...
-
ユーザーフォームのテキストボ...
-
モジュラス103の算出方法について
-
S9タイプからXタイプにデータ...
-
ブレーカー落ちで壊れたりしな...
おすすめ情報