こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

excel vba 複数シートから最終行値取得

ほぼ初心者です。皆様ご教授願います。
出納簿について
出納簿の一覧表としてSheet4のL列10行目から、Sheet5以降のシート名(出納簿の品名ある分)
となっています。(例:リンゴ、出納簿のシート数は年度途中に新規項目を追加します。)
その各出納簿シートのH列の残数(最終行)をSheet4のM列10行目から順に次のコードにしているのですが
Range("M10").Value = Sheets(5).Range("C" & Rows.Count).End(xlUp).Columns(6).Value


と追加の度に書き加えている状況です、これをわざわざ書き加えることなく
済む方法はないでしょうか?説明が分かりにくくてすいませんがよろしくお願いいたします。

*出納簿シートは年度初め5シートからスタートし、その後増加していきますが、年間最大20シートです。

こんな感じです。
Sheet4 
          L     M
・・・・・・     
10       リンゴ   10
11         ・    ・
12         ・    ・

投稿日時 - 2012-07-05 11:58:48

QNo.7573335

困ってます

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

> まさしく、M11はSheet(6),M12はSheet(7)という感じです。

で、あれば =GetLast(Row()-5) のコピーで行けると思うんですが……何が起きているんだろ?
エラーではなく0になっているって事は意図しないシートか意図しない行の値を見に行っているように思えます。

L10以下の値ってシート名なんですよね。
でしたらこのユーザ関数を後述の物を使って、M10に入れる式を =GetLast2(L10) にするとどうですか?

Function GetLast2(sSheetName As String) As Long
  GetLast2 = Worksheets(sSheetName).Range("C" & Rows.Count).End(xlUp).Columns(6).Value
End Function

投稿日時 - 2012-07-05 17:24:50

お礼

mt2008さま
たびたび、ご回答いただきありがとうございます。
おかげさまで、無事解決いたしました。

投稿日時 - 2012-07-05 18:17:09

ANo.3

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

ANo.1です。

> 上記のとおり試したところ、M10セルは結果表示しましたが、
> M11セル以降"0"となりました、どうしてでしょう?

私が質問の意図を勘違いしているかもしれません。

M10はSheet(5)のC列にデータのある最下行のH列の値
M11はSheet(6)のC列にデータのある最下行のH列の値
M12はSheet(7)のC列にデータのある最下行のH列の値 ……と、言う認識だったのですが合っていますか?

投稿日時 - 2012-07-05 15:44:52

補足

mt2008さま
すいません、私の説明が成ってませんでした。
まさしく、M11はSheet(6),M12はSheet(7)という感じです。

投稿日時 - 2012-07-05 16:45:00

ANo.1

各出納簿シートのH列の残数(最終行)を出す部分をユーザ関数にしてしまっては?

例えば、標準モジュールに↓のように入れておき、

Function GetLast(nSheet As Long) As Long
  GetLast = Sheets(nSheet).Range("C" & Rows.Count).End(xlUp).Columns(6).Value
End Function

Sheet4のM10セルには =GetLast(Row()-5) と、入れて下にコピーしてやります。

質問の意図を勘違いしていたら失礼。

投稿日時 - 2012-07-05 13:27:33

補足

mt2008さま
早速のご回答ありがとうございます。
上記のとおり試したところ、M10セルは結果表示しましたが、
M11セル以降"0"となりました、どうしてでしょう?

投稿日時 - 2012-07-05 14:50:01

あなたにオススメの質問