
シート上のB列に日付を入れるとF列の色が変わるようにしたいです。
(他にもシート上で変更したいのがあるので、selectを使ってみました。)
privatesub worksheet_change(byval target as range)
select case target.columns
case2
if target.value=yyyy/mm/dd then
range(activecell,activecell.offset(4,0)).interior.colorindex = 3
end if
end select
end sub
動かない原因が分かるかたみえましたら教えて下さい。
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
こんにちは。
No.2さんが書いている
>なぜ、全体に小文字のコードなのかよくわかりませんが・・・
御本人の意図は分かりませんが、大学でもそういうように教えている講師がいますね。
昔のBasic の名残りで、小文字で入力して、その入力が変化しなければ、そこが間違いだと分かるのだというのです。古くからやっている人にそういう人がいます。回答者でもいましたが、VBネイティブの言語はそれでよいのですが、今は、いろんな言語がVB/VBAが混じり合うので、小文字だけにすると、動かないことがあります。決められた通りの、大文字・小文字は使い分けないといけないのです。
>動かない原因が分かるかたみえましたら教えて下さい。
コードをみますと、まだ基礎的な部分で習得していないことが多いのではないのかと思います。
>シート上のB列に日付を入れるとF列の色が変わるようにしたいです。
質問とコードが違うようですが。
>(他にもシート上で変更したいのがあるので、selectを使ってみました。)
Select でなくてもよいです。
私なりに、書いてみました。
>if target.value=yyyy/mm/dd then
これ自体は意味がありませんが、Like演算子を使って、Like "####/##/##" という書き方や書式で取るという方法もありますが、厳密に入力した値が、日付値であることを認識させるのは、ちょっと面倒な手続きが必要です。
'--------------
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
If Target.Column <> 2 Then Exit Sub
If Target.Value <> "" Then
'日付の判定は、年をいれなければ、大概において通ってしまいます。
If VarType(CDate(Target.Text)) = vbDate And VarType(Target.Value2) = vbDouble Then
Target.Offset(, 4).Interior.ColorIndex = 3
End If
Else
Target.Offset(, 4).Interior.ColorIndex = xlColorIndexNone '文字を削除したら色も消える
End If
End Sub
No.2
- 回答日時:
こんにちは
なぜ、全体に小文字のコードなのかよくわかりませんが・・・
>動かない原因が分かるかたみえましたら教えて下さい。
「動かない」わけではないと想像します。(多分、エラー等は出ていないのでは?)
No1様のご指摘の通りで、Target.Clomunsの場合、内容はRangeオブジェクトです。
値として判断されるような場合は、そのvalue値が採用されるので、(多分)case2以降の記述は実行されていないだけと思います。
>case2
このままでは、エラーになるでしょう。
Case 2
としておく必要があります。
>if target.value=yyyy/mm/dd
実行すると(多分)オーバフローエラーになるでしょう。
特に、条件式の右辺は何を意味したいのかわかりません。
>range(activecell,activecell.offset(4,0)).interior.colorindex = 3
文法的には間違っていないので、エラーは出ませんが、意図とは違う結果になるものと思います。
まず、ActiveCellはイベント発生時のセル位置なので、例えば矢印キーでセルを出てイベントが発生したとすると、ActiveCellの位置はどの矢印キーを押したかによって変わります。
>F列の色が変わるようにしたいです。
色を変えたい対象は単独セルだと思いますが、上記の記述ではセル範囲(縦に連続する4セル)を指定しているので、結果は異なるものとなるでしょう。
Targetの位置を基準にできるのでしょうから、TargetからのOffset参照をすれば良いものと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Worksheet_Change 4 2023/03/12 21:54
- Visual Basic(VBA) エクセルのVBAでダブルクリックでチェックを入れたあと 1 2022/10/26 20:30
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) 【再々投稿】VBAのプログラムで動作しなくて困っています 8 2022/10/14 09:06
- Visual Basic(VBA) 【再投稿】VBAで動作しなくて困っています 2 2022/10/11 11:05
- Visual Basic(VBA) countifsについての質問 3 2023/03/08 13:45
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2022/05/26 17:19
- Visual Basic(VBA) vbaでセルに入力したときに,その横にあるセルを保護し入力不可にするマクロを作りたいです。 2 2022/04/24 20:59
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
- Excel(エクセル) エクセルVBAでオブジェクトが必要です 2 2022/09/10 16:37
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルテキストボックスの文...
-
EXCELマクロ 保護されているシ...
-
Windowsで動くVBAがmacOSで動か...
-
データが入力されている隣のセ...
-
エクセルVBA(実行時エラー438...
-
GrapeCityのSpreadの複数セルの...
-
VBAで丸をつけたいです。
-
VBAで、貼り付け禁止命令を実現...
-
Swing 編集不可でも選択可能なJ...
-
メッセージを1度だけ表示したい。
-
セルに数値が入力されたら別の...
-
ダブルクリックすると現在の時...
-
エクセルのVBAでダブルクリック...
-
VBA セルに合わせて移動するが...
-
マクロ初心者です。何が動かな...
-
VBAのListBoxで複数選択して...
-
[VBA]型が一致しません
-
エクセルVBA セル選択後にカレ...
-
VBAについて教えてください。 E...
-
【マクロ】A列にある、日付(本...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
データが入力されている隣のセ...
-
EXCELマクロ 保護されているシ...
-
エクセルテキストボックスの文...
-
VBAで、貼り付け禁止命令を実現...
-
エクセルVBA(実行時エラー438...
-
【VBA】InputBoxで文字をセルに...
-
VBA セルに合わせて移動するが...
-
Windowsで動くVBAがmacOSで動か...
-
ダブルクリックすると現在の時...
-
メッセージを1度だけ表示したい。
-
ハイパーリンクされているファ...
-
Swing 編集不可でも選択可能なJ...
-
VBAで丸をつけたいです。
-
(VBA)アクティブセルを起点に...
-
Excel VBA セルを指定個数ラン...
-
【VBA】参照値を1ずつ増やして...
-
エクセルのVBAでダブルクリック...
-
セル色を5秒間隔で変える
-
StringGridでの文字入力制限
-
アクティブセルの行のセルを複...
おすすめ情報