- ベストアンサー
【Excel VBA】データの比較方法について
- Excel VBAを使用してデータの比較を行っていますが、借方と貸方が混在している場合にデータが表示されない問題が発生しています。
- 特に借方の行数が貸方の行数よりも少ない場合に問題が起きます。
- この問題を解消する方法についてアドバイスを頂きたいです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
昼休みにちょこっとやってみました。 A1~D8にある表を、E1~G10に番号別に出力したいと言う場合の プログラムです。ちゃんとやってるヒマが無かったので、このまま だとうまく終了しませんが、その辺は適当に直してください。 とりあえず、番号は必ず昇順になってるという前提です。 Sub Macro1() i1 = 1: i2 = 1: i3 = 1 Do c1 = Range("A" & CStr(i1)).Value c2 = Range("C" & CStr(i2)).Value D1 = Range("B" & CStr(i1)).Value D2 = Range("D" & CStr(i2)).Value Select Case c1 - c2 Case 0 Range("E" & CStr(i3)).Value = c1 Range("F" & CStr(i3)).Value = D1 Range("G" & CStr(i3)).Value = D2 i3 = i3 + 1 i2 = i2 + 1 i1 = i1 + 1 Case Is > 0 Range("E" & CStr(i3)).Value = c2 Range("G" & CStr(i3)).Value = D2 i3 = i3 + 1 i2 = i2 + 1 Case Is < 0 Range("E" & CStr(i3)).Value = c1 Range("F" & CStr(i3)).Value = D1 i3 = i3 + 1 i1 = i1 + 1 End Select Loop End Sub 要は、貸方用、借方用、出力用とカウンターが3つ必要だという ことです。
その他の回答 (2)
- FEX2053
- ベストアンサー率37% (7991/21371)
いや、だから「伝票番号が一致したデータの中での、借り方側の 行数をカウントしているか」という話です。 私がよくやるのは、「貸方側科目名&借り方側科目名」というデータを 作って、この長さがゼロになるまでループを回す、って方法ですが。
- FEX2053
- ベストアンサー率37% (7991/21371)
コードがないと何とも言えませんが、単純に「仕分けるときに 貸方、借方の最大行数をチェックする」ロジックを入れれば 済む話では? つか、こういう処理をするとき、初めから「先頭列だけでコント ロールする」ような処理をする方が問題だと思いますけど。
補足
書き込みありがとうございます。 質問文が分かりづらかったようで、申し訳ありません。 借方と貸方の最大行数(これはループ時に取得しています)ではなく、“各仕訳の中での”借方の行数と貸方の行数で、借方の行数が少ない場合の質問です。 データの比較は、質問文にも書かせていただいていますが、仕訳伝票の“伝票番号と伝票行番号が一致する”という条件で比較しているので、先頭列だけでコントロールするような処理はしていません…。
お礼
お忙しい中、一例を示していただき、ありがとうございます。 勉強になります。 今回は当初の処理が済んだ後に、貸方のみの行データがあれば抽出し、処理済みのデータに続けて転記後、日付順に並べ替えるという方法で、どうにか解消できました。