いつもご尽力いただきまして、ありがとうございます。
連投になりますが、なぜ?エラーになるのか、、、
.Cells(13, j).Value = n + Worksheets("間隔").Cells(lastrow - 1, j).Value
これならエラーなしで動くのですが、
これを
t = Worksheets("間隔").Cells(lastrow - 1, j).Value
もしくは、
t = Worksheets("間隔").Cells(lastrow - 1, j).Offset(-1,0)
として、
.Cells(13, j).Value = n + t
とするとエラーになります。
-1、もしくはOffset(-1,0)
に問題があるようで、、これを取り除くと動きますし、プラス値なら動きます。。
原因がわからず、一応そのまま式にすると動くのですが、なぜだろうかと、、前にも同じような感じになって、結局そのまま代入式作らずに使ったことがあり、よろしければ、連投ですが、原因を教えていただければと思います。
Private Sub Worksheet_Change(ByVal Target As Range)
Const maxcolumn = 39
Dim j As Long
Dim n As Long
Dim t As Long
Dim lastrow As Long
With Worksheets("計算表")
For j = 2 To maxcolumn
lastrow = Worksheets("間隔").Cells(Rows.Count, j).End(xlUp).Row
n = Worksheets("間隔").Cells(lastrow, j).Value
If lastrow > 1 Then
.Cells(12, j).Value = n
If lastrow >= 3 Then
.Cells(13, j).Value = n + Worksheets("間隔").Cells(lastrow - 1, j).Value
End If
End If
Next j
End With
End Sub
No.1
- 回答日時:
原因を探るには現象を把握する必要があるのでは?
lastrow にいったいどんな数値が入っている時に起こるのか?
それはなぜそうなるのか?
コードを提示されるより実際のSheetで確かめるのがわかりやすいかと。
そしてデバッグにより変数の値の調べ方を知るべきです。
https://excel-ubara.com/excelvba1/EXCELVBA490.html
とか。
No.2
- 回答日時:
こんにちは
度々ご質問を拝見しますが、デバッグに関するご質問の場合、
どこでエラーになり、どのようなエラーになるのかを示さなければ、
いけないと思います。
更に出来れば、デバッグの検証結果などを加えるべきです。
t = は、どこに入るのですか?これ大事だけど、、、
もっとも、If lastrow > 1 Then 内であっても If lastrow >= 3 Then内であってもエラーになる可能性がありますね。
t = Worksheets("間隔").Cells(lastrow - 1, j).Offset(-1,0)の場合
If lastrow > 1 Thenの条件下なら、
lastrowが3の時、エラー13 (ラベルが文字列の場合)
該当セルの値が文字列ならlastrowの値に関係なく エラー13
lastrowが2の時、1004エラー
少しずれますが、
n = Worksheets("間隔").Cells(lastrow, j).Value
t = Worksheets("間隔").Cells(lastrow - 1, j).Value
t = Worksheets("間隔").Cells(lastrow - 1, j).Offset(-1,0)
.Cells(13, j).Value = n + Worksheets("間隔").Cells(lastrow - 1, j).Value
示されているプロシージャの場合、上記はすべてエラーになる可能性があります。これは理解できますか?
.Cells(13, j).Value = n + t に関しては各変数に代入する段階でエラーが返るので問題ないように思います。
各セルにはどのような値が入っているのでしょう?
Cells(lastrow - 1, j).Offset(-1,0)が示すセルアドレスはどこでしょう。
*エラー該当位置やエラー№などが不明で且つt =の挿入位置も分かりませんので、見切りで頓珍漢な回答かも知れません。
少し自身で変更してすぐ躓くのは、教えてもらったコードの意味を理解していないせいです。たとえ理解していたとしても、ご自身で検証して解決方法にたどり着けるようにしなければ、先に進みません。
明らかにデバッグしていないようなので、
ある程度のデバッグ方法やデバッグの知識を学習しなければ、これ以上のスキルアップは望めそうにないと思います
一応、3度目なので今後は、デバッグを覚えなさいアドバイスはしませんね。
ご回答いただきありがとうございます。特にセルの結合はしておりません。
なので、
t = Worksheets("間隔").Cells(lastrow - 1, j).Value
t = Worksheets("間隔").Cells(lastrow , j).Offset(-1,0)
で問題があるというのは明らかなのですが、
それがなぜかわからないという状況です。
.Cells(13, j).Value = n + Worksheets("間隔").Cells(lastrow - 1, j).Value
とすると正常に動くのですが、、、なぜかわからないままです。
上記にも書きましたが、ここであるとの確定はできてますが、それがなぜだかわからないという状況です。
No.3
- 回答日時:
No.1です。
私なら。
まずエラーが出た際に変数: j にカーソルを重ねて『 j = ?』と『どの列が問題なのか』を調べますね。
そしてシートの作成方法として横方向にセルを結合したりはしません。
例えばA列とB列が行毎に結合されているとします。
データは2行目以降入ってます。
Cells で1列ずつ最終行を取得するとします。
A列はデータの最後の行が最終行になりますが、B列の最終行は1行目です。
これは結合セルの一番左のセルが有効であってそれより右のセルにはデータが入っていないと言う扱いになります。
シート情報として以前出ていたのかどうかは遡って調べるのも何なので、取り敢えずミスりそうな件と言う事で書かせていただきました。
ご回答いただきありがとうございます。特にセルの結合はしておりません。
なので、
t = Worksheets("間隔").Cells(lastrow - 1, j).Value
t = Worksheets("間隔").Cells(lastrow , j).Offset(-1,0)
で問題があるというのは明らかなのですが、
それがなぜかわからないという状況です。
.Cells(13, j).Value = n + Worksheets("間隔").Cells(lastrow - 1, j).Value
とすると正常に動くのですが、、、なぜかわからないままです。
No.4
- 回答日時:
#2です
>ご回答いただきありがとうございます。特にセルの結合はしておりません。
私の回答に結合などと言うキーワードはないと存じます。また、エラー内容なども返信にないようですね。
つまり、時間を割いて回答した内容をろくに読まずに返信された事だと推測します。誠意あるやり取りが出来そうもないので、追記回答を辞退させて頂きます。
悪しからず
何を書くのもご自由ですが、マウントポジション取って話をしてくるなら、二度と回答していただくなくても結構ですよ、ちゃんと読んでます^^、
勝手に誠意がないとか、堂々と書くのはどうかと思いますが?
リアルで会って、面と向かって話ができないさそうなので、
ネット弁慶でこれ以上は追記しないと思いますが、もし面と向かっていいたいから、いつで連絡先教えますので、堂々と話し合いしましょう。
No.5
- 回答日時:
念のため、確認させてください。
If lastrow >= 3 Then
.Cells(12, j).Value = n + Worksheets("間隔").Cells(lastrow - 1, j)
上記では、動くのですよね?
下記では、アプリケーション定義またはオブジェクト定義のエラーになるのですよね?
If lastrow >= 3 Then
t = Worksheets("間隔").Cells(lastrow - 1, j).Value
または、
If lastrow >= 3 Then
t = Worksheets("間隔").Cells(lastrow , j).offset(-1)
いつもご回答くださってありがとうございます。
はい、そうなのです、、
イミディエイトウインドウには、t = Worksheets("間隔").Cells(lastrow - 1, j).Value
これを入れると、アプリケーション定義またはオブジェクト定義のエラーと出てくるのですが、なら、どうしたらいいのか、、という状態です。。
何が違うんだろうか、、、とずっと悩んでいます。
No.6
- 回答日時:
イミディエイトウインドウに、
t = Worksheets("間隔").Cells(lastrow - 1, j).Value
を入れると、アプリケーション定義またはオブジェクト定義のエラーと出てくるのですか?
If lastrow >= 3 Then
.Cells(12, j).Value = n + Worksheets("間隔").Cells(lastrow - 1, j)
を入れると動くということですか?
最初の方(動かない方)に、If lastrow >= 3 Then が無いのは何故ですか?
ご回答くださり、ありがとうございます。
If lastrow >= 3 Then
.Cells(13, j).Value = n + Worksheets("間隔").Cells(lastrow - 1, j).Value
是なら動いています。
n = Worksheets("間隔").Cells(lastrow, j).Value
t = Worksheets("間隔").Cells(lastrow - 1, j).Value
If lastrow >= 3 Then
.Cells(13, j).Value = n + t
としたら、エラーになるということです。
No.7ベストアンサー
- 回答日時:
それならそうと最初から言ってくれれば、常連回答者さんを失わずに済んだものを・・・(教えてくれる人、減っちゃいましたね。
っていうか、いなくなっちゃうかもですよ)。さて、本題です。
次の二つは、同じじゃないです(きっぱり!!)
【エラーにならない】
If lastrow >= 3 Then
.Cells(13, j).Value = n + Worksheets("間隔").Cells(lastrow - 1, j).Value
【エラーになる】
n = Worksheets("間隔").Cells(lastrow, j).Value
t = Worksheets("間隔").Cells(lastrow - 1, j).Value
If lastrow >= 3 Then
.Cells(13, j).Value = n + t
例えば、変数 lastrow が、ゼロの場合、エラーにならない方は、何もせずにIF文を抜けます。
方やエラーになる方は、「n=~」の2行分の命令は実行されてしまうので、ここでエラーが発生します。
エラーにならない方と同じにするなら、「If lastrow >= 3 Then」をもっと上に書かないといけません。
ご回答いただきましてありがとうございます、上にすると、エラーがなくなりました、つまり0にしていた、、ということですね、、
ありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) なぜExit Subがあるのかわかりません 4 2023/02/19 12:34
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
- Visual Basic(VBA) ユーザーフォームの書き出しで追加のご相談 ユーザーフォームの値をシートに書き出す際、コードが表示され 2 2022/08/05 10:58
- Visual Basic(VBA) VBA 別ブックからの転記の高速化について VBA 別ブックからの転記の高速化についてご教授下さい。 19 2022/07/26 13:07
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
- Visual Basic(VBA) 2つ目のコンボボックスが動作しません。 3 2023/03/25 12:29
- Visual Basic(VBA) 【VBA】特定のワードが入っている行全体を塗りつぶしたい 4 2022/04/20 15:22
- Visual Basic(VBA) VBA処理追加 こちらでご教示頂いたのですが回答完了させてしまいましたのでこちらからまた質問させてく 2 2022/10/27 09:57
- Visual Basic(VBA) vbaを早くしたい 5 2022/09/09 10:58
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルエラー13型が一致しま...
-
実行時エラー 438になった時の...
-
ExcelVBA Range クラスの Page...
-
エクセルVBAで以下のようなコー...
-
プロシージャ名の取得
-
なぜこんな初歩的なVBAのIf文で...
-
エラー1004 PDFの保存ができま...
-
VBAがブレークモードになっ...
-
ADODB.Streamを使用してUTF-8を...
-
INSERT INTOステートメント構文...
-
Outlook.ApplicationをCreateOb...
-
実行時エラー -'-2147417848
-
【Excel VBA】マクロをボタンに...
-
VB6 エラー:438 (InputBoxに値)
-
Invalid procedure call or arg...
-
Application.ActiveInspectorで...
-
vbaのvlookup関数エラー原因を...
-
EXCEL VBAマクロ中断でデバッグ...
-
VBAのコードがエラーになっ...
-
VBA 別シートのセルから、文字...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
実行時エラー 438になった時の...
-
エクセルエラー13型が一致しま...
-
【Excel VBA】マクロをボタンに...
-
なぜこんな初歩的なVBAのIf文で...
-
VBAでのエラー
-
マクロについて教えてください...
-
ExcelVBA Range クラスの Page...
-
実行時エラー3001「引数が間違...
-
VBS実行時エラー オブジェクト...
-
VBAがブレークモードになっ...
-
OLEDB.NETで接続できない
-
プロシージャ名の取得
-
EXCEL VBAマクロ中断でデバッグ...
-
VBSで変数の宣言はできないので...
-
ADODB.Streamを使用してUTF-8を...
-
実行時エラー -'-2147417848
-
AccessVBAでExcelを起動し、罫...
-
VB6+SQL サーバー 2000 で 実行...
-
Outlook.ApplicationをCreateOb...
-
Application.ActiveInspectorで...
おすすめ情報
t = Worksheets("間隔").Cells(lastrow - 1, j).Value
t = Worksheets("間隔").Cells(lastrow , j).offset(-1)
で、アプリケーション定義またはオブジェクト定義のエラーです
となりますが、特に何をしたわけでもないので、、
If lastrow >= 3 Then
.Cells(12, j).Value = n + Worksheets("間隔").Cells(lastrow - 1, j)
そのままだと動くのですが、、同じことしてるはずなのに、どうしてかいまだにわからない、という状況です。
今回もご回答くださり、ありがとうございました。
回答がつかなくなるかもしれないというご意見もございましたので、
今後は質問を控えるよういいたします。