突然失礼いたします。
前回、ファイルを開いたときに、青文字は無視、マイナスのときは赤に塗りつぶし、プラスのときは緑に塗りつぶし、それ以外は無視というプログラムを作りました。

今回は、それを文字を打っただけで実行できるようにしたいのですが、良い案はありますでしょうか。
ボタンを押すと・・・って処理でも良いんですが、それだと部長が忘れる可能性が高いんで・・・(^^;)




前回のプログラム:
Private Sub Workbook_Open()


Dim 英語 As Integer
Dim 数字 As Integer

Dim sh1 As Worksheet



英語 = 1
数字 = 1



For 数字 = 1 To 17

For 英語 = 1 To 7

'選択セル内が、文字色が青だったら無視、数字がマイナスだったら赤、数字がプラスだったら緑、それ以外は無視
If Cells(英語, 数字).Font.ColorIndex = 5 Then
Cells(英語, 数字).Interior.ColorIndex = 0

ElseIf Cells(英語, 数字) < 0 Then
Cells(英語, 数字).Interior.ColorIndex = 7

ElseIf Cells(英語, 数字) > 0 Then
Cells(英語, 数字).Interior.ColorIndex = 4

Else
Cells(英語, 数字).Interior.ColorIndex = 0

End If

Next 英語

Next 数字

End Sub

このQ&Aに関連する最新のQ&A

A 回答 (4件)

#3です


お礼読みましたが
>文字色を青に変更した際、塗りつぶしの色が無色になってくれません
当たり前です
何処にその条件が書いてありますか?
質問には
>文字色が青だったら無視
とあります、したがって無視したまでです

>Changeっていうのは、色変更に対しては無効なのですか?
少しは自分で調べましょう
Worksheet_Changeはイベントです
    • good
    • 0

私もimogasiさんの意見に賛成


まだ、質問するレベルに達していないと思う

>会社内一人でVBAを作成しいているということをご理解ください。
回答者に関係がありますか?
それより、もっと理解のしやすい質問をしてください

質問を単純にコード化してみました
'ワークシートモジュール
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Font.ColorIndex = 5 Then Exit Sub
Target.Interior.ColorIndex = 0
If Target.Value < 0 Then Target.Interior.ColorIndex = 7
If Target.Value > 0 Then Target.Interior.ColorIndex = 4
End Sub

対象は入力したセルのみです
    • good
    • 0
この回答へのお礼

どうもありがとうございます。
しかし・・・文字色を青に変更した際、塗りつぶしの色が無色になってくれません><
Changeっていうのは、色変更に対しては無効なのですか?

お礼日時:2009/05/27 09:22

シートのセルの値が変わると、何か決めた処理をする、と言うのは


シートのイベントと言う考えを理解し、その仕組みを利用することが必要。
(1)私は質問者がそのレベルに達して無いと思う。コードの書き方が多少の経験者とは思えないから。前質問でも書いたのではないかと思うが、Changeイベントは、操作者が勝手な(無意識や間違っても含め)操作をすることが考えられるので、その勝手な操作はどんなものがあるか、そしてそれに対する対策・チェックをしておく必要が有るが、難しいものだと思う。
(2)値が変わると、以前の値で、色がついている場合が有るから
一旦色を白紙的に戻し、変更後の新しいセルの値で色をつけなくてはならない。
(3)条件付き書式(「数式が」で関数利用)では賄えなかったのかな。これはMS社が作ったもので、それなりに安定している。
余り習い初めから本番に使うのは生兵法怪我の元。

この回答への補足

今試しに条件付き書式を使用してみたのですが、どうやら一回使用したあとだと、次の色を指定したりした際には1回目に行った動作が元に戻ってしまうことが判明しました・・・
あと青文字が青文字ではなくなってしまいました・・・

補足日時:2009/05/26 13:25
    • good
    • 0
この回答へのお礼

(1)に関しては、専門学校時代に習ったVBの基礎的知識と基本情報処理の知識を生かして行っている状態で、自分自身もまだ全然未発達の段階にあることはわかっています。
覚えられる知識とそうでない知識もある中、会社内一人でVBAを作成しいているということをご理解ください。

(2)に関してですが、Cells(英語, 数字).Interior.ColorIndex = 0
で代用できると思っていたのと、元々セルに色がついているものもあるので、それを更新して行える状況でシステムを考えていました。
今は実験的にプログラムを組んでいる状態で、これを少しずつ進化させて使用しようと考えています。

(3)ですが、その機能自体を今初めて知りました・・・簡易的なものの時はそれを使用しようと思います。

お礼日時:2009/05/26 13:20

シートの内容が変更されたときに発生するイベントを捉えればよいのでは?



Private Sub Workbook_Open()
の代わりに、
Private Sub Worksheet_Change(ByVal Target as Range)
を用いる。
    • good
    • 0
この回答へのお礼

イベント名は違いましたが、一応それらしきものを探して使用してみたら成功しました、ありがとうございます。

こいつ↓
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

お礼日時:2009/05/26 11:38

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


人気Q&Aランキング

おすすめ情報