- ベストアンサー
Excel2007 VBA 最終行の特定セルの取得
- A列の入力を欠いた最終行の特定セルの取得及び転記についてご教示ください。
- 下記の要領で現金出納帳を作成しています。項目は日付、摘要1、摘要2、収入金額、支出金額、残高金額の6つです。
- 月末の残高金額を次月に繰り越すために、最終行の残高金額を取得したいです。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
NO3です。 Withを理解されていない、各オブジェクトコードの先頭にはピリオド「.」が必要です。 With Activesheet .Range("A3:E50").ClearContents .Range("B3") = "繰越残高" .Range("C1") = Sheets("月リスト").Cells(i + 1, 1).Text .Range("A3").Value = Format(DateSerial(Year(Date), Month(Date) + 1, Day(Date)), "m月") & "1日" .Range("F3") = Worksheets(i).Range("F" & Rows.Count).End(xlUp) End With
その他の回答 (4)
- imogasi
- ベストアンサー率27% (4737/17069)
最終行の行番号rが判れば、そのセルの値など、Cells(r,"F")で取れればしまいでは無いか。 #1の補足質問など見ると、VBAの経験や勉強を少しはしているのかなと思ってしまう。 この程度の応用が利かないレベルだと、回答の仕方が難しいし、質問の回答も役に立たない、誤解される恐れが多い。 ーー 私がこの質問で読んで考えた、質問内容は、各列でデータ入力最終(下)行がばらばらで、それらのうちの一番下にセルの ある行を見つける、というのが、内容ではないのかな。 ーー これなら1ッパツでは判らず、A列からM列(表として一番右に作っている列)」までとかについて、各列で・・・End(xlUp).Rowで聞いて(繰返して)、それら(各列)の最大値を取らないとならない、と思った。
お礼
imogasi様 ご回答ありがとうございます。 お礼が遅くなり申しわけございません。 VBAの参考書等を読みこんで 簡単なコードを作りながら研鑽を積むことにします
- mu2011
- ベストアンサー率38% (1910/4994)
NO2です。 前回答で紛らわしい記載がありますので訂正します。 With~With Endを変更と記載しましたが中のコードではなく、With~With Endの全てコードが対象です。 因みに残高の他に設定項目がある場合はWithでまとめる事になりますが、「With ActiveWorkSheets」ではなく「With ActiveSheet」として下さい。
お礼
ご回答ありがとうございます。 補足質問の方を見ていただければ 幸いです。 ..
補足
mu2011様 ご回答ありがとうございます。 今回の質問に関するコードは以下の通りです。 mu2011様のご回答を含めてを書き直しましたが、 新しいシートF3セルに残高を記入することが できませんでした。End(xlUp)のあとに.Valueを 記述してみましたが、やはり記述することが できませんでした。 たびたび初歩的な質問で大変恐縮ですが、 この記述からさらに新しいシートF3セルに残高を記入するための コードをご教示願えたら幸いです。 よろしくお願い申し上げます。 なおコードにはご指摘のとおり他に設定項目があります。 Sub 繰越_Click() Application.ScreenUpdating = False Dim i As Integer '既存のシート数を取得 i = ThisWorkbook.Worksheets.Count '最終シートをコピーして後ろに挿入 Worksheets(i).Copy after:=Worksheets(i) '月リストからシート名を取得してシート名変更 Worksheets(i + 1).Name = Sheets("月リスト").Cells(i + 1, 1).Value '新しく作成したワークシートについて以下の処理を行う With Activesheet '費用項目の値をクリアする Range("A3:E50").ClearContents 'B3セルに"繰越残高"を入力する Range("B3") = "繰越残高" 'C1セルの月名を次月にする Range("C1") = Sheets("月リスト").Cells(i + 1, 1).Text 'A3セルの月日を次月1日にする Range("A3").Value = Format(DateSerial(Year(Date), Month(Date) + 1, Day(Date)), "m月") & "1日" '当月の残高を次月に繰り越す(残高が記入されている最終行,F列の値を次月シートのF3セルに代入する) Range("F3") = Worksheets(i).Range("F" & Rows.Count).End(xlUp) End With Application.ScreenUpdating = True End Sub
- mu2011
- ベストアンサー率38% (1910/4994)
一例です。 with~End Withのコードを次のように変更しては如何でしょうか。 Activesheet.Range("F3") = Worksheets(i).Range("F" & Rows.Count).End(xlUp)
お礼
ご回答ありがとうございます。 No.3の補足質問の方を見ていただければ 幸いです。
- DreamyCat
- ベストアンサー率56% (295/524)
with 句を使っているので、次行の頭に.を追加 .Range("F3") = Worksheets(i).Range("A1045876").End(xlUp).Offset(0, 5).Value .Range("F3") = Worksheets(i).Range("A1045876").End(xlUp).Offset(0, 5).Row valueでセルの値(残高?)を取得し Rowで行を取得します。
お礼
DreamyCat様 ご回答ありがとうございます ご回答について補足質問がございますので、 そちらの方もご確認いただければ幸いです。
補足
DreamyCat様 私の質問が紛らわしいものでした。 大変恐縮です。 質問したかったことは「最終行の特定セルの取得」ではなく、 正確には「最終行の特定セルの値の取得」でした。 DreamyCat様のご回答を使うと、 最終行の行番号は返せても、「セルの値」は 返すことができません。 たびたびの質問でお手数をおかけしますが、 当初の質問の内容で、 最終日においてA列セルの入力を欠いた最終項目の 残高の「値」を返すコードはどのように記述すれば、良いでしょうか? ご存知であればよろしくお願いします。
お礼
mu2011様 ご回答ありがとうございます。 お礼が遅くなり申しわけございません。 Withステートメントにおいてピリオド「.」が 必要でしたね。VBAの参考書等を読みこむようにします