• ベストアンサー

Excelのプロシジャーで有効範囲のセルを限定したい

Excelの「コードの表示(V)」に、下記のフォントサイズ変更コードを登録してあります。この有効範囲を、あるセル範囲、たとえば(C3:S20) などのように限定したいのですが、どう記述したらよいのでしょうか、教えて下さい。よろしくお願いします。 (現在のコード) Private Sub Worksheet_Change(ByVal Target As Range) Dim c As Range Application.EnableEvents = False For Each c In Target If IsNumeric(c.Value) Then If Len(Mid$(c.Text, InStr(c.Text, ".") + 1)) > 1 Then c.Font.Size = 8 Else c.Font.Size = 9 End If End If Next c Application.EnableEvents = True End Sub

質問者が選んだベストアンサー

  • ベストアンサー
  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.3

#02さま。ご指摘ありがとうございました。おっしゃるとおりです。 >If Len(Mid$(c.Text, InStr(c.Text, ".") + 1)) > 1 Then この条件は  ・小数点がある場合は、小数点部の桁数が2桁以上  ・小数点がない場合は数値の桁数が2桁以上 になっています。その仕様で正しいですか? 単純に「小数あり→8ポ」「小数なし→9ポ」で良いなら  If (c.Value * 10 Mod 10) > 0 Then のように剰余を利用する手もあると思います。でも希望する仕様がはっきりしないのでこれで十分か分かりませんが…

awazo
質問者

お礼

zap35さん ありがとうございました。 小数桁数にこだわらないことにし、小数つきか整数かの判別のみで、下記で落ち着きました。 Private Sub Worksheet_Change(ByVal Target As Range) Dim c As Range, r as range set r = Application.Intersect(Me.Range("C3:G20"),Target) if r is nothing then exit sub Application.EnableEvents = False For Each c In r If IsNumeric(c.Value) Then If Int(c.Value) <> c.Value Then c.Font.Size = 8 Else c.Font.Size = 9    End If End If Next c Application.EnableEvents = True End Sub

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • ja7awu
  • ベストアンサー率62% (292/464)
回答No.2

zap35さん提示のコードですと  Application.EnableEvents = False になっているままで Exit Sub になる場合がありますので、具合悪いと思いますよ。  Set trg = Intersect(Target, Range("C3:S20"))  If trg Is Nothing Then Exit Sub  Application.EnableEvents = False ' <--- ここに移す  For Each c In trg '修正 これで如何ですか。

awazo
質問者

お礼

ja7awuさん ありがとうございました。 とりあえず動きましたので、ゆっくり勉強させていただきます。

すると、全ての回答が全文表示されます。
  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.1

例えばこんな感じでしょうか Private Sub Worksheet_Change(ByVal Target As Range) Dim c As Range Dim trg As Range '追加  Application.EnableEvents = False  Set trg = Intersect(Target, Range("C3:S20")) '追加  If trg Is Nothing Then Exit Sub '追加  For Each c In trg '修正   If IsNumeric(c.Value) Then    If Len(Mid$(c.Text, InStr(c.Text, ".") + 1)) > 1 Then     c.Font.Size = 8    Else     c.Font.Size = 9    End If   End If  Next c  Application.EnableEvents = True End Sub

awazo
質問者

お礼

zap35さん いろいろありがとうございました。

awazo
質問者

補足

zap35さん ありがとうございます。 どういうわけか、少数ありの場合フォントサイズ 8 、整数の場合 9 というふうに反応してくれません。お助けください。よろしくお願いします。

すると、全ての回答が全文表示されます。

関連するQ&A