[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『可変行列マトリクスの内容確認』(yuu)
教えてください!
シートをまたがる
列・行数が可変する表(座標:マトリクスとでもいいますか)の
内容チェックをしたいのですが、良案が浮かばず困っています。
条件としては、
商品CDが縦(行)に 店舗CDが横(列)に入っていて、
その売り上げ値が座標軸に明記されている(ようするにピボットのようなもの)があります。
AのシートにはALLデータが
Bのシートには Aのシートの中から一部(例えば「あるグッズを販売している店舗」という条件があるもの)が
Cのシートには A-Bシートが・・・
入っているはずなのですが、
B+C=Aにならないらしく、相互チェックをしたいのです。
尚、Bのシート・Cのシートの行列の配置が
Aのシートとは(対象レコードが異なるため)同じものになりません。
よって、単純に「Vlook」や「Hlook」で確認することができないため、悩んでいるわけです。
※また、何か別の条件も入っているようで、並び順も安易に「番号順」にはなっていません。
しかも、座標になる前のデータからであれば相互チェックも簡単に思えるのですが、
既存のシステムから「座標データ」を直接取り出してしまっているため、それができません。
→システムの見直し・改修をしている時間と予算が厳しいため、
「チェックツール」で今を乗り切りたい!というのが、正直な話です。
良案があれば是非ご教示ください!
よろしくお願い致します。
< 使用 Excel:Excel2013、使用 OS:Windows7 >
Dim Dic, cl As Range Set Dic = CreateObject("Scripting.Dictionary") For Each cl In Sheets("A").UsedRange If cl.Row <> 1 And cl.Column <> 1 Then Dic(Sheets("A").Cells(1, cl.Column) & "_" & Sheets("A").Cells(cl.Row, 1)) = cl.Value End If Next cl For Each cl In Sheets("B").UsedRange If cl.Row <> 1 And cl.Column <> 1 Then If cl.Value <> Dic(Sheets("B").Cells(1, cl.Column) & "_" & Sheets("B").Cells(cl.Row, 1)) Then MsgBox "Bシート不整合:商品CD=" & Sheets("B").Cells(cl.Row, 1) & ":店舗CD=" & Sheets("B").Cells(1, cl.Column) MsgBox "Aのデータ=" & Dic(Sheets("B").Cells(1, cl.Column) & "_" & Sheets("B").Cells(cl.Row, 1)) & ":Bのデータ=" & cl.Value End If End If Next cl For Each cl In Sheets("C").UsedRange If cl.Row <> 1 And cl.Column <> 1 Then If cl.Value <> Dic(Sheets("C").Cells(1, cl.Column) & "_" & Sheets("C").Cells(cl.Row, 1)) Then MsgBox "Cシート不整合:商品CD=" & Sheets("C").Cells(cl.Row, 1) & ":店舗CD=" & Sheets("C").Cells(1, cl.Column) MsgBox "Aのデータ=" & Dic(Sheets("C").Cells(1, cl.Column) & "_" & Sheets("C").Cells(cl.Row, 1)) & ":Cのデータ=" & cl.Value End If End If Next cl Set Dic = Nothing End Sub (mm) 2016/02/08(月) 17:45
ありがとうございます。
確認してみます。
取り急ぎ、お礼まで。
(yuu) 2016/02/08(月) 18:05
横から失礼します。
マトリックスのシート上の場所が、それぞれ違うのは、元システムのからみで仕方がないとしても 処理する上では、同じ場所、できれば 左上隅が いずれも A1 になっていたほうが、何かと扱いやすいです。 チェック目的であれば、このブックをコピーした新規ブックの各シートの行削除、列削除を行い、A1から始まるような形式にして、その新規ブックを処理対象にするほうがいいと思います。
まぁ、必須ということではありませんが。
各シート上には、それぞれ、単一のマトリックスが1つだけあり、他には何も存在しないと考えていいのでしょうか? それと、縦横の項目を除く、マトリックスの中身は、数値でしょうか?文字列でしょうか?
で、思い付きですけど、エクセルの統合機能を使い、B と C を統合。 集計の方法を データの個数 にして統合した結果が、個数、すべて 1 ないしは 空白であること、 統合した表の縦軸と横軸の項目が A の、それと(順番は異なっても)過不足なく一致する。 このようなチェックをするのもいいかもしれませんね。
さらに、マトリックスの中身が数値であれば、集計の方法を合計にしたものも作成し、 それが(並びは別にして)A と過不足なく合致するというチェックもできそうですね。
もちろん、必要ならマクロ処理で。
(β) 2016/02/09(火) 09:23
ご指摘ありがとうございます。
なるほど!
まずBとCを統合(+並び替え)して、Aと比較する・・・ということですかね?
※間違っていたらすみません。
その発想がありませんでした。
ありがとうございます。
(yuu) 2016/02/09(火) 11:02
ご教示いただいたコードでは、
配列が異なる場合は全て「異なる」として、メッセージが表示される仕様ですかね?
それですと少し意図が異なってしまうようです。
※確認が遅れ、申し訳ありません。
(yuu) 2016/02/09(火) 11:02
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.