前提
仮定として、
・ブックに3つのシートがある。
・シート1にあるコマンドボタンをクリックすることで、シート2の「A3セルから、入力されている一番下までのセル」を範囲コピーする。
ことにします。
実現したいこと
詳細は下記「該当のソースコード」に記述しますが、他のシートのセルを参照しないように「worksheets(2)」を計3回記述しているのですが、必要のない場所があるのなら削りたいと考えています。
該当のソースコード
Private Sub CommandButton1_Click() Worksheets(2).Range(Worksheets(2).Range("a3"), _ Worksheets(2).Range("a3").End(xlDown)).Copy End Sub
https://learn.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/with-statement
タイトルに入ってる機能名
スペル間違ってます(細かいですがとても大事なことです)
質問ありがとうございます。
知識が無く申し訳ないのですが、元々1文のステートメントをwithステートメントに変換するメリットはあるのでしょうか?
withステートメントは複数のステートメントの重複している部分をまとめるものだと認識していました。
タイトル renge → range です。
ご指摘ありがとうございます。
BA済みですが一応別方向のアプローチとしてコメント。将来的にどっちも知ってて損はないと思いますので
今回のような状況であればrange自体を変数化することでも簡略化可能です(宣言行は増えますが、連続でない複数個所で呼び出す場面ならWithより使いやすいです)。
-------------------------------------
dim rng as Range
set rng= Worksheets(2).Range("A3")
Range(rng, rng.End(xlDown)).Copy
変数化は思いつきませんでした。
確かに宣言行は増えますが、ステートメント自体は1行でまとまっているのですごく見やすいです。
ありがとうございます。
一応ちゃんと言っておくと、こういうのは他人に聞くような質問じゃない。
JavaScriptでletとconstとvarを初めて見た!って言ってるようなものです。
体系的な資料に1度も目を通さずに他人に聞くのは止めましょう。
まあ今更VBAを始めてるって時点でアレですが。。。
自分にはJavaScriptについての知識が無いのでconst、varがそもそも何かは知らないですが、
今更vbaを始めることはおかしいのでしょうか?
VB6という古い言語のサブセットなので最近の言語と比較すると使いにくく、VBA自体あまり触りたがられない言語というのが実情だと思います。
担当になりたくなくて出来ることを隠してる人がいるくらい。
長いのを書くと差分比較やバージョン管理が簡単に出来ず、環境構築どうしようか悩んだりします。
逆にそこを狙いたいならどうぞ。
そういう意味ではCOBOLとかさらに忌避されていますので、検討の余地ありかもですよ。
「メジャーな言語ではない」くらいにしか認識していませんでしたが、そこまで忌避されているのは初めて知りました。
別の言語を勉強する機会があれば、差分比較/バージョン管理等にも着目して決めたいと思います。
ありがとうございます。
「そこ」というのは「差分比較/バージョン管理」ではありません。
忌避されているという点ですよ。「差分比較/バージョン管理」なら海外のツールがあるにはありますが、VBAごときのために外部コードをプロジェクトに入れるのは悩ましいという話です(オレオレツールを入れるのは論外)。
COBOLerになると喜ばれますよ。
そもそもVBAを自分の定例業務の効率化や自動化で楽するため以外の目的で学んでいる人がそんなにいるかという話ですけどね
それで食っていくっていうなら(保守のしにくさの問題で)忌避されやすい言語でしょうけど今より一時間サボるために学ぶ程度なら今でもよくある話でしょう?
いや片手間に延々とメンテさせられる未来があってですね・・・それがコレもコレもと増えるんですよ
回答2件
あなたの回答
tips
プレビュー