VBAで数値色分けに関する問題発生

このQ&Aのポイント
  • VBAを使用してエクセルで数値を色分けする方法について、途中未記入の行や数値が無い行に対する問題が発生しました。解決方法を教えてください。
  • VBAの記述を使用してエクセルで数値を色分けする際、途中未記入の行があると識別できないという問題が発生しました。解決策を教えてください。
  • VBAを使ってエクセルで数値を色分けする方法について、途中行に数値が無いと変化しないという問題が発生しました。解決方法を教えてください。
回答を見る
  • ベストアンサー

数値色分けで(VBA)問題が発生しました再度教えて下さい。

いつもお世話になります。 先日VBAの記述の件でアドバイスを頂き運用していましたが、困った問題が発生しましたので再度質問を致します。 それは、エクセルで約20の数値を色分けすると言うものでした。 下記記述を教えて頂きました。 Sub Macro1() For Each c In Selection Select Case c.Value Case "010" c.Interior.ColorIndex = 3 Case "020" c.Interior.ColorIndex = 4 問題は、途中未記入の行があれば識別出来ないと言う問題です。 例は NO 数値 色分け 1 010 赤 2  020 青 3       4 132     と言うように途中行に数値が無いと変化しません。 お手数ですが方法があれば教えて下さい。 又、数値が無い行は色無しに出来る方法があれば教えて下さい。

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

  • ベストアンサー
  • pkh4989
  • ベストアンサー率62% (162/260)
回答No.2

関数を以下のように変更してみてください。 =MID(D4,LEFT(2,LEN(D4)),5) ↓ =IF(ISERROR(MID(D4,LEFT(2,LEN(D4)),5)),"",MID(D4,LEFT(2,LEN(D4)),5))

mimio0
質問者

お礼

有り難う御座いました。 希望通りの結果でした。 今後ともよろしくお願い致します。

その他の回答 (1)

  • pkh4989
  • ベストアンサー率62% (162/260)
回答No.1

Select Case 文の一番下に以下を追加してみてください。    Case ""              '←追加     c.Interior.ColorIndex = xlNone  '←追加    Case Else             '←追加     c.Interior.ColorIndex = xlNone  '←追加   End Select

mimio0
質問者

補足

申し訳有りません走りまいたが、識別出来ません。 よく考えて見ると識別する列には、 =MID(D4,LEFT(2,LEN(D4)),5)の文字列操作関数を入れていました。 だから、その列に 010、020、030の文字と#VALVE!が入力されています。 これが原因と思われますが、何か対応策がありましたら教えて下さい。

関連するQ&A

  • 数値の入ったセルの色分け

    エクセル(2003)で数値の入ったセルを色分けしたいです。 色んなサイトを見て下記を書いてみましたが 数値を入力すると色が変わるのですが 別のところから数値をコピーペーストすると色が変わりません。 マクロでもVBAでもなんでもかまいません。 数値を5種類に分けてセルの色を変える方法を教えていただきたいです。 宜しくお願いいたします。 Private Sub Worksheet_Change(ByVal Target As Range) Dim myNO As Integer With Target If .Count > 1 Then Exit Sub If IsEmpty(.Value) Then Exit Sub If Not Application.Intersect(Target, Range("A1:AX51")) Is Nothing Then Select Case .Value Case Is <= 54: myNO = 3 Case 55 To 79: myNO = 39 Case 80 To 104: myNO = 4 Case 105 To 119: myNO = 33 Case Is >= 120: myNO = 6 End Select .Interior.ColorIndex = myNO End If End With End Sub

  • VBA セルの色を変更する

    VBA(エクセル2007使用)で、セルの背景色を変更する場合についての質問です。 マクロを実行する度に、セルの背景色を変更するマクロを作成しました。 オレンジ→水色→緑→灰色→無色  という風に変わっていくところまでは できたのですが、これだとマクロを実行するのにセルの状態が無色か、指定した カラーコードで塗りつぶされていないと実行できません。 下記、コードの一番最初の Case で ”背景色がどんな色の場合でも”という条件に したいのですが、どのように記載したらわからずにいます。。。 ---------------------------- Sub 色チェンジ() n0 = ActiveCell.Interior.ColorIndex Select Case n0 Case xlNone   ’ここを”どんな色の場合でも、、、という条件にしたいです。。” Selection.Interior.ColorIndex = 40 Case 40 Selection.Interior.ColorIndex = 34 Case 34 Selection.Interior.ColorIndex = 35 Case 35 Selection.Interior.ColorIndex = 15 Case 15 Selection.Interior.ColorIndex = xlNone End Select End Sub -----------------------------------

  • エクセルVBAで、ある範囲のデータのある行に対して一行おきに色を付けたい

    B3:E3以下の行で一行おきに、C列に文字でも数字でも入力がある場合 その行全体(B:E)を色づけしていきたいのですが、どうすればいいでし ょうか。一般機能の条件付書式でのマクロ記録をとってみましたが、 知識が乏しくどうしたらいいか分かりませんでした。 教えてください。よろしくお願いします。 Sub Macro1() Selection.FormatConditions.Delete Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=$C$3<>""""" Selection.FormatConditions(1).Interior.ColorIndex = 3 End Sub

  • Excel 条件が4つ以上(年)の自動色分け

    Excel2003を使用しています。 条件が4つ以上ある時のセルの自動色分けですが 自分なりに調べた結果、VBAで Private Sub Worksheet_Change(ByVal Target As Range) With Target.Interior Select Case Target.Text Case "A" .ColorIndex = 3 Case "B" .ColorIndex = 5 Case "C" .ColorIndex = 6 Case "D" .ColorIndex = 10 Case Else .ColorIndex = xlNone End Select End With というように"A""B"という単語で分ける、という方法はわかりましたが、 これを「2010年1月1日~2010年12月31日」までを赤、「2009年1月1日~2009年12月31日」までを青、 というように「年」によって色分けというのはできるのでしょうか? どなたかご教授いただけますと幸いです。よろしくお願いいたします。

  • 空白セルと0値を識別させたい。(VBA)

    すみません、誰か教えていただけますか。 シートの53、54、55行目にそれぞれ値入っています。 それを3行目にビジュアル的に表現させています。 55行目はセルの色で、53行目は数値があり同じ値が 続く部分の合計を出しています。 しかし、下記の記述ですと数値が0(変数D=0)の時に うまくいきません。空白セルと認識されてしまうと思います。 何か、良い方法があれば教えて頂けませんでしょうか。 宜しくお願いします。 Sub 表示() Dim a As Long Dim c As Long Dim D As Long Dim e As String Dim f As String c = 3 For a = 3 To 64 With Worksheets("Sheet1") If .Cells(53, a) <> .Cells(53, a + 1) Then .Range(.Cells(53, c), .Cells(53, a)).Select D = WorksheetFunction.Sum(Selection) e = D f = Selection(1).Offset(1, 0).Value G = Selection(1).Offset(2, 0).Value If D <> 0 Then Selection(1).Offset(-50, 0).Value = f + "//" + e .Range(.Cells(53, c), .Cells(53, a)).Offset(-50, 0).Select Selection.Interior.ColorIndex = G End If If Selection(1).Value = "" Then .Range(.Cells(53, c), .Cells(53, a)).Offset(-50, 0).Select Selection.ClearContents Selection.Interior.ColorIndex = xlNone End If c = a + 1 End If End With Next End Sub

  • VBAで条件付き書式設定

    エクセルの一覧表で2行目から4行ずつ上から商品名、商品コード、会社、商品項目とあって、列がAからXまであります。 以前、商品名ごとに自動で色づけしていた時に使っていたVBAです。 Sub 色分け() Dim Target As Range For Each Target In Range("b2:e2,b5:e5,b8:e8,b11:e11,b14:e14,b17:e17,b20:e20,b23:e23") Select Case True Case InStr(Target.Value, "〇〇") > 0 Target.Resize(4, 1).Interior.ColorIndex = 24 Case InStr(Target.Value, "△△") > 0 Target.Resize(4, 1).Interior.ColorIndex = 38 Case Else Target.Resize(4, 1).Interior.ColorIndex = xlNone End Select Next End Sub この色付け条件を4行目の商品項目ごとに変更したいのですが、方法が分からないので教えてください。 なんかすぐ出来そうな気がするんですけど、丸2日やっても分かりませんでした。 よろしくお願いします。

  • VBAでセルの色を変更するには

    ある範囲のあるセルの色のみ一気に変更したいのですが、自力で調べた結果はセルに色を付ける以下の記述までしか分かりませんでした。 例えば、現在のベージュ(40)を赤(3)に変更するにはどう記述すればよいのでしょうか? 宜しくお願いします。 Sub Macro1() Range("A1:N180").Select With Selection.Interior .ColorIndex = 40 .PatternColorIndex = xlAutomatic End With End Sub

  • Excel VBA・スピンボダンの使用

    VBA勉強中の者です。Excel2002を使用しております。 以前こちらのサイトで「特定セルに入力された数値を基に、別のセルの色を変える方法」を ご教示頂きまして(http://okwave.jp/qa/q6345375.html)、今度はそれを発展させたいと思い フォーム、スピンボタンの使用を試みました。 試行錯誤しましたが残念ながら動作させる事が出来ませんでした。 目的の動作 フォームのスピンボタンを設置、リンクを”=A1”に指定し、ボタン操作でセルA1の数値をボタン入力。 その数値に合わせてセルB1:B6のカラーを変化させたい。 作成したコード Private Sub Worksheet_Change(ByVal Target As Range) Dim mycolor As Range Dim boxcolor As Range Set mycolor = Intersect(Target, Range("A1")) Set boxcolor = Range("B1:B6") If Not mycolor Is Nothing Then Select Case Target.Value Case Is = 1 boxcolor.Interior.ColorIndex = 3 Case Is = 2 boxcolor.Interior.ColorIndex = 4 Case Is = 3 boxcolor.Interior.ColorIndex = 5 Case Is = 4 boxcolor.Interior.ColorIndex = 6 Case Is = 5 boxcolor.Interior.ColorIndex = 7 Case Is = 6 boxcolor.Interior.ColorIndex = 8 Case Is = 7 boxcolor.Interior.ColorIndex = 9 Case Is = 8 boxcolor.Interior.ColorIndex = 10 Case Is = 9 boxcolor.Interior.ColorIndex = 11 Case Is = 10 boxcolor.Interior.ColorIndex = 12 Case Is = 11 boxcolor.Interior.ColorIndex = 13 Case Is = 12 boxcolor.Interior.ColorIndex = 14 Case Else boxcolor.Interior.ColorIndex = xlAutomatic End Select End If End Sub スピンボタンの入力に合わせてセルA1の数値が増減する事は確認しましたが、 それに伴いB1:B6のセルカラーが変化しません。 また、スピンボタンを使用して数値を入力したあと、セルA1を一度アクティブ(F2を押す)にして 解除すると、唐突にしかし正常に動作します。 スピンボタンを使わずにセルA1に直接数値を入力すると、これも問題なく動作します。 以上の状況からスピンボタンを使用しセルA1に入力された数値のみが認識しないように思えます。 色々と調べて見たところ、SpinButton Changeイベントというものを使用する?と見当をつけ、 単純な発想ですがSpinButton1_Changeプロシージャへ上記のコードを入力してもやはり動作しません。 私のレベルでは既に手詰まりになってしまい、お手数ですがご指導頂きたくお願い致します。

  • VBAで文字列を数値に変換させるには?

    VBA初心者です。 当事務所の事務システム(オラクル)をバージョンアップした際、出力帳票をエクセルのワークシートで出すようにしました。 以前は翼システムの帳票印刷用ソフトに連動させ、すぐ印刷できるものにしていたのですが、今後は出力結果から、合計行を後で(エクセルの段階で)だして付け加えたりなどしなければなりません。 事務所には年配の職員のかたもおられ、やはり自動でできるようにして欲しいとの要望があり、いくつかマクロを作りました。 しかし、各帳票エクセルに出力された際、数字が全て文字列で表示されてしまうので、まずこれを数値に直さなければなりません。 (ココから下) 帳票全部が数字ならば、Ctr+Aで範囲選択し、エクセルのツールで数値に直せばいいのですが、そうではないため、範囲選択するところから含めてマクロにしたいのです。 しかし、「文字列→数値」ができません。マクロのツールを使ってでは、それに値する行が作られませんでした。 Format関数をつかうのでしょうか? ????? 初心者的質問で申し訳ありません。 よろしくお願いします。 Sub Macro会費納入状況表データ() ' ' Macro状況表データ Macro ' マクロ記録日 : 2005/11/17 ユーザー名 : sn ' ' Columns("C:C").Select Selection.Insert Shift:=xlToRight Rows("5:5").Select Selection.Insert Shift:=xlDown Range("D6").Select Selection.CurrentRegion.Select (ココになにかいれるとおもうのですが) Columns("C:C").Select Selection.Delete Shift:=xlToLeft Range("A6").Select Selection.CurrentRegion.Select Selection.Copy End Sub

  • Excel VBA 選択した範囲の1行目に色を付けたい

    VBA初心者です。 セルB4~F15に表が作成されています。 プロシージャを実行して、セルB5~F15にブルー。表1行目のセルB4とF4のみに赤の色を付けるというコードを記述したいのです。 以下のように記述しました。 Sub セルに色()    Range("B4").Select    ActiveCell.CurrentRegion.Select    Selection.Interior.ColorIndex = 8    Selection.Range(Cells(1, 1),Cells(1,5)).Interior.ColorIndex = 3 End Sub Rangeでは連続シートになるため、Unionに変更してみましたが、 Unionはオブジェクトがサポートされていない旨のエラーが出ました。 どのように記述すればよいでしょうか? どうぞよろしくお願いいたします。

専門家に質問してみよう