ActiveXというのを使って、ある測定器から測定値をPC(エクセルシート)に取込んでいます(GPIB)。測定値は一行おきにエクセルに示されます。測定値を取り込んだ瞬間、作成したマクロによってそのときの時刻を隣の列に示したいのですがうまく表示できません。といいますかまずイベントが機能しません。どこが悪いのか教えてください。
Private Sub worksheet_change(ByVal target As Range)
i = i + 1
Cells(4 + i, 1).Value = Now
End Sub
シート内に自動的に測定値が記述されるため、記述されることをイベントとして記述されたことで発生するマクロを記述したつもりです。
No.4ベストアンサー
- 回答日時:
#3です。
> どのような、思考でこのような記述を考えてらっしゃるのでしょうか?
えっと、そんな深い思考とかではなくこの場合はこう書くって経験だけです。
Change イベントは引数の Target に Rangeオブジェクト が渡されます。
これは Target を調べれば変更のあった Rangeオブジェクト が解かると言う事です。
Target で渡される Rangeオブジェクト は1つとは限りません。「A1」もあれば「A1:A10」や「A1とB10:C20」のように連続した範囲であったり、バラバラの範囲であったりします。(複数範囲を選択してからセルに入力し、Ctrl+Enterで確定した場合など)
例えば卵のパックを Target とします。卵のパックは 6個入りも8個入りも10個入りも売っていて卵のパックと言うだけでは中身が卵だと解かるだけで、含まれる個数や個々の卵が割れていないかや、赤玉か白玉か等は不明です。
こういった場合にFor Each...Next ステートメントを使うと個々の要素を取り出して、どんな状態か調べたり、操作したり出来るのです。
先の例では
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
'r はRangeだよと宣言
Dim r As Range
'Target(複数かも知れない Rangeオブジェクト)の一つを r に代入
For Each r In Target
'もし r の列が 2(B列)なら
If r.Column = 2 Then
'r の行は同じ(0)で、一つ前の列(2-1=1でA列)に Now を代入
r.Offset(0, -1).Value = Now
End If
'次の r を調べてね
Next r
End Sub
って感じです。
Targetの要素を個別に調べる必要がなければ単純に Target を使っても良いです。
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
MsgBox "対象セルは " & Target.Address & " ですね"
End Sub
No.3
- 回答日時:
シート名のタブを右クリックして、コードの表示を選び出てきたVBE画面に書きます。
B列に入力されるとA列日時が表示されるハズです。
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim r As Range
For Each r In Target
If r.Column = 2 Then
r.Offset(0, -1).Value = Now
End If
Next r
End Sub
この回答への補足
有難う御座います。私のコードでは、不十分でした。もし宜しければ、コードの意味を教えて頂きたいです。特に
If r.Column = 2 Then
です。rが範囲なので、2列目に新しく記述されればNowを表示はわかるのですが、その記述を私のような素人の思考では思いつきません。どのような、思考でこのような記述を考えてらっしゃるのでしょうか?もちろん経験が大きなことは承知しておりますが。宜しければ、是非お願い致します。
No.2
- 回答日時:
ツール→マクロ→Visual Basic Editorを選んで、Visual Basic Editorを起動してください。
左上のプロジェクトウィンドウに、Microsoft Excel Object というフォルダがあり、そこにシート名の書かれたアイコンがあると思います。
それをダブルクリックして、現れたウインドウの左上のドロップダウンから、Worksheetを選び、右上のドロップダウンからChangeを選んでください。
上記の手順で、イベントプロシージャができますので、先の回答に記したコードを書いてください。
できましたら、当該シートに戻り、シートに文字を打ってください。
この手順でも、イベントは発生しませんか?
No.1
- 回答日時:
Private Sub worksheet_change(ByVal target As Range)
MsgBox "通過"
i = i + 1
Cells(4 + i, 1).Value = Now
End Sub
まず、これを試してみてください。
"通過"というメッセージが出なければ、イベントが発生していません。
正しいシートにイベントプロシージャを書いているかどうか、Visual Basic Editorで確認してみてください。
あと、変数iが宣言されていないのが気になります。
どこかグローバル変数で宣言されているのでしょうか。
もし宣言されて無いのでしたら、イベントプロシージャのはじめに
Static i As Long
を追加してみてください。
この回答への補足
ご回答有難う御座います。しかし、無理でした。実行[F5]が表示されてもいませんでした。なので、シートに文字を打って、イベント発生を試みましたが無理でした。なぜでしょうか?「正しいシート」ではないのでしょうか。ただ、通常の
Sub A()
Msgbox "通過"
End Sub
は、きちんと機能します。宜しければよろしくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- PowerPoint(パワーポイント) ExcelのVBAコードについて教えてください。 3 2022/05/25 14:32
- Excel(エクセル) エクセルVBAでオブジェクトが必要です 2 2022/09/10 16:37
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2022/06/10 11:06
- Excel(エクセル) B列に文字がはいったらA列に数字が入るマクロードを完成させたい 4 2023/04/21 01:58
- Excel(エクセル) 【マクロ】マクロが保存されているエクセルとは、別のエクセルブックの全シートの非表示列を再表示したい 1 2022/12/24 20:48
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Excel(エクセル) エクセルのイベントVBAを複数のシートで動かしたい 1 2022/12/07 16:55
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
別のシートから値を取得するとき
-
Excelマクロのエラーを解決した...
-
【ExcelVBA】全シートのセルの...
-
ユーザーフォームに入力したデ...
-
ExcelのVBAのマクロで他のシー...
-
【Excel VBA】Worksheets().Act...
-
実行時エラー1004「Select メソ...
-
同じ作業を複数のシートに実行...
-
実行時エラー'1004': WorkSheet...
-
excelのマクロで該当処理できな...
-
特定の文字を含むシートだけマ...
-
シートが保護されている状態で...
-
エクセルのシート名変更で重複...
-
XL:BeforeDoubleClickが動かない
-
VBAでオブジェクト変数にsetし...
-
VBA 最終行まで数式をコピーする
-
エクセルVBA Ifでシート名が合...
-
VBA 検索して一致したセル...
-
ブック名、シート名を他のモジ...
-
Excel マクロについての相談
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
別のシートから値を取得するとき
-
ユーザーフォームに入力したデ...
-
【ExcelVBA】全シートのセルの...
-
同じ作業を複数のシートに実行...
-
Excelマクロのエラーを解決した...
-
excelのマクロで該当処理できな...
-
XL:BeforeDoubleClickが動かない
-
ExcelVBA シート名を複数セルか...
-
実行時エラー'1004': WorkSheet...
-
VBA 存在しないシートを選...
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
ブック名、シート名を他のモジ...
-
【Excel VBA】Worksheets().Act...
-
ExcelのVBAのマクロで他のシー...
-
エクセルのシート名変更で重複...
-
特定の文字を含むシートだけマ...
-
シートが保護されている状態で...
-
Excel マクロについての相談
-
VBA 検索して一致したセル...
おすすめ情報