ここから本文です

VBA 詳しい方お願いします。

アバター

ID非公開さん

2020/6/300:24:52

VBA 詳しい方お願いします。

初心者です。

同じ書式の別ファイルデータ(同じ列)を比較して同じ値がない場合は処理を実行して、1つでもあった場合は処理をしない。

と言う事をやりたくて調べてます。

下記のサンプルを参考にすると
withで比較するファイルと範囲を指定して
Set c = .Findで比較対象と照らし合わせ
ifで処理と言う感じですか?
Do loopは必要なし?


Sub Sample3()
Dim c As Range
Dim firstAddress As String

With Worksheets("DB").UsedRange.Columns(1)

Set c = .Find(What:=Range("B1").Value, _
LookIn:=xlValues, LookAt:=xlPart) '---(1)

'条件に当てはまるセルがあるかどうかを判定
If Not c Is Nothing Then
'最初のセルのアドレスを覚える
firstAddress = c.Address

'繰返し検索し、条件を満たすすべてのセルを検索する
Do
c.Resize(1, 3).Copy Destination:= _
Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
Set c = .FindNext(c) '----------------------(2)
If c Is Nothing Then Exit Do
Loop Until c.Address = firstAddress
End If
End With
End Sub

閲覧数:
12
回答数:
1

違反報告

回答

1〜1件/1件中

nar********さん

2020/6/611:17:16

サンプルコードの処理は、
対象シート(DB)のA列使用範囲でB1セルの値を探し、
当てはまるすべてのセルを取得する、というものです。

質問者様のやりたいことというのは、
ファイルAとファイルBのA1セル同士、A2セル同士、、、を比較したいということでしょうか?
その場合は、サンプルコードのやり方はそぐわないかと。

異なるファイルの、同じ場所同士を比較するのであれば、もっとシンプルです。

Workbooks("ファイルA.xlsx").Worksheets("シートA").Cells(行, 列)
Workbooks("ファイルB.xlsx").Worksheets("シートB").Cells(行, 列)

上記の2つの値がイコールなら即終了、そうでなければ比較を繰り返し、処理をする、という流れになります。



Dim wsA As Worksheet, wsB As Worksheet, row As Long, col As Long

'比較したいファイル・シート
Set wsA = Workbooks("ファイルA.xlsx").Worksheets("シートA")
Set wsB = Workbooks("ファイルB.xlsx").Worksheets("シートB")

'比較したい列(仮にA列とします)
col = 1

'行の初期値
row = 1

Do
If wsA.Cells(row, col) = wsB.Cells(row, col) Then
Exit Sub '一致した時点で処理を終了します
End If
row = row +1
Loop Until wsA.Cells(row, col)="" And wsB.Cells(row, col)=""


上記ループでは、ファイルAとファイルBの比較したいセルが共に空欄ならループを終了しています。
行数が固定ならForでループさせたほうがいいです。

  • アバター

    質問者

    ID非公開さん

    2020/6/922:02:34

    回答ありがとうございます。
    初心者の自分にも分かりやすいサンプルコードで助かります。
    ですが、自分がやろうとしている内容は比較対象となるファイル列は固定ですが行が不定期となっています。固定の列の内容か比較対象の列のどこかにあった場合と言う事になります。

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる