プロが教えるわが家の防犯対策術!

日々お世話になっております。
さて、、、各列で最終行が違うので、取得しようとして以下の構文を組みました、、
ところが、
lastrow+1とすると、エラーは出ませんが、表示されなくなります。
以下の構文のままだと、1行目をラベルに使っているので、そのままラベルを表示するので、ずらそうとしたのですが、、offset(1,0)にしても表示してくれません、。
どうしたらいいのでしょうか、、ご回答いただければ幸いです。。

Private Sub Worksheet_Change(ByVal Target As Range)

Const maxcolumn = 39
Dim j As Long
Dim lastrow


With Worksheets("計算表")

For j = 2 To maxcolumn
lastrow = Worksheets("間隔").Cells(Rows.Count, j).End(xlUp).Row

.Range(.Cells(12, j), .Cells(12, j)).Value = Worksheets("間隔").Cells(lastrow, j).Value
Next j


End With
End Sub

質問者からの補足コメント

  • うれしい

    この度もご回答くださり、本当にありがとうございます。
    お時間を使っていただき、本当に感謝いたします。

    正常に動きました。
    少しこの質問に関連して、動いているけど、ちょっと気になることがありますので、改めて質問させていただきます。

     今回もご尽力いただき、ありがとうございました。

      補足日時:2020/10/21 22:27

A 回答 (3件)

#2です。


ご質問をよく読んだら変な回答をしてしまったようです。すみません
最終行の下なら、空白が入るのは当然でしたね。

ラベル行しかない場合、次のカラムに進むような処理にすれば良いのかな。

Private Sub Worksheet_Change(ByVal Target As Range)

Const maxcolumn = 39
Dim j As Long
Dim lastrow


With Worksheets("計算表")

For j = 2 To maxcolumn
lastrow = Worksheets("間隔").Cells(Rows.Count, j).End(xlUp).Row
If lastrow > 1 Then
.Cells(12, j).Value = Worksheets("間隔").Cells(lastrow, j).Value
End If
Next j


End With
End Sub
    • good
    • 0
この回答へのお礼

ありがとう

度々のご回答まことにありがとうございます。お時間をとっていただき、感謝いたします。
 正常に動きました、こういう If lastrow > 1 Then 基礎なのでしょうけど、初心者泣かせ、、なような気もします。。センスないのが重くのしかかってきますが、、

お礼日時:2020/10/21 22:08

こんにちは、


>1行目をラベルに使っているので、そのままラベルを表示するので、ずらそうとしたのですが、、
lastrowが1の時2にすれば良いだけではないでしょうか?

lastrow = Worksheets("間隔").Cells(Rows.Count, j).End(xlUp).Row
If lastrow = 1 Then lastrow = 2

あと、.Range(.Cells(12, j), .Cells(12, j)).Valueは、
単に .Cells(12, j).Valueで良いかと、、、

デバッグを覚えないとこれ以上の上達は望めない気がします。。
    • good
    • 0
この回答へのお礼

いつもご回答くださいまして、ありがとうございます。
If lastrow = 1 Then lastrow = 2 こういうのはなかなか思いつきません、、センスないな~~と思いつつ、勉強させていただきます。
いましばらくお付き合いくだされば幸いに存じ上げます。
また、お時間のあるときにはよろしくお願いいたします。

お礼日時:2020/10/21 22:05

こんにちは



何をしたいのかがよくわかりませんが・・・

>lastrow+1とすると、エラーは出ませんが、表示されなくなります。
「表示されない」のではなくて、空白セルを転写してきているだけと思います。
最終行の下の行のセルは必ず「空白セル」ですから。
12行目に先に値を入れておけば、それが消えることで確認できると思います。

>1行目をラベルに使っているので、そのままラベルを表示するので、~
「間隔シート」に実際のデータが何も入っていないのでは?

それとも、もしかして「間隔シートに値を追記してゆきたい」とかであるなら、シートが逆になっているというオチだったりして。

ご質問には関係ありませんが・・・
>.Range(.Cells(12, j), .Cells(12, j)).Value
普通なら、.Cells(12, j).Value ですませますけど・・・?
    • good
    • 0
この回答へのお礼

ご回答くださいましてありがとうございます。いつもお世話になっております。
落ちはそういうことですね、、空白、、

 間隔シートにはデータはほぼリアルタイムで値が入ってきていて、それをリアルタイムで転記したいと考えておりました。

そのとおりですね、^^;それでも動くかやってみたら動きました、、

お礼日時:2020/10/21 22:00

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