[[20160202215514]] 『シート1とシート2を比較し同じなら色を付けるとい』(りりちゃん☆彡) ページの最後に飛ぶ

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

 

『シート1とシート2を比較し同じなら色を付けるというマクロについて教えてください。』(りりちゃん☆彡)

いつもお世話になっております。
りりちゃん☆彡と申します。

表題の件につきまして、
もしもお分かりになる方がいらっしゃったら教えてください。

シート1、シート2を比較し、同じ金額と帳票番号であるものが
書かれているセルに色を付けたいんです。

シート1には、今日現在各セクションで入力されたデーター。
シート2には、これまでのデーターの蓄積となっているもの。
が書かれており、シート2にあるデーターが「シート1」にきちんと入っているかを
確認したいのです。

どちらのシートも以下のような構成となっております。
A列は帳票の番号。
B列は金額です。
どちらも行数は全部で200ぐらいは有ります。

A列      B列
E20586812   2,034,958

一応、色々探してどなたかが書いて下さったVBAを見付け動作を確認したら
私のやりたかった上記のようなことが出来ました。

ところが、同じような業務で、A列に「会社名」で、B列に「金額」が入っていて
比較をしなければなってしまって困って居ます。

このマクロのどこを修正すればそうなってくれるかご存知の方がいらっしゃったら
教えてくださいませんでしょうか。
VBA初心者であまり良く分かっていなくて困っています。

私が見付けたマクロは以下の通りです。
’の所は私が、自分で理解しようと頑張って解読したつもりなのですが、
VBAを習い始めたばかりで、へんな解読になっている気がします。。
もしもお時間があるようでしたら、ここも教えてくださるとうれしいのですが。。

お忙しい所恐れ入りますがご指導の方どうぞよろしくお願い致します。

Sub Coloring_PriceEqualCell()

 Dim lastRow1 As Long                       'lastRow1は、長整数型です。
 Dim lastRow2 As Long                       'lastRow2は、長整数型です。

 Dim i1 As Long                             'i1 は、長整数型です。
 Dim i2 As Long                             'i2 は、長整数型です。

 Dim paymentNum As String                   'paymentNumは、文字列型です。
 Dim price As Double                        'priceは、倍精度浮動小数点型です。

 lastRow1 = Sheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row '変数lastRow1にSheet1を代入。1行目から最終行まで確認します。
 lastRow2 = Sheets("Sheet2").Cells(Rows.Count, 1).End(xlUp).Row '変数lastRow2はSheet2を代入。1行目から最終行まで確認します。

 For i1 = 2 To lastRow1                       'i1に2を代入それはlastRow1でかいたSheet1にです。
 Sheets("Sheet1").Select                      'Sheet1を選択します。

 paymentNum = Cells(i1, 1).Text              '変数paymentNumは、Sheet1の1列目テキストで書かれています。
 price = Cells(i1, 2).Text                   '変数priceは、Sheet1の2行目、シート1の2列目です。

 Cells(i1, 1).Select           'Sheet1のセル1行目を選択
 Sheets("Sheet2").Select       'Sheet2を選択します。

 For i2 = 2 To lastRow2                           'i2に2を代入それはlastRow1でかいたSheet2にです。
 If Cells(i2, 1).Text = paymentNum And Cells(i2, 2).Text = price Then   '次の処理をします。Sheet2の1行目が、文字列型のテキストだった時と、Sheet2の2行目が価格だった時にこの処理をします。

 Sheets("Sheet1").Cells(i1, 2).Interior.ColorIndex = 40   'Sheet1の2行目を塗りつぶす。
 Sheets("Sheet2").Cells(i2, 2).Interior.ColorIndex = 40    'Sheet2の2行目を塗りつぶす。

 Exit For                                  'Forで書かれた部分はここまでです。

  End If

 Next i2                                         '次はSheet2
 Next i1                                        '次はSheet1

 Range("A1").Select                                                     'セルA1を選択します。
 MsgBox "実行しました"                                                  'メッセージボックスで実行しましたと表示する。

End Sub

< 使用 Excel:Excel2007、使用 OS:Windows8 >


 コメントのことは、後ほどというか、まず、質問の件について。

 アップされたコードから、ちょっとコメントを取り除いて、【インデント】をつけたものをアップしておきます。
 コードそのものは、なにもさわっていません。

 どんな作業にも、大項目、中項目、小項目 といったようなものがありますね。
 プログラムのコード実行も同じです。
 で、中項目はコードの書き始め位置を、大項目コードより右にします。
 小項目は、さらに、中項目コードより右にします。

 こうして書いておけば、ループ処理や条件分岐での処理の、どれが 幹で どれが 枝 で どこが 葉 かが
 ビジュアルに頭に飛び込んできて、コードロジックの理解が、しやすくなります。

 ところで、本題です。

 >>同じような業務で、A列に「会社名」で、B列に「金額」が入っていて 
 >>比較をしなければなってしまって困って居ます。 

 困っている というのは、何も変えずに実行してみたけど、結果がおかしい。
 どこをなおしたらいいだろう??

 そういうことですか?

 一度、このまま 実行してみてはいかがでしょう。
 で、その結果がどうなったかを教えてください。

 いずれにしても、上でコメントした、インデントを付けたコードです。
 このコードそのものには改善余地も少なくないのですが、とりあえず、なにも変更していない形です。

 Sub Coloring_PriceEqualCell()

    Dim lastRow1 As Long
    Dim lastRow2 As Long

    Dim i1 As Long
    Dim i2 As Long

    Dim paymentNum As String
    Dim price As Double

    lastRow1 = Sheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row
    lastRow2 = Sheets("Sheet2").Cells(Rows.Count, 1).End(xlUp).Row

    For i1 = 2 To lastRow1
        Sheets("Sheet1").Select

        paymentNum = Cells(i1, 1).Text
        price = Cells(i1, 2).Text

        Cells(i1, 1).Select
        Sheets("Sheet2").Select

        For i2 = 2 To lastRow2
            If Cells(i2, 1).Text = paymentNum And Cells(i2, 2).Text = price Then

                Sheets("Sheet1").Cells(i1, 2).Interior.ColorIndex = 40
                Sheets("Sheet2").Cells(i2, 2).Interior.ColorIndex = 40

                Exit For

            End If

        Next i2
    Next i1

    Range("A1").Select
    MsgBox "実行しました"

 End Sub

(β) 2016/02/03(水) 02:31


 つけられたコメントに対して【コメント】します(ややこしいですね)

 その通りだというところは省きますね。

    lastRow1 = Sheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row    'Sheet1のA列のデータ最終行の行番号
    lastRow2 = Sheets("Sheet2").Cells(Rows.Count, 1).End(xlUp).Row    'Sheet2のA列のデータ最終行の行番号

    For i1 = 2 To lastRow1                       'i1を制御変数として 2 からlastRow1(SHeet1のA列データ最終行)まで繰り返し処理をします。
        繰り返し処理部分(中項目)
    Next i1                                       '次の行処理のため 繰り返し

    price = Cells(i1, 2).Text                   'Sheet1の該当行(i1)の2列目(B列)の値を 変数price に入れます。

    If Cells(i2, 1).Text = paymentNum And Cells(i2, 2).Text = price Then   
  'Sheet1のA列の値(paymentNum に入っている)とB列の値(price に入っている)をSHeet2の当該行(i2)のA列、B列と比較し同じ場合、次のコードを実行します。

    Sheets("Sheet1").Cells(i1, 2).Interior.ColorIndex = 40   'Sheet1の i1 行目 の 2列目(B列) を塗りつぶす。

    Exit For      '現在のForループから強制脱出。For と対で記述された Next の下に飛びます。

(β) 2016/02/03(水) 03:22


(β)様

いつもお世話になっております。
りりちゃん☆彡です。
このたびもお世話になり、ありがとうございます。
夜遅くまで、やってくださったんですね。。できないりりの為に本当にすみません。
そして本当に、本当にありがとうございます。

インデントされたコード、とても分かりやすいです。

 >>どんな作業にも、大項目、中項目、小項目 といったようなものがありますね。
 >>プログラムのコード実行も同じです。
大項目、中項目、小項目という風に理解すれば、コードっていうのを読み解くとき
分かりやすくなってくるんですね。日本語の大項目〜というご説明をいただいたことで
少し分かった気がしてきました。。
そうか〜こうしておけば、分かりやすいんだ。。
そういえば、本ではこういう風に書いて有ったっけ。。

ネットで見付けたのをフツーに張り付ければ動くんだしと勝手にめんどくさがってました。
だからいつまでたっても、ダメりりなのかな。
やっぱり、こういう風にすることにまず意味があったんですね反省。。ヾ(。>﹏<。)ノ゙✧*。
教えてくださりありがとうございます。

私が質問した、

 >>同じような業務で、A列に「会社名」で、B列に「金額」が入っていて 
 >>比較をしなければなってしまって困って居ます。 
この困っている点は、実はA列に「会社名」で、B列に「金額」と記載しましたが
これは私が、このコードで動いてくれるよう、シートが横に長いけれど比較する時に
会社名と、金額を張り付ければ比較できそうだからと行挿入したりしてやっているからなんです。
本当は、シート1の方はJ列に会社名とかN列に金額が入っていると言うような感じなのです。

実際にコピペしてA列に「会社名」、B列に「金額」の場合でも、
シート1、シート2が同じような構成であれば希望したように動いてはおりました。
本当を言うと、なんで帳票番号じゃなくても大丈夫なんだろー??って思ってました。

この比較したいシートは、最初CSVで読み込んで〜結構手間がかかってやっと比較まで来るため少しでも楽になる方法とか、上手くいく法はないかと。。このやり方にたどり着いた次第です。
それで両方を調べるために、コードを読んで違うマクロ名として比較すればいいんじゃんと思いつき
同じような作業の方を別名のマクロ名として色を変えやってみていたんです。(行などコピペしないでね)

所が構想的にはいい気もしましたが、、、コードを読む段階でつまづいてしまい、散々悩んでまたここに来てしまいました。お騒がせしてしまった事、言葉が足りていなかったことごめんなさい。。

半月に1回づつくらい、この作業が出てくるのですがCSV〜データー比較〜月ごとの集計〜グラフ〜帳票化されていないものの洗い出し〜などなど上司に提出するまでに色々やる事が多くて
今は約1日がかりで仕上げており私としてはとっても大変だったんです˚‧º·(˚ ˃̣̣̥⌓˂̣̣̥ )‧º·˚
一応、勉強したてのマクロを何段階かに分けて使ってはいるんですが。。

なんだか愚痴みたいになってしまいましたが、今後ともご指導の程どうぞよろしくお願い致します。
(りりちゃん☆彡) 2016/02/03(水) 22:13


 で、(りりちゃん☆彡)さんとしては解決ということでいいですか?
 それとも、疑問点が、まだあるなら、遠慮なく質問を投げかけてください。

 とりあえず、今きになっているのは

 ・Sheet1(今日)、Sheet2(累積) のデータの持ち方。今日の分も、マクロ実行時には、累世に存在すると考えていいのですね?
 ・つきあわせですけど、従来の 帳票番号 と 単価 であれば、ユニークでしょうから、ヒットして色を塗っておしまいでいいのでしょうけど
  今回の 会社 と 金額 ということだと、同じとみなされるものが複数ありませんか?
  過去に記載されたデータと同じ会社名で、たまたま同じ金額だったら、過去のものにヒットして終わりになります。
  このあたり、どう考えていいのかな?

 なお、現在のコード、処理はOKだと思いますけど、仮に 今日のデータが 200件なら、累積データは たとえば 1か月分だけでも 6000件ぐらいですよね。
 仮に 1 年分なら 70000件以上。

 今の構えが SHeet1の各データを SHeet2 の先頭からチェックしています。
 仮にシート2 が 10000件だったとします。最初にヒットするものもあるでしょうし、最後の最後でヒットする(あるいはヒットしない)ものもあるでしょう。
 平均して 5000件でヒットするとしたら 200 x 5000 = 1000000 100万回のチェックと処理を行うことになります。

 このあたり、工夫をすれば 200 + 5000 の処理 ですますこともできます。

(β) 2016/02/04(木) 08:45


(β)様

こんばんわっ(#^^#)りりですヽ(*´∀`)ノ キャッホーイ!!
この度も書きこみ下さりどうもありがとうございます。
ここ2日間仕事がらみの用事があってなかなか時間をとることができず、お返事できなくてすみませんでした。

お言葉の一つ一つが、すごく勉強になって、色々な事を考えながらやらなきゃいけないんだなぁ〜。
プログラムって、ただ書いてるんじゃなくてあらゆる事を考えなければいけないんだなぁ〜って思いました。
言葉の不足していて良く説明できていないりりの相談事なのに、(β)さんは、私が相談した内容から
色々な事、問題点などを考えてくださったんですね。そして私にそこの部分をさりげなく教えてくださってるんですよね。(β)さんってスゴイ。
私ももっと頑張んなきゃね。

(β)さんが気になっているとおっしゃっていた、
・Sheet1(今日)、Sheet2(累積) のデータの持ち方。今日の分も、マクロ実行時には、累世に存在すると考えていいのですね?

という件についてなのですが、
Sheet2は、どちらと言うと前月の最終集計という事になるのかな。ここで出している数字は確定した前月の数字です。
Sheet1と言うのは、今日現在今さっき誰かが入力してくれている新しい帳票番号です。
そしてそれは、最終的に今月の集計というものになって行くという感じです。
どちらも、年度の初めから年度の終わりまでという感じで一旦締切となります。
最終的なデーター(12か月間の間)で1,000件以内位かなと思います。
毎日でいうと多分70件〜80件位じゃないかなと思います。

・つきあわせですけど、従来の 帳票番号 と 単価 であれば、ユニークでしょうから、ヒットして色を塗っておしまいでいいのでしょうけど

  今回の 会社 と 金額 ということだと、同じとみなされるものが複数ありませんか?
  過去に記載されたデータと同じ会社名で、たまたま同じ金額だったら、過去のものにヒットして終わりになります。
  このあたり、どう考えていいのかな?

こちらについてはなのですが、ここは何も考えていませんっ(;・∀・)
本当ですよね。。やっぱり手作業で探すしかないですかね。。どうしよう。改善したくてもりり、やり方わかんない(*_*;

今やっているA列に帳票の番号。
B列に金額です。
C列に会社名にするとかすれば
もう少し量が多かったり、金額が同じだった時はより間違いが起こりにくくなるのかな。。

今の悩みは、このリストが縦方向で月ごとのグラフにするときに、
わざわざ自分で月々の合計集計表作ってそれからグラフにしているから、本当はここも簡単にしたいんです。
ピボットテーブルにすればいいかしらと思ってやったら、1月が去年の4月の前に来ちゃってダメダメだったんですね。だから仕方なくこの処理後月ごと集計をだして、それからやっとグラフにして提出しました。
グラフは、「よく分かるVBA 実践偏」の本でちょうど自動作成のVBAを書いたのでそれを使いました。
が上司には「もっと工夫できない?」言われて「どの辺をでしょうか」と小さい声で言いましたが、
顔にやり直しと書いて有った気がしたのですが今回はこれでいいよと言ってくれたので、
さっさと退散して自分の席に戻りました。
今回はって言ったから、、次から工夫をしないとダメかなぁ。。っては思ってますけどね。
どうすりゃいいんでしょうか〜って感じなのですが。。機嫌良さそうなときにしよっと☆うふふ。

とりあえず色々と、どうしよう。。(β)さんっ、、どうしたらいいと思いますか??

よろしければご助言いただけませんでしょうか。
(りりちゃん☆彡) 2016/02/06(土) 22:51


 しばらく自宅を留守にしていました。
 今から質問を読んで対応しますので しばしお待ちください。

(β) 2016/02/07(日) 17:28


 一般的に考えると検索(マッチング処理)の構成は以下の検索元と検索先の関係の要件によって4種類にわかれます。

 1.検索元1件に対して、同じものが検索先にも1件しかない。(1 : 1)
 2.検索元1件に対して、同じものが検索先に複数存在する。(1 : N)
 3.検索元に同じものが複数件あって、検索先には1件しかない。(N : 1)
 4.検索元に同じものが複数件あって、検索先にも複数件存在する。(N : N)

 さらに、これら条件で、すべての対象に関して処理が必要なのか、マッチングした中で処理するのは1つだけなのかによって
 処理構成を考える必要があります。

 たとえば、2.のケースですべて処理するなら、検索先に見つかれば処理、で、終わりにせず、検索先の次のデータも比較、その次のデータも比較・・・
 こうしなければいけませんし、そうではなく、処理は1件だけということであれば、複数の中の、どれを処理するかの決め事が必要ですね。
 最初に見つかったものを処理するとか、最後に見つかったものを処理するとか、もしかしたら、最初とか最後ということでは判定できないなら
 検索キーそのものがユニークに(1 : 1 に)なるような、別の項目も 比較の対象にする必要がありますね。

 これらは、扱っているデータが、どんなものなのか、それらが、どんなレイアウトでまとめられているのか、そういったことによって決めていくことが必要になりますね。

 たとえば、累積シートは前月分までのデータ、そこと今月分のデータをマッチングするということであれば、現在行っている帳票番号が、どんなものなのかなぁという疑問がでてきます。
 新規伝票で帳票番号が、その都度新規に採番されるようなものであれば、今月入力の帳票番号と先月までの帳票番号は、異なっているはずですからマッチングできないはずですね。
 でも、マッチング処理ができている。ということは、たとえば、帳票番号が 請求書番号のようなもので、累積シートには請求データが格納されている。
 で、今月の入力は 請求データではなく、入金データ。 そうすると、累積シートにあるどの請求データに対して入金が行われたかというマッチングができる。

 あるいは、累積データは出荷計画データ。入力データは出荷データ。

 (このケースだったとしても、部分入金があったら、どうするんだろうとか、請求データ内に同じ単価が複数あったらどうするかという課題は出てくると思いますが)

 いずれにしても、累積データがどういったデータなのか、それに対する今月データはどういった情報なのか、マッチングキーは 2つだけで(帳票番号と単価、客先と売上)いいのか。
 そういったことを踏まえて処理方法を検討していけばいいかと思います。

 さらに、そちらで、実際に処理している累積シートと入力シートのサンプルを一部をアップしてもらえれば、一緒に考えるイメージも増していくと思います。

(β) 2016/02/08(月) 08:16


(β)様

お忙しい所色々とご助言を下さり本当に、本当にどうもありがとうございます(*'▽')
構成する上で必要な事やら、いろんなことを(β)さまが教えてくださっているので、
私の方でも今回教えていただいたことを踏まえつつ、再度今やっているほんとうにこのやり方で良かったのかどうなのか検証をしてから、また再度ご連絡させて頂こうかと思います。。

・・・でもでも、本当に本当に、(β)さんってスゴイです!!
りりちゃんの上司の人よりすごいね。絶対スゴイな。りりそういうふうに本気で思っていますっ。

だからこそ、今やっているやり方をもう一度見直しつつお答させていただいた方がいいかなと思います。
せっかくスゴイ人に聞いたのにもったいないもんっ。

という訳で、、少々おまちいただけませんでしょうか。

あと、サンプルアップする場合ってどうやればいいんでしょうか?
りりはべつにいいけど。。メアドとかはダメですもんね。どうしよう。。
(りりちゃん☆彡) 2016/02/08(月) 21:27


 エクセルシート上に作成したシートイメージサンプルをコメント欄に貼り付けてアップするユーティリティを
 momoさんが発表してくださっています。

[[20110209184943]] 『[談]シートレイアウトの投稿どうしてますか?』

 ↑でアップされたコードを動かすとサンプルコピペが可能になりますので、活用してみてください。

(β) 2016/02/08(月) 21:35


(β)様

お世話になっております。
りりちゃん☆彡です。
どんな風にお話したらいいのか色々考えたのですがイマイチ答えが見つからなかったのですが
現在のレイアウトがこんな風ですとお伝えした方が良いと思ったのでご連絡致します。

ここの所仕事が忙しくなってきてしまい頭が全然回っていないので上手に伝わるかどうか
不安なのですが、シートは以下のような構成です。

本当は、会社名のあるのは、AH欄あたりでここに普通に貼ると
全然伝わらなそうなので私の方で必要か所を抜き出し教えてもらった(momo)さんの
レイアウトのマクロをお借りしました。

以下が調べる対象となるファイルで、毎回、社内システムよりDLしているシート構成です。  
  
  |[A] |[B] |[C] |[D] |[E] |[F] |[G] |[H]

 [1]|書類ID| 件名|帳票番号  |申請日  |消費税|小計  |総額   |会社名    
 [2]|      |      |YA25006028|########|17,870|223375|241,245|○×(株)
 [3]|      |      |KK65006520|########|59,077|738472|797,549|△▽(株)

この表のA,B列に帳票番号を貼って、総額を貼って調べるマクロで調べられるようにしていました。
この欄はたまたま空欄だったので。。

つき合わせ用の原本ファイルは以下です。(累積データーです)

    |[A]        |[B]    |[C]                                 
 [7]|帳票番号   |総額   |会社名                               
 [8]|YA25006028 |241,245||○×(株)

もう一個後からやる事になってしまったシートは以下です。
(誰かが作ったその人の部署での累積?になるのかな。)

   |[A]        |[B]       |[C]                                 
 [7]|日付     |会社名    | 総額                             
 [8]| 2016/02/12|○×(株) |241,245

こんな感じです。。実際は表自体はもっともっと横に長いです。2、3はコピペしたりして
必要か所のみ抜き出して使っています。
1こめの表、2こめの表でまず同じデーターを探して、今月の私の部署で依頼した分が帳票になったかを調べて
います。
3こめの表は、入金されたという報告の連絡で確定した1の表をまた比較して
最終的に確定したデーターで月別の売上グラフと、会社別の個別金額を集計したりしています。

まとまりのない文章できちんとお伝えできるか不安なのですが。。
こんな感じです。
(りりちゃん☆彡) 2016/02/12(金) 23:00


 とりあえず雛形です。
 ダウンロードしたブック(コード内では DLLブック.xlsx) の1枚目のシートと 2個目の原本ブック(コード内では 原本2.xlsx)の1枚目のシートを比較します。
 どちらにも同じキー(日付、会社名、総額)のデータが複数あるかもしれない、その場合、複数のものすべてに色付けという構えにしています。
 見慣れない(かもしれない)コード(Dictionary)が登場しています。文字通り辞書で、キーごとに、それが現れた行番号を配列で登録しています。
 このDictionaryを使うことで、ループでの処理す🈮を最小限におさえています。

 なるべく、どのセルを相手にしているかがわかるような書き方をしたつもりです。
 レイアウトが変更になった、あるいはキーの数を増やす、あるいは減らすといった場合も、応用が利くと期待しています。

 比較キーで、?? と思うところがあるかもしれませんので、前もって。

 ・たとえば AA と BB のペアと A と ABB のペアを単純に連結して比較すると AABB と AABB で、同じとみなされます。
  なので、 AA と タブ文字 とBB、A と タブ文字 と ABB というものにして比較しています。
 ・日付の値、2016/2/15 等 Valueプロパティでもいいのですが、Value2 というところに入っているシリアル値を使っています。
  (今回は、どちらでもいいのですが、キーとしてはシリアル値のほうが、何かと、別の用途にも使えて扱いやすいので)

 で、コードです。マクロブックの標準モジュールに書きます。実行時には(今のところ)DLLブック.xlsx も 原本2.xlsx も、開かれているという前提。
 もちろん、保存してあるフォルダがわかれば、マクロ内で、自動で開くことも可能です)

 Sub Sample()
    Dim shA As Worksheet
    Dim shD As Worksheet
    Dim dic As Object
    Dim w As Variant
    Dim c As Range
    Dim k As String
    Dim n As Variant

    Application.ScreenUpdating = False

    Set shA = Workbooks("原本2.xlsx").Sheets(1)
    Set shD = Workbooks("DLLブック.xlsx").Sheets(1)
    Set dic = CreateObject("Scripting.Dictionary")

    '原本2 データのDictionaryへの格納
    For Each c In shA.Range("A7", shA.Range("A" & Rows.Count).End(xlUp))
        With c.EntireRow
            '日付(シリアル値)、会社名、総額をキー
            k = .Range("A1").Value2 & vbTab & .Range("B1").Value & vbTab & .Range("C1").Value
        End With
        If dic.exists(k) Then   'もしすでに辞書登録済みなら
            w = dic(k)          '登録内容を取り出し
            ReDim Preserve w(LBound(w) To UBound(w) + 1)    '登録要素を1枠増やして
            w(UBound(w)) = c.Row                            'そこに行番号を追加登録
            dic(k) = w
        Else
            dic(k) = Array(c.Row)                           '要素1つだけの配列に行番号をセットして辞書に登録
        End If
    Next

    'DLLブックとマッチング
    For Each c In shD.Range("C2", shD.Range("C" & Rows.Count).End(xlUp))
        With c.EntireRow
            '日付(シリアル値)、会社名、総額をキー
            k = .Range("D1").Value2 & vbTab & .Range("H1").Value & vbTab & .Range("G1").Value
            If dic.exists(k) Then   '原本2にあれば
                w = dic(k)          'その行情報配列を取り出し
                For Each n In w     '各行情報
                    shA.Cells(n, "A").Resize(, 3).Interior.ColorIndex = 40      '原本 A列〜C列に色塗り
                Next
                c.EntireRow.Range("A1:H1").Interior.ColorIndex = 40             'DLL A列〜H列に色塗り
            End If
        End With
    Next

    Application.ScreenUpdating = True
    MsgBox "比較処理が完了しました"

 End Sub

(β) 2016/02/13(土) 17:19


 ↑ あっ! ダウンロードしたシートと原本のシートを、マクロブックの Sheet1 と Sheet2 にコピペして
 マクロブックのみで処理しなければいけなかったですかね?

 もし、そうなら、

    Set shA = Workbooks("原本2.xlsx").Sheets(1)
    Set shD = Workbooks("DLLブック.xlsx").Sheets(1)

 ここを

    Set shA = Sheets("Sheet2")   '原本
    Set shD = sheets("Sheet1")   'ダウンロード

 に変更です。

(β) 2016/02/13(土) 17:28


(β)様

お世話になっております。
りりちゃん☆彡です(^^♪きゃっ

お忙しい所わざわざ書いて下さったんですね!!
ありがとうございます!
コードの書き方がキレイで本みたい。こういう風に書くんですね。。
りりちゃんの勉強のやつとは大違いです。。はぁ、、先は険しいなぁ。。
しかも、、りりちゃんの読んでいる入門書には多分ない気がするコードがずらっとですっ!!(Dictionary)
というか、前に書いて有ったりりのコピペしたやつよりひょっとすると短い??のかな。。
良くわからないけど、すっきりしている?かなぁ〜って気がしたんです。

とっ所がっ•(・Д・`)すみません。。色々と試したのですが
やり方が分からないんです。。
・原本2
・DLLブック
っていう2つのシートを両方開いておいて、それでやってみればいいんですよね?
うぅ。。んなんでならないのかなぁ。。。

(上のシートを二つ作って開いてやったのと、同じファイルの中に二つのシートを貼って見たり、、
シートを二つプラス、マクロ用シート一つにしたりもした(/_;)でも上手く動かないんです。。)

りりのやり方が変なのかな?
ぜひぜひ試してみたいのですが。
申し訳ございませんが、分かっていないりりのために詳しく教えてくださいっm(゚▽゚* )
(りりちゃん☆彡) 2016/02/13(土) 22:25


 まず、Dictionary。そうですね。入門書には、書かれていないでしょうね。
 でも、これって、慣れてしまえば、使うのも簡単だし、コードを書くのも簡単な便利ツールです。
 とくに検索系のロジックを精緻に組み立てるのが苦手なβには、とりあえず Dictionaryに放り込んでおけば
 なんとかなるというバカチョンツールです。

 それはさておき。

 (β) 2016/02/13(土) 17:28 でアップしたコードは、このマクロブックとは別に、 (りりちゃん☆彡) 2016/02/12(金) 23:00 でアップされた

 ・毎回、社内システムよりDLしているブック
 ・日付、総額、会社名 の 原本ブック

 これも開かれているという前提です。

 ★でもでも!! 今、よく見ると、原本ブック、タイトル行が 7行目にありましたね!!
  アップしたコードはタイトル行が6行目で、データが7行目からと、勘違いしたコードになっていました。

    '原本2 データのDictionaryへの格納
    For Each c In shA.Range("A7", shA.Range("A" & Rows.Count).End(xlUp))

 これを

    '原本2 データのDictionaryへの格納
    For Each c In shA.Range("A8", shA.Range("A" & Rows.Count).End(xlUp))

 このようになおして試してみてください。(汗、汗)

 ●なお、(β) 2016/02/13(土) 17:28 で コメントしましたように、DLブックや原本ブックのシートをマクロブックにコピペして
  マクロブック内で、マッチングして色を塗ることもできますので、どちらでも、やりやすいほうで、どうぞ。	

(β) 2016/02/15(月) 12:05


 ↑ と、アップしましたが・・・・
 行番号は1行間違っていたとはいえ、余分な行がマッチングされるだけで、結果オーライになるはずだと気が付きました。

 マッチングは、両方のブックの 日付、会社名、総額 の3項目がマッチしているかどうかの判定を行っているわけですけど
 同じはずなのに、色がつかない ということでしょうか?

 マッチングのテーマで、この状態はけっこう発生しますね。
 回答側ではOK,でも、質問側で試すとマッチしない。

 とくに、対象ブックが、別システムからダウンロードしたケースで、少なからず発生します。
 ダウンロードしたブックのシート、たとえば 2016/2/15 と、日付がある(ように見える)
 これが、比較するブックのシートの 2016/2/15 とマッチしない。

 よくあるのは、比較するブックのシートは【日付型】で、2016/2/15。一方、ダウンロードしたほうは、【文字列】としての "2016/2/15" 。
 これはマッチしません。

 あるいは、会社名。一方が全角、一方は半角とか、一方の会社名の後ろに【スペース】がくっついているとか、そういった場合にはマッチしません。
 また、ダウンロードしたファイルには、ときたま【ゴミ】(目に見えない制御文字)がくっついている場合もあります。これもマッチしません。

 たとえば 原本ブックとダウンロードブックを開き、原本ブックの8行目とダウンロードブックの2行目がマッチする【はず】だとした場合
 原本ブックのどこかのセルに =A8=[DLLブック.xlsx]Sheet1!$D$2 といれて、結果が TrueになるかFalse になるかを確かめていただけませんか。
 (会社名セルや総額セルに関しても、式で確かめてください)

(β) 2016/02/15(月) 13:22


>りりちゃん☆彡 さん

ttp://ww10.puny.jp/uploader/download/1455546284.zip
パスワード:abc

「シートの比較(フォルダ内にファイル3つ)」フォルダ内の
「■シートの比較.xls」のみ開いて、
プログラムを実行(シートを比較ボタン)してください。

(日付、会社名、総額)の3項目じゃなくて、
(帳票番号、総額、会社名)の3項目じゃないですかね?

(1)をマクロ実行ブックにして、
(2)と(3)が一致してれば、(2)と(3)のシートの該当行を塗りつぶす
ってことですか?
とりあえず、βさんのプログラムを改良して、
【(2)と(3)が一致してれば、(2)と(3)のシートの該当行を塗りつぶす】
プログラム(1)を作成してみました。

(2)■DLLブック(ファイル名は任意).xlsx
(帳票番号、総額、会社名)
(「C列」,「G列」,「H列」):2行より下の行

(3)■原本2(ファイル名に「原本」を含める).xlsx
(帳票番号、総額、会社名)
(「A列」,「B列」,「C列」):8行より下の行←「A8」より

****************************************************************

>もう一個後からやる事になってしまったシートは以下です。
今度は、
(2)と(4)が一致してれば、(2)と(4)のシートの該当行を塗りつぶす
ってことですよね?
ご自分で、(1)のプログラムを修正してみてください。

(4)■入金報告書.xlsx
(会社名、総額)
(「B列」,「C列」」):8行より下の行

(2)■DLLブック.xlsx
(会社名、総額)
(「H列」,「G列」):2行より下の行

****************************************************************

プログラム(1)「例えば、■シートの比較.xls」と
下記の(2),(3)を同じフォルダ内に置いて、
(フォルダ内は、3つのファイルだけ)
(1)のファイルだけ開いて、プログラムを実行してください。
プログラムは、(1)のファイルのModule1に記述してください。
プログラムのコードを下記に載せておきます。

(2)データ:「原本2(ファイル名に「原本」を含める).xlsx」の
Sheet1のA7:C12の範囲に、
+++++++++++++++++++++++++++++++++++++++++
帳票番号 総額 会社名
YA25006028 241,245 ABC株式会社
AA12345678 999,999 GHI株式会社
BB23456789 888,888 JKL株式会社
YA25006028 241,245 ABC株式会社
YA25006028 241,245 ABC株式会社
+++++++++++++++++++++++++++++++++++++++++

(3)データ:「DLLブック(ファイル名は任意).xlsx」の
Sheet1のA1:H3の範囲に、
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
書類ID 件名 帳票番号 申請日 消費税 小計 総額 会社名

		YA25006028	2016/2/14	17,870	223375	241,245	ABC株式会社
		KK65006520	2016/2/14	59,077	738472	797,549	DEF株式会社
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

****************************************************************

(マリオ) 2016/02/15(月) 23:34

'必要に応じて、■の箇所を修正してください。
'フォルダ内に、次の3つのファイルを置くいて、マクロ実行ブックのみ開いて実行する。
'原本のファイル名には、「原本」の文字を含めてください。
'次の判定に引っかかると、途中で終了します。
'ファイル数判定(3つかどうか)、拡張子判定(xlsまたはxlsx、どちらかか)
'シート判定(下記のの(2),(3)のファイルで、「Sheet1」がない)

'(1)ファイル名任意(ファイル名に「原本」を含んでいてもいい)。マクロ実行ブック。
'(2)ファイル名に「原本」が含まれる。(ワークシート:shA)「原本2」
'(3)ファイル名任意(ただし、ファイル名に「原本」を含まない)。(ワークシート:shD)「DLLブック」

'プログラムの概要
'次(帳票番号、総額、会社名)が一致してれば、シートの該当行を塗りつぶす。
'ShAの(「A列」,「B列」,「C列」):8行より下の行←「A8」より
'ShDの(「C列」,「G列」,「H列」):2行より下の行←「C2」より
(マリオ) 2016/02/15(月) 23:37


Sub Sample()
    Dim bkA As String, bkD As String
    Dim Win As Window
    Dim shA As Worksheet, shD As Worksheet
    Dim dic As Object, c As Range
    Dim k As String, w As Variant, n As Variant
    Application.ScreenUpdating = False
    Set dic = CreateObject("Scripting.Dictionary")

   '2つの比較ファイルが、開かれていなければ、開く
    Call GetFileName_FileOpen(bkA, bkD)
    Set shA = Workbooks(bkA).Sheets("Sheet1") 'Sheet1がなければ、エラー
    Set shD = Workbooks(bkD).Sheets("Sheet1")
   '
   '「原本2」データを「Dictionary」に格納「対象セル(A8〜Aの最終行)」
    For Each c In shA.Range("A8", shA.Range("A" & Rows.Count).End(xlUp)) '■「A8」より下
        With c.EntireRow '対象セルを含む行全体を参照
            '■■■■■■■■■■■■■■■■■■↓
            '帳票番号、総額、会社名
             k = .Range("A1").Value & vbTab & _
                 .Range("B1").Value & vbTab & _
                 .Range("C1").Value
            'Debug.Print k
            '■■■■■■■■■■■■■■■■■■↑
        End With

        If dic.exists(k) Then '既に辞書登録されていたら
            w = dic(k) '登録内容を取り出し
            ReDim Preserve w(LBound(w) To UBound(w)  1) '登録要素を1枠増やす
            w(UBound(w)) = c.Row
            'Debug.Print "登録済:" & c.Row
            dic(k) = w '行番号を追加登録(UBound(w)=1,2,3,…)
        Else
            dic(k) = Array(c.Row) '行番号を追加登録
            'Debug.Print c.Row
        End If
    Next
   '

   '
   '「Dictionary」と「DLLブック」を照合「対象セル(C2〜Cの最終行)」
    For Each c In shD.Range("C2", shD.Range("C" & Rows.Count).End(xlUp)) '■「C2」より下
        With c.EntireRow '対象セルを含む行全体を参照
            '■■■■■■■■■■■■■■■■■■↓
            '帳票番号、総額、会社名(参照語句)
             k = .Range("C1").Value & vbTab & _
                 .Range("G1").Value & vbTab & _
                 .Range("H1").Value
            'Debug.Print k
            '■■■■■■■■■■■■■■■■■■↑

            If dic.exists(k) Then '(参照語句)が、「原本2」にあれば
                w = dic(k) 'その行情報配列を取り出す
                For Each n In w '各行情報
                    shA.Cells(n, "A").Resize(, 3).Interior.Color = _
                    RGB(255, 204, 204) '「原本2」:A列〜C列に色塗り(赤色)
                Next
                c.EntireRow.Range("A1:H1").Interior.Color = _
                RGB(255, 204, 204) '「DLLブック」: A列〜H列に色塗り(赤色)
            End If
        End With
    Next
   '

    MsgBox "比較処理が完了しました"
    For Each Win In Application.Windows
        If Win.Caption = ThisWorkbook.Name Then
           Win.WindowState = xlMinimized 'マクロ実行ブック最小化表示
        End If
    Next
    Application.ScreenUpdating = True
 End Sub

(マリオ) 2016/02/15(月) 23:43


Private Sub GetFileName_FileOpen(bkA As String, bkD As String)
    Dim Win As Window
    Dim Path As String, buf As String
    Dim i As Long, Book() As String, j As Long
    Dim pos As Long, Wb As Workbook
    Dim bkAOpen As Boolean, bkDOpen As Boolean
    Dim Sh As Worksheet, Sheet_Check As Boolean
    '
   'マクロ実行ブックと同じフォルダ内に置いた「2つの比較ファイルの名前」を取得
    For Each Win In Application.Windows
        If Win.Caption = ThisWorkbook.Name Then
           Win.WindowState = xlMaximized 'マクロ実行ブック最大化表示
        End If
    Next

    Path = ThisWorkbook.Path & "\" 'マクロ実行ブックがあるフォルダ
    buf = Dir(Path & ".")
    Do While buf <> ""
        i = i  1
        ReDim Preserve Book(1 To i)
        Book(i) = buf 'Pathフォルダ内のファイルについて、ファイル名を全て取得
        buf = Dir()
    Loop
    If i <> 3 Then 'ファイル数判定(3つかどうか)
       MsgBox "フォルダ内のファイルは3つにしてください。" & vbCrLf & _
              "「比較ファイル2つ」 と 「このファイル」"
       End
    End If

    For j = 1 To 3 '処理回数:3回
        pos = InStrRev(Book(j), ".") '拡張子判定
        If pos > 0 Then
           If LCase(Mid(Book(j), pos  1)) = "xlsx" Or _
              LCase(Mid(Book(j), pos  1)) = "xls" Then
           Else
              MsgBox "終了します。" & vbCrLf & _
                     "ファイルの拡張子を確認してください。" & vbCrLf & _
                     "(拡張子:「xlsx」または「xls」)" & vbCrLf & _
                                                           vbCrLf & Book(j)
              End
           End If
        End If

        If Book(j) = ThisWorkbook.Name Then
        ElseIf InStr(Book(j), "原本") <> 0 Then '■「原本」の文字列
           bkA = Book(j) 'ファイル名取得(ファイル名に「原本」が含まれるなら)
        Else
           bkD = Book(j)
        End If
        'Debug.Print j, Book(j), "拡張子: " & LCase(Mid(Book(j), pos  1))
    Next j

    If InStr(bkA, "原本") = 0 Then
       MsgBox "ファイル名に、「原本」を含むファイルがありません": End '■「原本」の文字列
    End If
   '

   '
   '開かれていなければ、開く(2つの比較ファイル)
    For Each Wb In Workbooks
        If Wb.Name = bkA Then
           bkAOpen = True '比較ファイル(ブック)が開いていればTrue
        ElseIf Wb.Name = bkD Then
           bkDOpen = True
        End If
    Next

    If bkAOpen = False Then Workbooks.Open Path & bkA
    If bkDOpen = False Then Workbooks.Open Path & bkD

    'シート判定
    Workbooks(bkA).Activate
    For Each Sh In ActiveWorkbook.Sheets
        If Sh.Name = "Sheet1" Then
           Sheet_Check = True 'Sheet1が何処かにあればTrue
        End If
    Next
    If Sheet_Check = False Then 'シート判定
       MsgBox "「Sheet1」がありません。" & vbCrLf & _
              "(ファイル名:" & bkA & ")": End
    End If

    Sheet_Check = False
    Workbooks(bkD).Activate
    For Each Sh In ActiveWorkbook.Sheets
        If Sh.Name = "Sheet1" Then
           Sheet_Check = True 'Sheet1が何処かにあればTrue
        End If
    Next
    If Sheet_Check = False Then 'シート判定
       MsgBox "「Sheet1」がありません。" & vbCrLf & _
              "(ファイル名:" & bkD & ")": End
    End If
End Sub

(マリオ) 2016/02/15(月) 23:44


>もう一個後からやる事になってしまったシートは以下です。
>(誰かが作ったその人の部署での累積?になるのかな。)
   |[A]        |[B]       |[C]                                 
 [7]|日付     |会社名    | 総額                             
 [8]| 2016/02/12|○×(株) |241,245

間違いを訂正します。

****************************************************************

>もう一個後からやる事になってしまったシートは以下です。
今度は、
(2)と(4)が一致してれば、(2)と(4)のシートの該当行を塗りつぶす
ってことですよね?
ご自分で、(1)のプログラムを修正してみてください。

(4)■入金報告書.xlsx
(会社名、総額)
(「B列」,「C列」」):8行より下の行

(2)原本2(ファイル名に「原本」を含める).xlsx
(会社名、総額)
(「H列」,「G列」):8行より下の行

****************************************************************

(マリオ) 2016/02/15(月) 23:48


>りりちゃん☆彡 さん

>最終的に確定したデーターで月別の売上グラフと、
>会社別の個別金額を集計したりしています。

>原本ファイルは以下です
> |[A] |[B] |[C]
> [7]|帳票番号 |総額 |会社名
> [8]|YA25006028 |241,245||○×(株)

>もう一個後からやる事になってしまったシートは以下です。
>3こめの表は、入金されたという報告の連絡で
>   |[A] |[B] |[C]
> [7]|日付    |会社名 | 総額
> [8]| 2016/02/12|○×(株) |241,245

■「最終的に確定したデータ」は、どのようになっていますか?
原本ファイルは、A列(帳票番号)、B列(総額)、C列(会社名)で、
日付欄がありませんが、日付がないと、月別も判断できませんよね。
原本ファイルのD列とかに、
入金日(3こめの表の日付欄:A列)を入れている?

■「月別の売上グラフ」とは、どのようなものですか?
例えば、
会社ごとに、月別に総額の合計値を算出して、年度別で棒グラフを
作成しているとか?
横軸:日付(2016年4月)、縦軸:総額の合計値(該当日付)
横軸:日付(2016年5月)、縦軸:総額の合計値(該当日付)
横軸:日付(2016年6月)、縦軸:総額の合計値(該当日付)
横軸:日付(2016年7月)、縦軸:総額の合計値(該当日付)
横軸:日付(2016年8月)、縦軸:総額の合計値(該当日付)
横軸:日付(2016年9月)、縦軸:総額の合計値(該当日付)
横軸:日付(2016年10月)、縦軸:総額の合計値(該当日付)
横軸:日付(2016年11月)、縦軸:総額の合計値(該当日付)
横軸:日付(2016年12月)、縦軸:総額の合計値(該当日付)
横軸:日付(2017年1月)、縦軸:総額の合計値(該当日付)
横軸:日付(2017年2月)、縦軸:総額の合計値(該当日付)
横軸:日付(2017年3月)、縦軸:総額の合計値(該当日付)
みたいにされていますか?

■「会社別の個別金額」とは、どのようなものですか?
会社ごとに、月別に総額の合計値を算出して、さらに、
年度別に合計値を算出。ってことですか?

■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
ttp://ww10.puny.jp/uploader/download/1455546284.zip
パスワード:abc

「シートの比較(フォルダ内にファイル3つ)」フォルダ内の
「■シートの比較.xls」のみ開いて、
プログラムを実行(シートを比較ボタン)してください。
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

(マリオ) 2016/02/16(火) 01:02


DLLブックの塗りつぶしですが、行全体でなくて、(C列とG〜H列)のみ塗りつぶしでも
いいかも。

(修正前)
'c.EntireRow.Range("A1:H1").Interior.Color=_
RGB(255,204,204)'「DLLブック」:A列〜H列に色塗り(赤色)

(修正後)
c.EntireRow.Range("C1").Interior.Color=_
RGB(255,204,204)'「DLLブック」:C列に色塗り(赤色)
c.EntireRow.Range("G1:H1").Interior.Color=_
RGB(255,204,204)'「DLLブック」:G〜H列に色塗り(赤色)
(マリオ) 2016/02/16(火) 01:14


 To りりちゃん☆彡 さん

 >>前に書いて有ったりりのコピペしたやつよりひょっとすると短い??のかな

 マクロコードとしては、最初の りりちゃん☆彡 さんのコードのほうが短くなるはずですし
 ロジックも素直で、わかりやすいんです。
 ただ、前にもコメントしましたが、仮に、突合せが 1:1 だったとしても 原本側に 200 件、ダウンロード側に 50件 データがあった場合
 ループでの比較そのものが、50 x (200 / 2) = 5000 回ぐらいになると想定されます。
 βがアップした構成では、50 + 200 の 250 回の比較で完了します。
 で、ついでに、1:N や N:1 や N:N であってもも(同じコードで)250回の比較で完了します。
 (ただ、原本側の色塗り、すでに塗ってあるかもしれないのに、また塗っているという非効率のところがあります。ここは、最後に手を入れようと思っています)

 To マリオさん

 コードアップ、ご苦労様。

 ただ、りりちゃん☆彡 さん 、混乱されるかも?
 (マリオさんの投稿コードは、ど〜ん と 結構 大作なので。まず処理の幹を固めて、様々な工夫は、そのあとでもいいような気もします)

 >>(日付、会社名、総額)の3項目じゃなくて、 
 >>(帳票番号、総額、会社名)の3項目じゃないですかね? 

 コメントしていますが、私のコードは、原本2(日付、会社名、総額) 、のほうを相手にしてます。

 >>とりあえず、βさんのプログラムを改良して

 【改良】ありがとううございます・・・・。ちなみに、どこを【改良】いただいたかご指導いただければ幸甚。

(β) 2016/02/16(火) 06:51


>βさん
  >原本2(日付、会社名、総額) 、のほうを相手にしてます。

>>りりちゃん☆彡さん
  >>1こめの表、2こめの表でまず同じデーターを探して、
  >>3こめの表は、入金されたという報告の連絡で
  >>確定した1の表をまた比較して

To βさん

【改良】ではありません。ごめんなさい。
βさんのプログラムのメイン部分を拝借させて頂いてます(^^♪

■「原本2」とは、「3こめの表(入金報告書)」ですよね。

■「βさんのプログラムを拝借させて頂き、作成したプログラム」を実行
→「1こめの表(DLしているシート)」で重複行が塗りつぶされる。
→塗りつぶされた重複行を手作業で削除
→これを「確定した1の表」と呼ぶってことですかね。

■僕ははじめ勘違いしていて、
「原本ファイル」と「3こめの表(入金報告書)」を比較
したいのかと思っていました。
ではなくて、
「確定した1の表」と「3こめの表(入金報告書)」を比較
でしたね。

■βさんのプログラムは、
「確定した1の表」と「3こめの表(入金報告書)」を比較してる
ってことですよね。
ただ、「確定した1の表」のD列は、「申請日」ですが、
「3こめの表(入金報告書)」のA列の日付は、
「申請日」に該当するものですかね?
この日付は、「入金確認日」かも?と思いました。
仮に、この日付が「入金確認日」だと、
残る「会社名」と「総額」だけで、データの付き合わせを行わないと
いけない。ん〜。
「3こめの表(入金報告書)」に
「帳票番号」は記載されていないのでしょうか?

■つまり、次のようなことになるんでしょうかね。
(1)「1こめの表(DLしているシート)」は、
  会社名欄(H列)の会社に入金のお願いをした
  ある部署の誰かが作成。
  作成された表を社内システムよりDL。

(2)「2こめの表(原本ファイル)」は、
  りりちゃんさんが、管理している「入金済みのデータ」

(3)「3こめの表(入金報告書)」は、
  入金済みであることを確認した部署の誰かが作成。
  これは、社内システムからDLしないのかな?
  メールで送られる?
(マリオ) 2016/02/16(火) 10:46


 >>1こめの表、2こめの表でまず同じデーターを探して、 
 >>3こめの表は、入金されたという報告の連絡で 
 >>確定した1の表をまた比較して

 あぁ、そうだったのかもですね。
 いずれにしても、まずは、幹の部分で処理を確定させて、様々な親切機能は、あとまわしのほうが、問題の解決には早道だと思いますよ。

 To りりちゃん☆彡さん

 マリオさんの指摘は、処理として

 まず、ダウンロード表(1個目のファイル)と原本1(2個目の表)で何か処理をして、
 その処理結果の ダウンロード表と 原本2(3個目の表) をさらに突き合わせて何か行うのでは?
 というものです。

 一方、βのコードは、

 ダウンロード表(1個目のファイル)と原本1(2個目の表)の突合せ

 全く別の処理で

 ダウンロード表(1個目のファイル)と原本2(3個目の表)の突合せ

 このように解釈して、とりあえずは、ダウンロード表(1個目のファイル)と原本2(3個目の表)の突合せのコードをアップしています。

 実際の要件はどちらだったでしょうか?(どちらでも対応できますので)

(β) 2016/02/16(火) 11:02


To βさん

>日付(シリアル値)、会社名、総額をキー
1こめの表のD列(申請日)、H列、G列
3こめの表のA列(日付)、B列、C列

同じ記事内で、
1こめの表のD列(申請日)は、「########」と表示してある。
3こめの表のA列(日付)は、「2016/02/12」と表示してある。

3こめの表のA列(日付)は、
1こめの表のD列(申請日)に該当しますかね?

3こめの表のA列(日付)は、
1こめの表のD列(申請日)とは関係のない
「入金確認日」なんじゃないですか?
(マリオ) 2016/02/16(火) 12:26


 To マリオさん

 そのあたりは推測で動かず、りりちゃん☆彡さん に確認いただくほうがいいですね。
 アップしたコードは3項目比較にしていますが、2項目が妥当なら、その旨、りりちゃん☆彡さんから連絡があると思いますし
 その連絡に従って、調整すればいいだけのことなので。

(β) 2016/02/16(火) 13:44


To β さん
暇なんで、つい熱くなりました。
これ以上、書き込むと、
りりちゃん さんがとても読んでられないので、
りりちゃんさんのカキコあるまで、この板にはカキコしないでおきます。

To りりちゃん さん
上のコード、先程、コピペしてみたら、
何故か「+」が抜けてしまっています。
掲示板に嫌われています(+_+)

<対策>
■メインコード:Sub Sample()
→ReDim Preserve w(LBound(w) To UBound(w) 1)
となっているますが、
「UBound(w)」の後ろに「+」を追加してください。

■サブコード:Private Sub GetFileName_FileOpen()
→i = i 1
となっていますが、
「i」と「1」の間に「+」を追加してください。

→If LCase(Mid(Book(j), pos 1)) = "xlsx" Or _

              LCase(Mid(Book(j), pos  1)) = "xls" Then
となっていますが、
「pos」と「1」の間に「+」を追加してください(2か所!)。
(マリオ) 2016/02/16(火) 18:25

(β)様、(マリオ)様

色々とお騒がせしてしまってすみません。
りりが全然できないから、お二人にまで迷惑を掛けてしまって。。本当に本当にごめんなさい。

お忙しのにも関わらず、わざわざお時間をさいて下さってできなすぎるりりの為
お知恵を出し合って下さったり、色々考えてくだったり本当に本当に感謝してもしきれないくらいです。

まだまだ、コードを読むだけの知識もない私なのに。。
本当にごめんなさい•。・゚・(ノ∀`)・゚・。

それにしても、、二人ともスゴイな。りりなんかいつも怒られてばっかりです。
(β)さん、いつもありがとうございます。ごめんね今日はりりすごく疲れ切って居るから
またここにこの続き書きますから。待っててほしいです•( ;∀;)

(マリオ)様
初めまして。りりちゃん☆彡です。今回は色々どうもありがとうございます。
zipファイルちゃんと開くことで来ました。こんな風なやり方あるんですね。
りりこのダウンロードの仕方、初めてやったよ。物知りですね。
せっかく作ってくれたのに、ごめんなさい。今日は精神的に疲れ切ってしまっていて。。
また、この続きでご連絡致しますので、待っていてほしいです•(´;д;`)

そして、、、優しくて、頼もしいお二人に。。
突然ですが、最近の私についてお話させて頂きます。

ここの所、仕事の忙しさと先輩からの意地悪などのもめごとでちょっとだけ疲れてしまっています。
せっかくお二人にご尽力を頂きましたファイルなど、教えてくださったことなども
ぜひぜひやってみたいのですが思うように元気がでません。。

今日は申し訳ありませんが休ませて頂こうと思います。
勝手を申し上げ本当に申し訳ありませんがご理解いただけると嬉しいです。

少し元気を取り戻したら、またこの場にて書きこみさせていただきたいと思います。
その時はまた、ご指導いただけますように心よりお願い申し上げます。

・・・・2〜3日待ってて下さいっm(._.*)mペコッ

(りりちゃん☆彡) 2016/02/16(火) 21:28


 そういうときは何も考えず、ゆぅ〜〜っくりと、休みましょう。
 気持ちと体が楽になるまで、何日でも、気にしないで。

 それと、このトピもだいぶ長くなりましたね。閲覧や編集も、ちょっと骨が折れるボリューム。
 こんど、帰ってきた時には、新しいトピで始めませんか。NO2 といった感じで。
 そのトピで ↓ のように、このトピのタイトルをコピペしておくとバナーがわりになっていいかもです。

[[20160202215514]] 『シート1とシート2を比較し同じなら色を付けるとい』(りりちゃん☆彡)

(β) 2016/02/17(水) 06:04


 βさんの文字が小さいのは、何故かなと思っていましたが、
 行のはじめに「半角スペース」を1つ入れればいいみたいですね。

 To りりちゃん さん

 はじめまして!マリオです。
 しばらく、パソコン禁止ですね
 来週、再来週でも、何日でもオッケー。

 だいぶ長くさせてしまいましたm(_ _)mぺこり
 「やりたいこと(優先順位、内容)」と「取り扱いデータ」を整理して、
 新しいトピ(NO2)立ててください。
 新トピでは、β先生が主導で(^^♪

 いじわる先輩の上司や他の同僚を味方につけてくださいね。
 りりちゃん さんのストレス解消法は、何ざんすか?
(マリオ) 2016/02/17(水) 07:50

コメント返信:

[ 一覧(最新更新順) ]


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