アプリ版:「スタンプのみでお礼する」機能のリリースについて

初歩的な質問で申し訳ありません。
VBAの最終行取得についてご教授宜しくお願い致します。
ワークシートのA1には”製品コード”
の文字が入った状態です。
別のブックからデータを取得し、A2に表示させます。
A2のValueを変数cord1に
A2の上4桁を変数cord2に入れるというものなのですが、、、
Rc=cells(Rows.count,1).End(xlup).Row
cells(Rc +1,”A”).Value=8001001
Set cord1=cells(Rc,”A”)
cord2=Left(cells(Rc,”A”),4)
としました。
cord1は8001001
cord2は8001
となって欲しいのですが結果は
cord1は”製品コード”
cord2は”製品コー”
となってしまいました、、、
cells(Rc +1,”A”).Value=8001001
とした時点で、最終行はA1の”製品コード”
からA2の8001001に移っていると思ったのですが、最終行として認識してくれません。
何が問題なのでしょうか、、、
乱文失礼致しました。
どうか、よろしくお願い致します。

A 回答 (1件)

こんにちは



コードは記述内の制御に従いながら、上から順に実行されてゆきます。

>Rc=cells(Rows.count,1).End(xlup).Row
が実行された時点で、最終行(例えば200としておきます。)が変数Rcに代入されます。
この時の200はただの数値で、「最終行を示す」とか「セルの位置を表す」といった意味はありません。
これに勝手に意味を付けているのはコードの作成者であって、変数にとってみれば単なる200という数値でしかありません。
「100+100」や「1000/5」の計算結果と、なんら変わるものではないということです。

ですので、
>cells(Rc +1,”A”).Value=8001001
を実行したからといって、変数Rcの内容が変わることはありません。
(変数Rcの内容を変更もしていないのに変わってしまうようでは、困る人が続出することと思います)

Rc+1行目に値をセットした後で、再度
 Rc=cells(Rows.count,1).End(xlup).Row
を実行してみると、今度は、変数Rcには 201 の数値が代入されるはずです。


もしも、機能的に常に最終行を参照できるようなものが欲しいような時は、
 Function lastRow()
  lastRow = Cells(Rows.Count, 1).End(xlUp).Row
 End Function
のような関数を別に定義しておいて、変数を使う代わりに
 Cells(lastRow(),1).Value
といった参照方法をとることで、シートの記入状況に拘わらず、常に(その時点での)最終行の値を参照するコードになります。
    • good
    • 0
この回答へのお礼

素早い回答誠にありがとうございます!
Rows.countが常に最終行を取得するものだと勝手に理解してしまっていました…
常に最終行を取得することは全く別にあったんですね!
本当にありがとうございす!
たいへん勉強になりました。
今度もこのような初歩的な質問をするかと思いますが、今度とも宜しくお願い致します。

お礼日時:2019/02/14 12:26

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