記録行が2~30行のA帳簿で、伝票番号1はA帳簿に該当するので、2行目に記録されます。次の伝票番号2は、A帳簿に該当しなかったので、該当するB帳簿に記録され、A帳簿の3行目は空白行となります。次の伝票番号3は、A帳簿に該当したため、A帳簿に記録されますが、4行目に記録されるが、3行目が空白行として記録されてしまいます。空白行の対処に悩んでいます。行間を空けないで記録できるコードを教えて下さい。現在のコードは、Sh1のM18セルに数値がある場合は、Sh14の行に記録されるが、Sh1のM18セルの数値が0の場合には、Sh14の行が空白となります。なお、Sh14を記録は別のコードにA帳簿を呼び出し転記するようにしています。コードは補足に添付します。
No.4ベストアンサー
- 回答日時:
こんにちは
示されている処理コードとイメージが合わないのですが・・・
>現在の不具合は“0”の場合に該当する帳簿の行が空白行となり、次の伝票番号で入力シートに数値が入った場合、
>該当するのですが空白行の下の行に記録されます。
0の場合何もせずに上から空白行を見つければ空白行は発生しないはず
ご質問のコードで合っていそうですが
mRow=0はあり得る? + 1 は必要ですか
また 伝票番号はFではなくG列です
前処理で名前が先に入るなんて事は無いですかね
エリアで上から詰めて入力するのなら
mRowはエリアの初めの行(見出し行など)
lastRow = sh10.Cells(mRow, "G").End(xlDown).Row + 1
sh10.Cells(lastRow, "F").Value = sh1.Cells(7, "C").Value '名前
sh10.Cells(lastRow, "K").Value = sh1.Cells(18, "M").Value '枚数
sh10.Cells(lastRow, "E").Value = sh1.Cells(7, "N").Value '日
sh10.Cells(lastRow, "D").Value = sh1.Cells(7, "M").Value '月
sh10.Cells(lastRow, "G").Value = sh1.Cells(2, "Q").Value '伝票番号
又は
Do While sh10.Cells(lastRow + mRow + 1, "G").Value <> ""
lastRow = lastRow + 1
Loop
lastRow = lastRow + 1
・
・
なのでは・・・
いつも、ご教授いただき有難うございます。汎用性のないVBAでの事務処理の自動化の一連の流れの中で、最後の帳簿への記帳コードを教えていただきながら試行錯誤で、やっとここまできました。ご提示いただいたコード等を参考に完成させたいと思います。作業にしばらくかかりそうなので一旦質問を中止させていただきます。
No.5
- 回答日時:
閉じてトライする件、分かりました
コードの処理自体は単純な流れであるような気がしますが 変数の取得値があっているのかなどは 表組みが分からないのでコードだけでは良く解りません
ステップ実行やイミディエイトウィンドウへの出力、 状況によっては
ローカルウィンドウなどを使い、処理途中の変数の値を確認しながら
処理を追って行くと 原因の特定や処理手順の不具合など
改善方法をつかめるかも知れません
健闘を祈ります 頑張ってください
No.3
- 回答日時:
14を10に変え 質問文を読み直しました
sh10の 2~30行のA帳簿
B帳簿のシートと範囲は?
>該当する
該当とはどのような事を指しますか?
sh10の表組みイメージが良く解りません
遅い時間まで、ご対応いただき有難うございます。
>sh10の 2~30行のA帳簿
sh10シートには、4月~翌年3月までの1年間の月ごとの受払帳を同じ列に作成しています。1行目は「繰越」行のため2行目から30行を転記行としています。
>B帳簿のシートと範囲は?
商品券の種類により、A,B,C,Dの帳簿のシートを作成しています。各シートの表は全く同じで、種類は枚数セルのM18はA,M23はB,M27はC,M31はCへと転記するようにしています。
>該当する
該当とはどのような事を指しますか?
sh1に入力された4種類の内、「枚数」セルに入力された種類がA,B,C,Dのどの種類の帳簿に該当するかを指しています。現在の不具合は“0”の場合に該当する帳簿の行が空白行となり、次の伝票番号で入力シートに数値が入った場合、該当するのですが空白行の下の行に記録されます。
>sh10の表組みイメージが良く解りません
画像の添付ができませんが、前期の>sh10の2~30行のA帳簿と次の質問の内容でご了承いただけたら幸いです。
No.2
- 回答日時:
一応、整理したコードです
Public Sub Giftbook_main(mRow As Long)
Dim sh10 As Worksheet
Dim sh1 As Worksheet
Dim sh9 As Worksheet
Dim lastRow As Long '最後の記録行を追跡する変数
Set sh10 = Worksheets("A商品券受払帳")
Set sh1 = Worksheets("入力シート")
Set sh9 = Worksheets("振替伝票①")
Dim Rng As Range, slip_number As Range
Dim numRow As Long
Set Rng = sh10.Range("A2", sh10.Cells(Rows.Count, "A").End(xlUp))
'売上伝票番号sh1.Cells(2, "Q").Valueの値をsh10A列範囲内で探す
Set slip_number = Rng.Find(What:=sh1.Cells(2, "Q").Value, LookIn:=xlValues, LookAt:=xlWhole)
If slip_number Is Nothing Then
'無ければ
MsgBox ("売上伝票番号=" & sh1.Cells(2, "Q").Value & "は入力シートにありません")
Exit Sub
Else
'有れば見つけた売上伝票番号の行番号を変数に代入
numRow = slip_number.Row
End If
If sh1.Cells(18, "M").Value = "" Then
MsgBox ("枚数が未表示です")
Exit Sub
End If
If sh1.Cells(7, "L").Value = "" Then
MsgBox ("年が未表示です")
ElseIf sh1.Cells(7, "L").Value > 2 Then
sh10.Cells(7, "D").Value = sh1.Cells(7, "L").Value
Else
Exit Sub
End If
'下記の処理は不明のまま
If sh1.Cells(18, "M").Value = "0" Then
'0の時 行を削除
sh10.Cells(numRow + mRow, "F").EntireRow.Delete
Else
'見つけた売上伝票番号行に纏わる処理
sh10.Cells(numRow + mRow, "F").Value = sh1.Cells(7, "C").Value '名前
sh10.Cells(numRow + mRow, "K").Value = sh1.Cells(18, "M").Value '枚数
sh10.Cells(numRow + mRow, "E").Value = sh1.Cells(7, "N").Value '日
sh10.Cells(numRow + mRow, "D").Value = sh1.Cells(7, "M").Value '月
sh10.Cells(numRow + mRow, "G").Value = sh1.Cells(2, "Q").Value '伝票番号
' 最後の記録行を更新
lastRow = sh10.Cells(mRow, "F").End(xlUp).Row + 1
sh10.Cells(lastRow + mRow, "F").Value = sh1.Cells(7, "C").Value '名前
sh10.Cells(lastRow + mRow, "K").Value = sh1.Cells(18, "M").Value '枚数
sh10.Cells(lastRow + mRow, "E").Value = sh1.Cells(7, "N").Value '日
sh10.Cells(lastRow + mRow, "D").Value = sh1.Cells(7, "M").Value '月
sh10.Cells(lastRow + mRow, "G").Value = sh1.Cells(2, "Q").Value '伝票番号
End If
End Sub
No.1
- 回答日時:
こんばんは
セキュリティによるものか 文字列とコードを交互に書くと投稿出来ないようです
説明文にある
>Sh14の行
コード内にSh14を示す処理が見当たりませんね
処理条件を精査して
売上伝票番号があればその範囲(mRow)の行
無ければ最終行?なのか?空白行?
特定条件なら行を削除
みたいに整理してみるのが良さそう・・
行の取得や変数名Rowの見直しをすると分かり易くなるかも・・
別の方に色々書いてみますね
有難うございます。入力ミスがありすみません。
sh14ではなくsh10の間違いです。sh9は関係ありません。いろいろやってみたのですが、どうしても空白行が記録されているようで、空白番号を含めた行に表示されてしまいます。私の能力では解決できません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excel関数式で該当月日のみ表示し、それ以外の月日を空白にしたい。 1 2022/07/17 11:59
- 確定申告 白色申告の1000万以下の個人事業主です。 ●売上関連だけ書いた売上帳 ※売れた物、売れた数、買った 1 2023/07/13 12:38
- Visual Basic(VBA) Excel VBA マクロ ある列の最終行迄を参照し、別の列の空白セルに値を入力したいです 2 2023/03/05 02:44
- 銀行・ネットバンキング・信用金庫 みずほ銀行(普通口座)の通帳を見たところ、半年記帳していなかった分が省略されており、振込などの金額が 3 2023/02/23 21:59
- その他(暮らし・生活・行事) 家計簿アプリって記録してれば履歴も増えて容量も増えてくので困ってます。みなさん家計簿アプリはケータイ 3 2023/03/13 18:52
- その他(お金・保険・資産運用) 事業復活支援金 事前確認の必要書類について 1 2022/05/07 21:36
- Visual Basic(VBA) VBAコードが作動せず、どこに問題があるのか教えて下さい。 3 2023/06/13 13:20
- Visual Basic(VBA) 【VBA】Excelで罫線を引きたい 3 2022/07/14 12:04
- 個人事業主・自営業・フリーランス 個人事業主の備品で年内に購入してカード引き落としは来年の場合は、帳簿にはどのように記録しますか?20 3 2022/12/17 00:11
- 簿記検定・漢字検定・秘書検定 古着のベール仕入れの帳簿の書き方について質問です。 例えば、古着3万円の1ベール(30着)を仕入れた 1 2022/09/19 11:37
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
勘定科目の給料賃金と専従者給...
-
弥生の青色申告オンライン を初...
-
出金伝票の書き方ですが、 勘定...
-
数量・会社ごとに異なる単価表...
-
一太郎2022に古いATOKは使える...
-
タックインデックスシール
-
共有しているエクセルのファイ...
-
Excelの見積書の消費税をブルタ...
-
パソコンからL判で印刷する方法
-
男が新卒で経理の職に就くのは...
-
Excelで作った順位表を順位の変...
-
■複式簿記■ スマホでは『複式簿...
-
100パーセント不正会計がないよ...
-
弥生会計について詳しい方教えて
-
一太郎で封筒の宛名印刷したい...
-
EXCELで改行しながらセルを連結...
-
Excelで方眼紙を作り、そこに手...
-
パソコンで請求書や納品書の作...
-
勘定科目を教えてほしいです 会...
-
勘定科目と仕訳相談 会計ソフト...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
よく、青色申告についての質問...
-
VBA 記録簿の行間を空けないコ...
-
弥生会計の青色申告ソフトを使...
-
みんなの青色申告12を2台のPCで...
-
青色申告で65万の控除を受ける...
-
弥生の青色申告で帳簿をつけて...
-
貸借対照表の資産の部の合計と...
-
やよいの青色申告:2種類の所得...
-
エクセルを使って仕入帳を作る...
-
アルバイトの給与入力(やよい...
-
個人の飲食店を営んでおります...
-
青色申告ソフトについて教えて...
-
アパート経営に適する青色申告...
-
個人事業主です。やよい会計の...
-
フリー会計で来年青色申告で確...
-
個人事業用会計ソフト
-
A4のOHPフィルムに印刷したいの...
-
A3のWORDファイルをTIFFに変換...
-
国税関係帳簿と一般帳簿違いを...
-
郵便払込取扱票への記入揺れ
おすすめ情報
Public Sub Giftbook_main(mRow As Long)
Dim sh10 As Worksheet
Dim sh1 As Worksheet
Dim sh9 As Worksheet
Dim maxrow As Long
Dim Row As Long
Dim dicT As Object
Dim key As Variant
Dim lastRow As Long '最後の記録行を追跡する変数
Set sh10 = Worksheets("A商品券受払帳")
Set sh1 = Worksheets("入力シート")
Set sh9 = Worksheets("振替伝票①")
Set dicT = CreateObject("Scripting.Dictionary")
maxrow = sh9.Cells(Rows.Count, "AT").End(xlUp).Row
For Row = 2 To maxrow
key = sh10.Cells(Row, "A").Value
dicT(key) = Row
Next
'伝票番号を記憶
key = sh1.Cells(2, "Q").Value
If dicT.exists(key) = False Then
MsgBox ("売上伝票番号=" & key & "は入力シートにありません")
Exit Sub
End If
If sh1.Cells(18, "M").Value = "" Then
MsgBox ("枚数が未表示です")
Exit Sub
End If
If sh1.Cells(7, "L").Value = "" Then
MsgBox ("年が未表示です")
ElseIf sh1.Cells(7, "L").Value > 2 Then
sh10.Cells(7, "D").Value = sh1.Cells(7, "L").Value
Else
Exit Sub
End If
Row = dicT(key)
If sh1.Cells(18, "M").Value = "0" Then
Else
sh10.Cells(Row + mRow, "F").Value = sh1.Cells(7, "C").Value '名前
sh10.Cells(Row + mRow, "K").Value = sh1.Cells(18, "M").Value '枚数
sh10.Cells(Row + mRow, "E").Value = sh1.Cells(7, "N").Value '日
sh10.Cells(Row + mRow, "D").Value = sh1.Cells(7, "M").Value '月
sh10.Cells(Row + mRow, "G").Value = sh1.Cells(2, "Q").Value '伝票番号
End If
'A商品券受払帳に転記する。
If sh1.Cells(18, "M").Value <> "0" And sh1.Cells(18, "M").Value <> "" Then
' 最後の記録行を更新
Do While sh10.Cells(lastRow + mRow + 1, "F").Value <> ""
lastRow = lastRow + 1
Loop
lastRow = lastRow + 1
sh10.Cells(lastRow + mRow, "F").Value = sh1.Cells(7, "C").Value '名前
sh10.Cells(lastRow + mRow, "K").Value = sh1.Cells(18, "M").Value '枚数
sh10.Cells(lastRow + mRow, "E").Value = sh1.Cells(7, "N").Value '日
sh10.Cells(lastRow + mRow, "D").Value = sh1.Cells(7, "M").Value '月
sh10.Cells(lastRow + mRow, "G").Value = sh1.Cells(2, "Q").Value '伝票番号
End If
If sh1.Cells(Row, "K").Value = "0" Then
sh10.Cells(Row + mRow, "F").EntireRow.Delete
End If
End Sub
以上です。(本文の方に書き込めませんでした。)