今だけ人気マンガ100円レンタル特集♪

平素はお世話になっております。
さて、何度もやりなおして、ようやく正解(厳密な成果もあるかと思いますが、とりあえず意図したように動いたということで。。)にいたりました。
何度も転記してくれずに、どうしてかと、やってみて、以下で動きましたが、
①正解
Const maxcolumn = 39
Dim lastrow As Long
Dim j As Long
Dim n As Long

For j = 2 To maxcolumn
lastrow = Worksheets("出目回数").Cells(Rows.Count, j).End(xlUp).Row
n = lastrow + 1

If j = 3 Then Worksheets("出目回数").Cells(n, j) = Worksheets("計算表").Range("D9").Value
Next
②不正解
Const maxcolumn = 39
Dim lastrow As Long
Dim j As Long
Dim n As Long
n = lastrow + 1 '//この位置がまず違っていた。
For j = 2 To maxcolumn
Next j '//この位置が違った
lastrow = Worksheets("出目回数").Cells(Rows.Count, j).End(xlUp).Row

If j = 3 Then Worksheets("出目回数").Cells(n, j) = Worksheets("計算表").Range("D9").Value

質問させて頂きたいのは、位置によって変わるということは、エクセルでは、計算過程があるということなのでしょうか、、
 よろしければ、教えていただければ幸いです。

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

  • 全部目を通したので、辿り着けたのですが、位置が違うだけで全然違うのがなぜなのか、やっていればわかってくるのでしょうけど、、
    今回でいうと、LASTROW計算してから、LASTROW+1を計算するというおちなんでしょけど、、何か計算過程に規則性があるのなら、それを知りたいというところです。

    No.2の回答に寄せられた補足コメントです。 補足日時:2020/10/25 18:56
  • 画像を添付しましたが、どうしても、2列になると、追記していったところが、2つ追記されてしまうのです、どうしてこういうことになるのか、、というのが質問の趣旨です。

    「VBA基本構文の作り方 転記について」の補足画像2
      補足日時:2020/10/26 00:51

A 回答 (10件)

No.2です。



不正解の方は変数:lastrow にはまだ何も値を代入してないので初期の0(だったかな?)のはず。
それに +1 しても変数:n は 1 のまま。

正解の方はループの中で順次最終行を取得していてそれに +1 した値を変数:n に代入する。

固定された値のままか列毎に適宜変動する値なのかの違いですね。
    • good
    • 0
この回答へのお礼

ご回答ありがとうざいます、
やはりそうですよね、
それで整理できました。ありがとうございました。

お礼日時:2020/10/26 11:09

画像添付されたので 追記しますが


やはり 書くことは同じです

「日本語でルーチンを書きましょう」

これに尽きます
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます

お礼日時:2020/10/26 11:11

こんばんは



コード以前の話しのように思われます。

>何か計算過程に規則性があるのなら、
>それを知りたいというところです
マクロにしろスクリプトにしろ、言語は違っても、みな処理の手順を記したものです。
処理の手順が変われば、結果が違うのは当然なのですが、それが理解できないということでしょうか。

例えは違いますが・・・
米の上に具材とルーを乗せて、炊いてみれば、美味しいカレーライスができるはずと言っているようなものです。
料理にも手順がありますし、手順を変えれば、違うものになるか、あるいは、とても食べられたものではないものしかできません。

・ 1+2×3
・(1+2)×3
・ 1×3+2
「それぞれの計算結果が同じにならない理由がわからない」と言っているのと同じです。
    • good
    • 2
この回答へのお礼

素晴らしいご回答ありがとうございます。

お礼日時:2020/10/26 11:04

なんとなく質問の内容がわかってきたようにも思いますが



>Next j '//この位置が違った

これが余計に意味不明な状態を作り出しています
要するに No2氏が言っているように
lastrowに値がセットされる前に1を加算しているか
その後かのハナシですね

だとするならば 
まず日本語を勉強してください
そして日本語でルーチンを書きましょう
コードの実装はその後です
内容を理解しないでコピペレベルの事をしても
上達しません
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。と

お礼日時:2020/10/26 11:07

じゃ、ローカルウィンドウを表示して変数の値を見ながらステップ実行してみてください。

    • good
    • 0
この回答へのお礼

ご回答ありがとうございます

お礼日時:2020/10/26 11:10

やはり言ってる事がよくわかりません


結果が違うと言われても
こちら側には何もわからない事です
出力結果なりを 図で表示すべきです
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます

お礼日時:2020/10/26 11:10

基本的には書いたコードを上から順番に実行していくって事でしょうか。

    • good
    • 0
この回答へのお礼

そうですね、、もうちょっと補足しながら書いてみます

お礼日時:2020/10/26 11:10

ステップ実行で行がどう進むのか


見てるかどうかでは?
    • good
    • 1
この回答へのお礼

ご回答ありがとうございます。
それも見ています。なので、辿り着けた感じですが、、、

お礼日時:2020/10/25 18:58

過去の質問をいくつか見た際に変数:lastrow に狙い通りの値が入らない場合(エラーになる時)の『その列のデータ状況(有・無)』について調べてみたのかな?と気になりましたね。


データのない列であれば最終行は一番上の項目行(1行目)になりますし。

今回は計算過程?ではなく変数:j がループの外に存在していれば変動しませんし変数:n も最終行を求める前に加算してもその後に変動はしないでしょう。
と言うようにしか見えませんけど?
この回答への補足あり
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
n = lastrow + 1 の位置が違うだけでなんで結果が違うのかを知りたいということです。おそらく、順番があるのだろうと思いますが、それでいいのかどうかということが知りたいというところです。

お礼日時:2020/10/25 18:49

言ってることがよくわかりません


もう少し話を整理してください
    • good
    • 1
この回答へのお礼

ご回答ありがとうございます。上記のとおりで、
n = lastrow + 1 の位置が違うだけでなんで結果が違うのかを知りたいということです。おそらく、順番があるのだろうと思いますが、規則があるのなら、そこを知りたいというところです。

お礼日時:2020/10/25 18:53

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング