実現したいこと
マクロで30,000行ほどのデータから条件に合致するデータのみを別シートに転記したいです
発生している問題・分からないこと
条件に合致するデータが2,500あり、そのうち7行のみが転記されません
エラーメッセージ
error
1処理は正常終了し、エラーメッセージは表示されません
該当のソースコード
VBA
1 LstRow = Worksheets("前工程より").Cells(Rows.Count, 1).End(xlUp).Row 'A列の最終行を取得 2 3 Worksheets("表紙").Cells(7, 3).Value = Left(Worksheets("前工程より").Cells(2, 3), 4) '表紙sheetのC7セルに前工程よりsheetのC2セルの年をセット 4 5 For shNo = 2 To Worksheets.Count 'シート2から最終シートまで 6 If Worksheets(shNo).Cells(1, 1).Value = "パターン名" Then 'A1が「パターン名」なら 7 accNo = Val(Worksheets(shNo).Cells(5, 2).Value) '勘定科目№の変数にB5セルの値をセット 8 Cnt2 = 9 '元帳行番号の変数に9をセット 9 For Cnt1 = 2 To LstRow '前工程よりsheetの2行目から最終行まで 10 If accNo = Worksheets("前工程より").Cells(Cnt1, 11).Value Then 'B5(勘定科目コード)=前工程よりsheetのK列なら 11 If Worksheets("前工程より").Cells(Cnt1, 1).Value = "借" Then '前工程よりsheetのA列が「借」なら 12 If Cnt2 = 9 Then '元帳行番号の変数が9なら 13 Worksheets(shNo).Cells(Cnt2, 1).Value = Worksheets("前工程より").Cells(Cnt1, 3).Value 'A列に前工程よりC列をセット(伝票日付) 14 Worksheets(shNo).Cells(Cnt2, 2).Value = Worksheets("前工程より").Cells(Cnt1, 4).Value 'B列に前工程よりD列をセット(伝票№) 15 Worksheets(shNo).Cells(Cnt2, 3).Value = Worksheets("前工程より").Cells(Cnt1, 5).Value 'C列に前工程よりE列をセット(証憑番号) 16 Worksheets(shNo).Cells(Cnt2, 4).Value = Worksheets("前工程より").Cells(Cnt1, 20).Value 'D列に前工程よりT列をセット(相手会計単位コード) 17 Worksheets(shNo).Cells(Cnt2, 5).Value = Worksheets("前工程より").Cells(Cnt1, 21).Value 'E列に前工程よりU列をセット(相手会計単位名) 18 Worksheets(shNo).Cells(Cnt2, 6).Value = Worksheets("前工程より").Cells(Cnt1, 22).Value 'F列に前工程よりV列をセット(相手勘定科目コード) 19 Worksheets(shNo).Cells(Cnt2, 7).Value = Worksheets("前工程より").Cells(Cnt1, 23).Value 'G列に前工程よりW列をセット(相手勘定科目名) 20 Worksheets(shNo).Cells(Cnt2, 8).Value = Worksheets("前工程より").Cells(Cnt1, 27).Value 'H列に前工程よりAA列をセット(相手取引先コード) 21 Worksheets(shNo).Cells(Cnt2, 9).Value = Worksheets("前工程より").Cells(Cnt1, 28).Value 'I列に前工程よりAB列をセット(相手取引先名) 22 Worksheets(shNo).Cells(Cnt2, 10).Value = Worksheets("前工程より").Cells(Cnt1, 9).Value 'J列に前工程よりI列をセット(自会計単位コード) 23 Worksheets(shNo).Cells(Cnt2, 11).Value = Worksheets("前工程より").Cells(Cnt1, 10).Value 'K列に前工程よりJ列をセット(自会計単位名) 24 Worksheets(shNo).Cells(Cnt2, 12).Value = Worksheets("前工程より").Cells(Cnt1, 16).Value 'L列に前工程よりP列をセット(自取引先コード) 25 Worksheets(shNo).Cells(Cnt2, 13).Value = Worksheets("前工程より").Cells(Cnt1, 17).Value 'M列に前工程よりQ列をセット(自取引先名) 26 Worksheets(shNo).Cells(Cnt2, 14).Value = Worksheets("前工程より").Cells(Cnt1, 31).Value 'N列に前工程よりAE列をセット(摘要) 27 Worksheets(shNo).Cells(Cnt2, 15).Value = Worksheets("前工程より").Cells(Cnt1, 18).Value 'O列に前工程よりR列をセット(自プロジェクトコード) 28 Worksheets(shNo).Cells(Cnt2, 16).Value = Worksheets("前工程より").Cells(Cnt1, 19).Value 'P列に前工程よりS列をセット(自プロジェクト名) 29 Worksheets(shNo).Cells(Cnt2, 17).Value = Worksheets("前工程より").Cells(Cnt1, 13).Value 'Q列に前工程よりM列をセット(課税区分コード) 30 Worksheets(shNo).Cells(Cnt2, 18).Value = Worksheets("前工程より").Cells(Cnt1, 14).Value 'R列に前工程よりN列をセット(課税区分名) 31 Worksheets(shNo).Cells(Cnt2, 19).Value = Worksheets("前工程より").Cells(Cnt1, 15).Value 'S列に前工程よりO列をセット(消費税率) 32 Worksheets(shNo).Cells(Cnt2, 20).Value = Worksheets("前工程より").Cells(Cnt1, 6).Value 'T列に前工程よりF列をセット(借方) 33 Worksheets(shNo).Cells(Cnt2, 21).Value = "" 'U列の値をクリア(貸方) 34 Cnt2 = Cnt2 + 1 '元帳行番号を1つ進める 35 Else '元帳行番号の変数が9でなければ 36 Worksheets(shNo).Rows(Cnt2 - 1).Copy (Worksheets(shNo).Rows(Cnt2)) '上の行をコピーし貼り付け 37 Worksheets(shNo).Cells(Cnt2, 1).Value = Worksheets("前工程より").Cells(Cnt1, 3).Value 'A列に前工程よりC列をセット(伝票日付) 38 Worksheets(shNo).Cells(Cnt2, 2).Value = Worksheets("前工程より").Cells(Cnt1, 4).Value 'B列に前工程よりD列をセット(伝票№)
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
30,000行ではなく、転記されなかった7行のみで処理をすると正しく転記されました
補足
特になし
7行と分かっているのならば、その7行のデータをよく見れば解決しそうなものなのですが。
If Worksheets("前工程より").Cells(Cnt1, 1).Value = "借" Then
がtrueになっているつもりだが、trueになっていない行が7行あるのでは?
(例えば"借 "になっているとかで)
コメントありがとうございます。
転記されなかった7行のみを抽出して処理を試すと正しく転記されるので、7行も条件は満たしていると思われます。
そのため対処方法が分からず質問した次第です。
引き続きアドバイスいただけますと幸いです。
どうぞよろしくお願いいたします。
break pointを設定して地道にデバッグするしかないですね。
データを7行のみにしたらコピーできたのならば、もう少し増やしてテストすれば分かるのでは?
vbaの一部だけが提示されていますが、提示されていない部分に誤りがあるので指摘しようがない可能性もあります。
ありがとうございます。
7行のデータを再度確認したところデータの一部に共通点があり、それを糸口に解決できそうです。
ベストアンサーに選びたいので同じ内容を回答欄に投稿いただけますでしょうか?
お手数をお掛けいたしますが、どうぞよろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー