
別質問サイトにて 下記のプログラムを教えて頂き、実際に問題無く使用してから、少し勉強しましたが、分からないところがあります。
● 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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
エクセルで、数字の下4桁の0を削除する関数
Excel(エクセル)
-
excelですが一つのマスに入ってる文字を2つのマスに変更できますか
Excel(エクセル)
-
質問58753 このコードでうまく動作しません。どうしたら良いですか Private Sub Wor
Visual Basic(VBA)
-
-
4
Excelの開始ブックを固定したい マクロなしで
Excel(エクセル)
-
5
パソコンのエクセルの操作について教えて下さい。 特定の箇所にフィルターをつけるやり方がわかりません。
Excel(エクセル)
-
6
エクセル初心者です 用語等まだ良く分からないので簡単に説明していただけると幸いです タブの挿入、図形
Excel(エクセル)
-
7
excelVBAについて。
Excel(エクセル)
-
8
Excel 関数での質問です
Excel(エクセル)
-
9
Excelの数式について教えてください。
Excel(エクセル)
-
10
文字列1文字列2"文字列3を文字列1“文字列2”文字列3にまとめて置換するには"
Excel(エクセル)
-
11
【マクロ】Call関数で呼び出した場合、共通の変数宣言は、省略できますか?
Excel(エクセル)
-
12
エクセルのセルをクリックすると頻繁に出てくる
Excel(エクセル)
-
13
日付がバラバラ
Excel(エクセル)
-
14
Excelの関数で質問です
Excel(エクセル)
-
15
Excelのデーターバーについて
Excel(エクセル)
-
16
役所でもらった書類をエクセル化するには? 役所に申請する用紙があります。A4で表になっていて枠内に文
その他(Microsoft Office)
-
17
Visualbasicの現状について教えてください
Visual Basic(VBA)
-
18
エクセル数式に問題があります
Excel(エクセル)
-
19
vbe でのソースコード参照(msgbox)について
Excel(エクセル)
-
20
VBAのエラー表示の対処法について
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【マクロ】実行時エラー '424':...
-
他のシートの検索
-
vba テキストボックスとリフト...
-
【画像あり】オートフィルター...
-
Office2021のエクセルで米国株...
-
エクセルのVBAで集計をしたい
-
【マクロ】【配列】3つのシー...
-
【マクロ】【相談】Excelブック...
-
エクセルに写真が貼れない(フ...
-
エクセルのライセンスが分かり...
-
【マクロ】元データと同じお客...
-
エクセルシートの見出しの文字...
-
【マクロ】excelファイルを開く...
-
LibreOffice Clalc(またはエク...
-
【マクロ】【画像あり】❶ブック...
-
【関数】3つのセルの中で最新...
-
【関数】=EXACT(a1,b1) a1とb1...
-
セルにぴったし写真を挿入
-
Excelに貼ったXのURLのリンク...
-
【マクロ】【画像あり】4つの...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【マクロ】元データと同じお客...
-
エクセルの関数について
-
【画像あり】オートフィルター...
-
エクセルのVBAで集計をしたい
-
エクセルのリストについて
-
【マクロ】数式を入力したい。...
-
【マクロ】【相談】Excelブック...
-
Office2021のエクセルで米国株...
-
【マクロ】実行時エラー '424':...
-
他のシートの検索
-
エクセルの複雑なシフト表から...
-
【マクロ】【配列】3つのシー...
-
vba テキストボックスとリフト...
-
【マクロ】左のブックと右のブ...
-
【マクロ】変数に入れるコード...
-
エクセルシートの見出しの文字...
-
【マクロ】別ファイルへマクロ...
-
【関数】同じ関数なのに、エラ...
-
Amazonでマイクロソフトオフィ...
-
ページが変なふうに切れる
おすすめ情報