[[20200102220305]] 『2つのブックを比較して処理』(momo) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『2つのブックを比較して処理』(momo)

AブックとBブックがある。
アクティブになってるのはBブックでAブックは開く
AブックのB列のデータとBブックのB列のデータ情報が一致した場合、
AブックのC列のデータに文字列でOKと入力するには
VBAでどのように書けばいいでしょうか。
Aブック
  A B C
1 a c 
2 a f
3 a d

Bブック
  A B C
1 a  a 
2 a c
3 a a

上記の場合、"c"が一致しているのでAブックを
以下にしたい。

  A B C
1 a c OK
2 a f
3 a d

宜しくお願い致します。

< 使用 Excel:Excel2016、使用 OS:Windows10 >


 おはよ〜ございます。 ^^
様々な方法が有るとは思いますが下記の様な事でも
出来なくはないかと。。。思います。
1.Aブックが有れば開く(無ければ終了)
2.Aブックの最初の行から最後までB列の値をBブック
  のB列の値(最初から最後まで)と照合して同じで
  あればAブックの同じ行のC列にOKを書き込む
3.Aブックを保存して閉じる
4.必要で有ればオブジェクトの解放
m(_ _)m
(隠居じーさん) 2020/01/03(金) 09:08

おはようございます。

2.Aブックの最初の行から最後までB列の値をBブック
  のB列の値(最初から最後まで)と照合して同じで
  あれば

ここが自分にはVBAで書くには難易度が高く挫折してしまいました。

(momo) 2020/01/03(金) 09:55


 2回ループを回すか、ループは一回で
Matchを使うとかで行けるとは思いますが、
ご説明した方が良いでしょうか、サンプルを
アップした方が良いでしょうか。
両方。。。でせうか ^^;
でわでわ m(_ _)m
(隠居じーさん) 2020/01/03(金) 11:22

 とりあえず。。。こんな感じかと。
A、Bブックは同じフォルダ内
両方とも処理対象シート名は
Sheet1
で

 Option Explicit
Sub OneInstance()
    Dim i             As Long
    Dim j             As Long
    Dim Wsb           As Worksheet
    Dim AB            As Workbook
    Dim BB            As Workbook
    Dim Anm           As String
    Set BB = Workbooks("B.xlsm")
    Set Wsb = BB.Worksheets("Sheet1")
    Anm = Dir(BB.Path & "\A.xls*")
    If Anm <> "" Then
        Set AB = Workbooks.Open(BB.Path & "\" & Anm)
        With AB.Worksheets("Sheet1")
            For i = 1 To .Cells(.Rows.Count, 1).End(xlUp).Row
                For j = 1 To Wsb.Cells(Wsb.Rows.Count, 1).End(xlUp).Row
                    If .Cells(i, 2) = Wsb.Cells(j, 2) Then
                        .Cells(i, 3) = "OK"
                    End If
                Next
            Next
        End With
        AB.Close True
    End If
    Set Wsb = Nothing
    Set AB = Nothing
    Set BB = Nothing
End Sub
(隠居じーさん) 2020/01/03(金) 11:34

こんにちは。

考え方のヒントとして。

手作業だったらどうすればできる?と考えるとコードの参考になりそうです。
100個のデータ対100個のデータだと思いつかないなら、
3個対3個で考えてみたり
3個対1個や、1個対3個で考えたり

規模を小さくして手順を考え それから規模を拡大して一般化するのは、使える方法です。

(−佳−) 2020/01/03(金) 11:52


みなさま

ありがとうございます!
(momo) 2020/01/03(金) 16:46


こんな感じでも

1)Aブックを開く
2)C列に数式を挿入 =IF(COUNTIF(…
3)C列をコピー
4)そのまま値貼り付け
5)Aブックを保存して閉じる

( マナ) 2020/01/03(金) 22:50


>2.Aブックの最初の行から最後までB列の値をBブック
> のB列の値(最初から最後まで)と照合して同じで
> あれば
>ここが自分にはVBAで書くには難易度が高く挫折してしまいました。

■1
横からですが、他の部分は出来そうなのであれば、どこで躓いているか説明するためにも、動かないまでもとりあえず現状のコードを提示頂いた方がよいと思います。

■2
確認ですが、質問だとB列同士しかチェックしないような書きぶりですから、下記の様なケースであれば「OK」で良いのでしょうか?

 【Aブック】                【Bブック】
  __A__B__C__               __A__B__C__
 1  a  c                   1  a  a 
 2  a  f                   2  a  c
 3  a  d                   3  a  a
 4  b  b                   4  a  b

 【Aブック】 
  __A__B__C__
 1  a  c OK
 2  a  f
 3  a  d
 4  b  b  ? ←【Bブック】の該当シートのA列は一致してないが、B列に「b」が存在する場合は?

■3
今回のケースで言えば実際には
Aブックの【○○シート】に属するB列のセル ←比較→ Bブックの【××シート】に属するB列全体
ということになるので、対象"シート”を意識(説明)された方がよいと思います。 

(もこな2) 2020/01/04(土) 11:21


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.