アプリ版:「スタンプのみでお礼する」機能のリリースについて

シート上の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.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
    • good
    • 0

こんにちは


なぜ、全体に小文字のコードなのかよくわかりませんが・・・


>動かない原因が分かるかたみえましたら教えて下さい。
「動かない」わけではないと想像します。(多分、エラー等は出ていないのでは?)

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参照をすれば良いものと思います。
    • good
    • 0

target.columns



ではなく

target.column
では?
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!