[[20150910004904]] 『複数シート間での数値照合』(TOMOMIN) ページの最後に飛ぶ

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

 

『複数シート間での数値照合』(TOMOMIN)

複数シート間に入力したデータ(数値)を照合したい。

紙ベースの集金伝票をエクセルで集計しています。
集金グループABC
グループA
集金予定の金額をシート1のA列に入力
集金完了した金額をシート2のA列に入力
集金不能の金額をシート3のA列に入力

グループB
集金予定の金額をシート1のB列に入力
集金完了した金額をシート2のB列に入力
集金不能の金額をシート3のB列に入力

グループC・・・・

列ごとに
シート1に有るがシート2又は3に無いもの
シート1に無いがシート2又は3に有るもの
を照合して重複入力 誤入力 入力漏れを手早く見つけ出す方法はないでしょうか?
金額は同一のものも有ります。
シートのレイアウトは固定されているため新たな列を増やすことは困難です
該当セルに背景色を付けるか 使用していないセルに該当のセル番号を表示するなどの
方法があれば作業がしやすくなります。
COUNTIFやVLOOKUPを試しましたが指定された数値しか検索できないようです。

< 使用 Excel:Excel2010、使用 OS:Windows7 >


 もう構造がおかしすぎて手の出しようがない・・・というのが意見です。

 シート1に有って、シート2、シート3にないもの(シート2、シート3の入力忘れ)
 こういうことですよね?

 じゃあそのキーは何になります?
 金額しか入力しないなら、何を持って重複と見なしますか?
 行番号ですか?
 それなら新しいことしなくても、整合できますよね?

 >シートのレイアウトは固定されているため新たな列を増やすことは困難です 
 これが前提でしたら、もうキーを追加するなんて無理なんでしょうけど・・・
(稲葉) 2015/09/10(木) 08:26

 やってることは違いますが、少し参考になるかもしれない。

[[20150829101909]] 『未収金の消込作業』(やもめ)
(カリーニン) 2015/09/10(木) 08:30


 稲葉さんと同じ印象を持ちました。
 職場ではこのレイアウトでずっと運用されているんでしょうから、それに従って業務を行わなければいけないのでしょうが・・

 まず、根本的には、明細データを特定するキー(伝票番号 等々)が存在しない??。
 本当だとしたら、これは考えられませんね。

 また、同じデータの3つの情報を、わざわざ、わけて別シートにするから、このシートにあるのに、あっちのシートにはない とか、
 重複がないかとか、漏れがないかとか・・・そんな、余計な作業が発生するんですよ。

 わざわざ、仕事を増やすために考えられたレイアウト(いいすぎ?)
 同じ金額があるということは、勘違いして、別のデータに 不能 なんて記述するかもしれない。
 これは、もう、仕事が増えるというレベルをこえて、どうぞ、間違ってくださいといっているレイアウトです。

 予定 とか 完了 とか 不能 とか、そういった 【イベント】ごとにシートをわけるのではなく
 グループごとに別シートにするか、同じシートを使うかは別にして、1つのシートに、予定列、完了列、不能列を配置。
 そうすれば、そのシートを見れば、別のシートをひっくりかえして探さなくても進捗状況が一目瞭然だと思いませんか?

 ★ いずれにしても、データを特定するキーは【必須】ですよ。

(β) 2015/09/10(木) 08:42


Sub main()
'該当セル背景色が赤色=件数不一致(シート1に有るがシート2又は3に無いもの、シート1に無いがシート2又は3に有るもの)
'該当セル背景色が黄色=件数不一致(同一金額のものがあるため個別チェック要)

    Dim yotei() As Integer, kanryou() As Integer, hunou() As Integer, hantei() As Integer, cl As Range, maxval As Long, i As Long, g As Integer

    Sheets(1).Columns("A:C").Interior.Pattern = xlNone '集金予定
    Sheets(2).Columns("A:C").Interior.Pattern = xlNone '集金完了
    Sheets(3).Columns("A:C").Interior.Pattern = xlNone '集金不能

    For g = 1 To 3

        maxval = Application.Max(Sheets(1).Columns(g), Sheets(2).Columns(g), Sheets(3).Columns(g), 1)

        ReDim yotei(1 To maxval)
        ReDim kanryou(1 To maxval)
        ReDim hunou(1 To maxval)
        ReDim hantei(maxval)

        For Each cl In Intersect(Sheets(1).Columns(g).Cells, Sheets(1).UsedRange) '集金予定
        If Val(cl) > 0 Then yotei(Val(cl)) = yotei(Val(cl)) + 1
        Next cl

        For Each cl In Intersect(Sheets(2).Columns(g).Cells, Sheets(2).UsedRange) '集金完了
        If Val(cl) > 0 Then kanryou(Val(cl)) = kanryou(Val(cl)) + 1
        Next cl

        For Each cl In Intersect(Sheets(3).Columns(g).Cells, Sheets(3).UsedRange) '集金不能
        If Val(cl) > 0 Then hunou(Val(cl)) = hunou(Val(cl)) + 1
        Next cl

        For i = 1 To maxval
         If yotei(i) <> kanryou(i) + hunou(i) Then '予定<>完了+不能
         If yotei(i) + kanryou(i) + hunou(i) = 1 Then hantei(i) = 1
         If yotei(i) + kanryou(i) + hunou(i) > 1 Then hantei(i) = 2
        End If

        Next i

        For Each cl In Intersect(Sheets(1).Columns(g).Cells, Sheets(1).UsedRange)
        If hantei(Val(cl)) = 1 Then cl.Interior.Color = 255
        If hantei(Val(cl)) = 2 Then cl.Interior.Color = 65535
        Next cl

        For Each cl In Intersect(Sheets(2).Columns(g).Cells, Sheets(2).UsedRange)
        If hantei(Val(cl)) = 1 Then cl.Interior.Color = 255
        If hantei(Val(cl)) = 2 Then cl.Interior.Color = 65535
        Next cl

        For Each cl In Intersect(Sheets(3).Columns(g).Cells, Sheets(3).UsedRange)
        If hantei(Val(cl)) = 1 Then cl.Interior.Color = 255
        If hantei(Val(cl)) = 2 Then cl.Interior.Color = 65535
        Next cl

    Next g

End Sub
(mm) 2015/09/10(木) 13:19


返信が遅くなり申し訳ありません
元来紙ベースでの作業をしているのを
金額集計のみエクセルを使っているのでレイアウト構成がおかしいのは変えられません
紙に印刷した予定表を紙伝票と突合して消し込みする工程を容易にするために
予定のみ一枚のA4に収まるようにしてあります

(mm)さんの案を教本見ながら試してみたいと思います
(TOMOMIN) 2015/09/23(水) 00:12


コメント返信:

[ 一覧(最新更新順) ]


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