
別質問サイトにて 下記のプログラムを教えて頂き、実際に問題無く使用してから、少し勉強しましたが、分からないところがあります。
● D.Cells
の「D」はDimの略ですか?
●R.EntireRow
の「R」はRange の略でしょうか?
そもそもプログラムに略語を使用できるのですか?
● If .Column <> 4 Then Exit Sub
If .Column = 4 Then Exit Sub ではダメなんでしょうか?
同じ意味のように思えるのですが、成立しない理由を知りたいです。
●End Sub
冒頭がSubから始まり、途中End Sub が挿入されてますが、Subプロシージャが終わっているので、
次は何かしらの Sub から入力が必要なんじゃないかと思いましたが、なぜ必要ないのでしょうか?
●このプログラムはD列に次々と入力し、
Enterを押したら、同じ行の右隣の空白セルにカットコピーする条件式です。
IF関数は理解しているのですが、
この変数を扱う「Dim」の使用方法がいまいち分からず、どこで空白セルに入力をさせているのか分かりません。
ご教授お願いします。
--------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
With Target
'2セル以上なら何もしない
If .CountLarge >= 2 Then Exit Sub
'D列でなければ何もしない
If .Column <> 4 Then Exit Sub
End With
Application.EnableEvents = False
'次の入力対象セルへ値をコピー
Dest(Target).Value = Target.Value
Application.EnableEvents = True
End Sub
'次の入力対象セル
Private Function Dest(ByVal R As Range) As Range
Dim D As Range
Set D = R.EntireRow
Set D = D.Cells(D.Cells.Count).End(xlToLeft)
Set Dest = D.Offset(, 1)
End Function
----------------------------------
A 回答 (6件)
- 最新から表示
- 回答順に表示
No.6
- 回答日時:
shut0325です。
お礼拝見しました。>DESTを検索したら、destnationが出てきました。
>使いどころの違いを教えて頂きたいです。
こちらに関する補足ですが、関数名って任意(ただし一部特定の(予約された)ものを除く)ですから、好きなようにつけて良いのです。
そのコードを書いた人がdestnationの省略したものとして命名したかどうかは分かりませんが、そこは深く考えなくていいのかなと思います。
>マクロはきっかけになるボタン操作が必要ですが、VBAは入力した後、条件が揃えば自動的に実行されるのでしょうか?
それなりの基礎知識がいるのですが、マクロとしているものも中身はVBAで記述するサブルーチンと同じで、それをボタン操作やメニューなどから呼び出しているだけです。関数の場合は、セル内で他の関数と同じように「=関数名(引数、、、)」という風に呼び出すことができます。
動作するきっかけとなるものを「イベント」や「トリガ」と言います。
イベントというのは例えば「セルの値が変更されたとき」や「シートを開いた時」など、様々なものが準備されています。
イベント発生時に、条件などを見て、処理をやっていく、、という感じになります。もちろん、イベントが発生した時点で無条件に実行される、、という事も可能です。
これらの処理は「どこにそれを置いておくか」やいつも頻繁に発生するイベントに対して常時動作するようにしていたら、処理が重くなったりする、、などの弊害があります。 先ほどの「セルの値が変更されたとき」なんて常時監視して、それに対してある条件を満たすかどうかの判別処理(無処理も含む)をやっていたらせわしないと思います。
理解を深めるためには、シンプルなコード(サブルーチンや関数)をテスト的に動くように作って動作や仕組みを考えるとよいかと思います。
No.5
- 回答日時:
>変更箇所の変更内容とは値が更新されるという事ですか?
そうです。
>このコードには、セルの数を数える必要があるのですか?
「2セル以上なら何もしない」のためにはセル数を知る必要があります。なぜ「2セル以上なら何もしない」なのかについては仕様を見るか書いた人に尋ねるかしないとわかりません。
No.4
- 回答日時:
>「2セル以上なら何もしない」
>という事らしいですが、日本語に直した動作で言うところのどの部分にあたりますか?
「どの部分」というのがよくわかりませんが...
Worksheet_Changeプロシジャはワークシートが変更されたときに呼び出され、引数Targetに変更箇所が入ります。変更箇所は一つのセルの場合も複数セルの場合もあります。CountLargeでセルの数がわかるので、それが2以上なら何もしないで終了するという意味です。
No.3
- 回答日時:
こんにちは
既に適切な回答がありますが・・
>● D.Cells
>●R.EntireRow
D、R共に変数名です。
作者が自由に設定しているので、AでもBでもhogeでもかまいません。
特に意味はないですが、想像するところRはRangeの1文字目、DはDestinationの1文字目ではないかと思われます。
(何でも良いとはいえ、記憶しやすい命名にするのが普通なので)
>● If .Column <> 4 Then Exit Sub
> If .Column = 4 Then Exit Sub ではダメなんでしょうか?
意味が全く逆になりますので、ダメですね。
試してみればわかりますが、D列には反応せずにD列以外の入力に反応jするようになります。
「=」で分岐するなら、その後の処理を逆転させる必要があります。
>●End Sub
ご提示のコードは、一つのプロシージャ(=Sub)と一つの関数(=Function)がそれぞれ独立して定義されていると理解してください。
それぞれは
Private Sub Worksheet_Change()
~~~
End Sub
と
Private Function Dest()
~~~
End Function
からなっています。
ご提示の処理に限って言えば、関数Destを独立して定義する必要はないので、Sub Worksheet_Change内に組み込んでひとつのSubとして記述することも可能です。
>●このプログラムはD列に次々と入力し、~~
ご質問文を読む限り、コードの構成や意味をあまり理解なさっていないような印象を受けます。
関数Destは指定されたセルに対して、同じ行の最終列の右隣(=空白セル)を返す関数です。
これを利用して、
>'次の入力対象セルへ値をコピー
>Dest(Target).Value = Target.Value
で、空白セルに値をコピーしています。
(ちゃんとコメントに記されていますよね?)
なお、「Dim」は変数を明示的に宣言するためのステートメントです。
https://learn.microsoft.com/ja-jp/office/vba/lan …
※ 多少なりとも理解しているのなら、上に書きましたように関数Destを無くして、一つのSub内に収めるようにコードを書き直してみると、理解をする練習になるかも知れません。
回答ありがとうございます。
ご指摘・質問の通り、私は理解できておりません。
説明も私が依頼したニュアンスをそのまま述べただけです。
動作の部分ではまだ理解できておりません。
>(ちゃんとコメントに記されていますよね?)
コメントとは どこに記入されているのですか?
No.2
- 回答日時:
>● D.Cellsの「D」はDimの略ですか?
言え、違います。
Dimというのは変数を定義するものです。
ひとつ前に
Dim D As Range
と宣言していますが、これは D というレンジ型の変数(入れ物みたいなものRange型はどっちかというとクラスのインスタンスぽい?)を準備します、、というような意味です。
その後のD.Cells など、.~~ というのが、メソッド(命令みたいなもの)やプロパティ(パラメーターみたいなもの)を表します。
>●R.EntireRowの「R」はRange の略でしょうか?
これも変数と思って下さい。
Range型の変数です。
→ByVal R As Range
ここで宣言しています。
>そもそもプログラムに略語を使用できるのですか?
省略する(明示しないで良い)というものはあります。
Dimがそうですね。
特に宣言をしない変数はVBAならば、Variant型として扱われます。
他にもif は一行で書くならendif は不要です。
そういったのは随所にあります。
>● If .Column <> 4 Then Exit Sub
If .Column = 4 Then Exit Sub ではダメなんでしょうか?
同じ意味のように思えるのですが、成立しない理由を知りたいです。
<>4 は 「4以外ならば」 で =4 は 「4ならば」 ですから、全く正反対です。
>●End Sub
今回なら Worksheet_Change()というのが処理そのもので、これで終わりです。
その下に書いてあるのは関数(Function)であり、Worksheet_Changeの中で呼び出されているのがわかるかと思います。
Privateとなっているので、この関数はここ(Worksheet_Changeサブルーティン)内でしか使えません。
>●このプログラムはD列に次々と入力し、~~どこで空白セルに入力をさせているのか分かりません。
その処理を下の方に書いてあるDestという関数で処理しています。
Dest(Target).Value = Target.Value
回答ありがとうございます。
DESTを検索したら、destnationが出てきました。
使いどころの違いを教えて頂きたいです。
また、マクロはきっかけになるボタン操作が必要ですが、
VBAは入力した後、条件が揃えば自動的に実行されるのでしょうか?
ネットに載っているコードを張り付けて閉じても実行されず、躓いている状態です。
No.1
- 回答日時:
DとかRは略語ではなく変数名です。
<> 4 は「4ではない」という意味なので = 4 とは逆です。
End SubでWorksheet_Changeプロシジャの定義が終わり、その後にDest関数の定義があります。
Dimは変数の宣言です。Dim D As Range はDがRange変数であるという宣言です。
空白セルに値を入れているのは Dest(Target).Value = Target.Value です。
回答ありがとうございます。
変数名 理解しました!
あと、すみません。
教えて頂き、自分なりに構文を理解しようとしたのですが、新たな疑問がわきました。
●With Target
「ターゲットの状態」をあとの構文で示す認識で合ってますか?
この場合、
If .CountLarge >= 2 Then Exit Sub
はどういう意味なのでしょうか?
「2セル以上なら何もしない」
という事らしいですが、日本語に直した動作で言うところのどの部分にあたりますか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) B列に文字がはいったらA列に数字が入るマクロードを完成させたい 4 2023/04/21 01:58
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) オブジェクトが見つかりません 1 2023/06/24 19:43
- Excel(エクセル) VBA Private Sub Worksheet_Changeで 1 2024/05/01 16:59
- Excel(エクセル) 日付で矢印マクロ 4 2023/07/25 16:47
- Visual Basic(VBA) エクセルで、1つのセルで上書き足し算して セルの範囲を指定できますか? パソコン初心者です。 お時間 3 2023/07/05 06:13
- Visual Basic(VBA) VBA listBoxについて 2 2024/03/26 16:14
- Visual Basic(VBA) VBAに関して 2 2023/11/09 20:57
- Visual Basic(VBA) VBAで質問があります 5 2024/03/16 12:18
- Visual Basic(VBA) Excel VBA マクロ シート名を変えずにA列にあるセル名の名前でファイルの分割をしたいです 3 2024/02/05 22:10
このQ&Aを見た人はこんなQ&Aも見ています
-
それもChatGPT!?と驚いた使用方法を教えてください
仕事やプライベートでも利用が浸透してきたChatGPTですが、こんなときに使うの!!?とびっくりしたり、これは画期的な有効活用だ!とうなった事例があれば教えてください!
-
スマホに会話を聞かれているな!?と思ったことありますか?
スマートフォンで検索はしてないのに、友達と話していた製品の広告が直後に出てきたりすることってありませんか? こんな感じでスマホに会話を聞かれているかも!?と思ったエピソードってありますか?
-
もし10億円当たったら何に使いますか?
みなさんの10億円プランが知りたいです!
-
あなたの人生で一番ピンチに陥った瞬間は?
これまでの人生で今振り返ると「あの時、1番ピンチだったなぁ...」という瞬間はありますか?
-
14歳の自分に衝撃の事実を告げてください
タイムマシンで14歳の自分のところに現れた未来のあなた。 衝撃的な事実を告げて自分に驚かせるとしたら何を告げますか?
-
エクセルで、数字の下4桁の0を削除する関数
Excel(エクセル)
-
excelですが一つのマスに入ってる文字を2つのマスに変更できますか
Excel(エクセル)
-
パソコンのエクセルの操作について教えて下さい。 特定の箇所にフィルターをつけるやり方がわかりません。
Excel(エクセル)
-
-
4
Excelの開始ブックを固定したい マクロなしで
Excel(エクセル)
-
5
エクセル初心者です 用語等まだ良く分からないので簡単に説明していただけると幸いです タブの挿入、図形
Excel(エクセル)
-
6
excelVBAについて。
Excel(エクセル)
-
7
文字列1文字列2"文字列3を文字列1“文字列2”文字列3にまとめて置換するには"
Excel(エクセル)
-
8
エクセルのセルをクリックすると頻繁に出てくる
Excel(エクセル)
-
9
Excelの関数で質問です
Excel(エクセル)
-
10
Excelの数式について教えてください。
Excel(エクセル)
-
11
Excel 関数での質問です
Excel(エクセル)
-
12
質問58753 このコードでうまく動作しません。どうしたら良いですか Private Sub Wor
Visual Basic(VBA)
-
13
VBAコードのインデント表示
Visual Basic(VBA)
-
14
EXCELのページを、枠線を維持したまま印刷する方法をありませんか?
Excel(エクセル)
-
15
複数のテキストファイルをexcelでそれぞれ別シートにUTF-16で書き出したい
Excel(エクセル)
-
16
考えた式の戻り値が期待通りにならない
Excel(エクセル)
-
17
VBAでセルの書式を変えずに文字列を置換する方法をご教示ください
Visual Basic(VBA)
-
18
文字が書かれた写真や画像の文字をコピーして、Wordなどに貼り付ける方法はありますか?
その他(Microsoft Office)
-
19
vbe でのソースコード参照(msgbox)について
Excel(エクセル)
-
20
Visualbasicの現状について教えてください
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・「これはヤバかったな」という遅刻エピソード
- ・初めて自分の家と他人の家が違う、と意識した時
- ・いちばん失敗した人決定戦
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelの条件付書式について教え...
-
マクロを実行すると、セル範囲...
-
Excelでの文字入力について
-
別のシートの指定列の最終行を...
-
【マクロ】Call関数で呼び出し...
-
Excelのデーターバーについて
-
【マクロ】シート追加時に同じ...
-
Excelファイルを開くと私だけVA...
-
カーソルを合わせてる時のみ行...
-
Excel 日付の表示が直せません...
-
Excel関数の解決方法
-
エクセルで、数字の下4桁の0を...
-
システムファイルについて
-
エクセルの設定、下へスクロー...
-
UNIQUE関数の代用
-
エクセル 数字のみ抽出につて
-
Excelでプルダウン選択(I1セル)...
-
Vba アドインソフトのバージョ...
-
ユーザーマクロ作成
-
SUBTOTAL関数のように同関数の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【マクロ】重複する同じ行を、...
-
Excelの条件付き書式のコピーと...
-
vba 印刷設定でのカラー印刷と...
-
VBA の単語の意味を教えて下さい。
-
Excel 日付の表示が直せません...
-
エクセル 同じ行の隣り合う数字...
-
エクセル条件付き書式について。
-
エクセルの数式につきまして
-
ファイル名の変更
-
エクセル 数字のみ抽出につて
-
Excelの開始ブックを固定したい...
-
エクセルの数式について教えて...
-
エクセルのセルをクリックする...
-
=INDIRECT(RIGHT(CELL("filenam...
-
エクスプローラーで見ることは...
-
Excelの関数で質問です
-
至急お願いいたします 屋上の備...
-
エクセルでセルに入力する前は...
-
関数を教えて下さい
-
Excel 関数での質問です
おすすめ情報