• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBA 請求データ一覧からの複数の処理)

VBA 請求データ一覧からの複数の処理

このQ&Aのポイント
  • VBAを使用して、請求データ一覧から複数の処理を行いたいです。
  • データの環境設定を変更しましたが、問題が発生しています。
  • 金額が合わなかったり、指定の列に金額が引き継がれないことがあります。

質問者が選んだベストアンサー

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率66% (1719/2589)
回答No.4

ふと思ったのですが、 リストは 1行目に項目(List1など)があって2行目からリストそのもの(I01など)がある前提(前回の回答No.5で示したこちらのリストの状態)でなのですが、もし1行目からリストそのもの(I01など)があるのでしたら For k = 2 To LastRow は For k = 1 To LastRow に変更してください。 以下は上記変更していないコードでの説明です。 あと、コードのセルが未入力の時にリストを見に行かないように(見に行く必要がないので) For k = 2 To LastRow If UBound(List(1)) >= k Then のところを For k = 2 To LastRow If Ws1.Cells(i, j).Value = "" Then Exit For End If If UBound(List(1)) >= k Then に変更してください。 No.1のコードを適用している場合(JからAMまでとANからBBまで分けている場合) 後半のList(3)の上にも For k = 2 To LastRow If Ws1.Cells(i, j).Value = "" Then Exit For End If If UBound(List(3)) >= k Then に変更してください。 以前はデータ行に未入力があれば次の行に移るために If Ws1.Cells(i, j).Value = "" Then Exit For End If がありましたが、今回は対象行は次に移ることはありません。 ただ、これは 「リストの途中に空白セルがあり、データ行のコードのセルが空白である組の金額に値が入っている場合」がなければ計算結果は変更前と変わらないと思います。

lunar-eclipce
質問者

お礼

こちらの回答でご教示頂いた修正箇所を反映させたコードで実行しましたころ、 無事 Worksheet3に請求書を作成することが出来ました。 本当に有り難うございます。何と御礼を申し上げて良いか・・・。 私の説明不足の質問にも親切にご対応頂き、 厚く御礼申し上げます。

その他の回答 (3)

  • kkkkkm
  • ベストアンサー率66% (1719/2589)
回答No.3

本題ではありませんが、環境によってはrとγよりYとγのほうが似てました。

  • kkkkkm
  • ベストアンサー率66% (1719/2589)
回答No.2

あと、同じコードが他のリストに存在するということはないですよね。

  • kkkkkm
  • ベストアンサー率66% (1719/2589)
回答No.1

画像がぼやけていてよくわかりませんが、課税非課税が前回混在していたのが分かれたという事でしょうか。 前回も半角全角前後の空白にふれたのですが 各 If UBound(List(リストの番号)) >= k Then の下にある If Ws1.Cells(i, j).Value = List(1)(k, 1) Then の部分を以下に変更してみてください。 If Trim(StrConv(Ws1.Cells(i, j).Value, vbNarrow)) = Trim(StrConv(List(1)(k, 1), vbNarrow)) Then List(1)はそれぞれの番号にしてください。 あと、「r」と「γ」のように環境によっては見た目で判別しにくい文字(rとγよりかなり見分けのつかないものもあるようです)もありますので、集計されないコードをSheet1からリストにコピペしてみて試してみてはいかがでしょう。 実行後の画像を添付しておきます。ぼやけるかもしれません。 課税非課税を分けているのでしたら、ループも分けるといいかもいれません。 For j = Columns("J").Column To Columns("AM").Column Step 3 For k = 2 To LastRow If UBound(List(1)) >= k Then If Trim(StrConv(Ws1.Cells(i, j).Value, vbNarrow)) = Trim(StrConv(List(1)(k, 1), vbNarrow)) Then mTotal(1) = mTotal(1) + Ws1.Cells(i, j).Offset(0, 2).Value Exit For End If End If If UBound(List(2)) >= k Then If Trim(StrConv(Ws1.Cells(i, j).Value, vbNarrow)) = Trim(StrConv(List(2)(k, 1), vbNarrow)) Then mTotal(2) = mTotal(2) + Ws1.Cells(i, j).Offset(0, 2).Value Exit For End If End If Next Next For j = Columns("AN").Column To Columns("BB").Column Step 3 For k = 2 To LastRow If UBound(List(3)) >= k Then If Trim(StrConv(Ws1.Cells(i, j).Value, vbNarrow)) = Trim(StrConv(List(3)(k, 1), vbNarrow)) Then mTotal(3) = mTotal(3) + Ws1.Cells(i, j).Offset(0, 2).Value Exit For End If End If If UBound(List(4)) >= k Then If Trim(StrConv(Ws1.Cells(i, j).Value, vbNarrow)) = Trim(StrConv(List(4)(k, 1), vbNarrow)) Then mTotal(4) = mTotal(4) + Ws1.Cells(i, j).Offset(0, 2).Value Exit For End If End If Next Next

関連するQ&A