dポイントプレゼントキャンペーン実施中!

いつもご指導ありがとうございます。
また教えて頂きたく質問させていただきます。


ブック①とブック②があります。
ブック①には1ヶ月分のシート(31日までの月ならば31シート)があり、各シートはA列に作業開始日・B列に作業終了日・C列に作業場所・D列に作業名・E列に必要材料が記載されています。
記載するシートはB列の作業終了日に合わせて(例:12/10に作業を終わらせる作業は12/10のシートに記載)記載されています。
また、上から10行分(各シートの1~5行目まではINDEXとしてますので実際は6~15行目)の作業は定期的に発生するので日付以外は固定(同一作業であっても量によって作業開始日が変わります=作業期間が変わってくる)の内容です。

ブック②はA列の作業開始日毎に1ブック(例:12/5に作業を始める作業は「12/5作業」という名のブックになりブック①のA列が該当する各項目C・D・Eを書き込む)を作りブック①の内容を転記し他部署と合わせて使います。
ただしこちらにもブック①の定期的な作業を入れる枠として6~15行目は確保しています。

仮に定期的に発生する作業をA・不定期作業をBとします。
ブック①をfind nextを使い検索しブック②に値を転記したいと思っているのですが躓いています。
例えば12/15に作業を終了させる作業A(作業期間10日間=作業開始日12/5)と12/10に作業を終了させる作業B(作業期間5日=作業開始日12/5)が作業が新たに発生したとします。
作業Aは定期的な作業ですのでブック②6~15行までの中の最終行(他の定期的な12/5開始の作業も記載されていると仮定)の次の行に転記、作業Bは16行目以降の最終行の次の行に転記したいのですが範囲を指定しての最終行の取得方法がわかりません。
どのようにコードを書けば良いでしょうか?

何卒ご指導よろしくお願いします。

A 回答 (3件)

定期的な作業を6~15行までの中の最終行の次の行、不定期な作業は16行目以降の最終行の次の行に転記するため、各々の最終行を取得し、次の行を指定するためのVBAは以下のようなものだと思います。



以下のマクロでは、転記すべき行をMsgBoxで返すようにしてみました。
(実行したものを添付画像としましたの参照してください。)

定期的作業については、A15が空セルでない場合、「6~15行目は満杯」である旨を返し、それ以外の場合、A列を15行目から上方へ最終行を探し、5行目より小さい数を返すようならINDEXの最終行である5行目までは転記不可なので、定期的作業の転記開始位置に調整し、転記できる空行の位置を返します。(添付画像①)

さらに、不定期作業は最終行数(最大行数)からA列を上方へ最終行を探し、15行目より小さい数を返すようなら、定期的作業の転記位置の最終行である15行目までは転記不可なので、不定期作業の転記開始位置に調整し、転記できる空行の位置を返します。(添付画像②)

Sub test1()
If Cells(15, 1).Value <> "" Then
MsgBox "定期業務記入行は満杯です"
Else
MaxRow_定期 = Cells(15, 1).End(xlUp).Row
If MaxRow_定期 < 5 Then
MaxRow_定期 = 5
End If
MsgBox "定期業務は" & MaxRow_定期 + 1 & "行目に記入可能です。"
End If
MaxRow_不定期 = Cells(Rows.Count, 1).End(xlUp).Row
If MaxRow_不定期 < 15 Then
MaxRow_不定期 = 15
End If
MsgBox "不定期業務は" & MaxRow_不定期 + 1 & "行目に記入可能です。"
End Sub
「VBA 指定した範囲内の最終行を取得した」の回答画像3
    • good
    • 0
この回答へのお礼

ご指導ありがとうございます。
皆様からご指摘をいただいた私の文章を解読頂き、表まで作っていただきありがとうございます!
MaxRow_定期・不定期で転記するセルを指定出来ます。
早速やってみます。
ありがとうございました!

お礼日時:2020/11/23 18:59

データを入れる範囲が決まってるなら、値があるかどうかを順番に調べてみて、なければそこに値を書き込むって方法もありますよ


データ量によっては手間かもですけど

あと長々と文章もですけど、画像を載せられますのでダミーデータの表を添付するのも宜しいかと
bookを見られない回答者に伝えやすいかも?
    • good
    • 0
この回答へのお礼

長文すみません。
次回は画像tryします。

お礼日時:2020/11/23 18:59

文章をきちんと整理してからにしましょう



仮と例えばが並列していて意味不明になっています

最終行の取得だけなら マクロの自動記録で
そのコードを見れば良いでしょう
    • good
    • 0
この回答へのお礼

ご指摘ありがとうございました。

お礼日時:2020/11/23 18:59

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!