Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


7989 / 13645 ツリー ←次へ | 前へ→

【35623】列の数値に変化がある度に数字の色を変化させたいのですが可能でしょうか? ringotyanZ 06/3/8(水) 17:24 質問[未読]
【35628】Re:列の数値に変化がある度に数字の色を変... ichinose 06/3/8(水) 19:34 質問[未読]
【35629】Re:列の数値に変化がある度に数字の色を変... ichinose 06/3/8(水) 19:35 発言[未読]
【35632】Re:列の数値に変化がある度に数字の色を変... ringotyanZ 06/3/8(水) 20:08 質問[未読]
【35636】Re:列の数値に変化がある度に数字の色を変... ponpon 06/3/8(水) 20:40 発言[未読]
【35639】Re:列の数値に変化がある度に数字の色を変... ringotyanZ 06/3/8(水) 20:59 質問[未読]
【35641】Re:列の数値に変化がある度に数字の色を変... ponpon 06/3/8(水) 21:28 発言[未読]
【35646】Re:列の数値に変化がある度に数字の色を変... ringotyanZ 06/3/8(水) 23:11 質問[未読]
【35647】Re:列の数値に変化がある度に数字の色を変... ponpon 06/3/9(木) 0:22 発言[未読]
【35648】Re:列の数値に変化がある度に数字の色を変... ringotyanZ 06/3/9(木) 0:37 質問[未読]
【35665】Re:列の数値に変化がある度に数字の色を変... ponpon 06/3/9(木) 18:19 発言[未読]
【35672】Re:列の数値に変化がある度に数字の色を変... ringotyanZ 06/3/9(木) 20:55 質問[未読]
【35676】Re:列の数値に変化がある度に数字の色を変... ponpon 06/3/9(木) 23:11 発言[未読]
【35678】Re:列の数値に変化がある度に数字の色を変... ringotyanZ 06/3/10(金) 0:16 お礼[未読]

【35623】列の数値に変化がある度に数字の色を変化...
質問  ringotyanZ  - 06/3/8(水) 17:24 -

引用なし
パスワード
   列の数値に変化がある度に数字の色を変化させたいのですが可能でしょうか?
数値が上った場合は赤に、下がった場合は青に、前の値と変わらない場合は色は前の色と同じに、といった具合にセルの数字に色を付けることは可能ですか?

マクロを作りたい元データは下記の通りなのですが、例えば、3列目の数字が387→388に上った場合数字を赤色に、その後数値が変わらず388のままなら数字は赤のまま、388→386など下がった場合数字を青に、その後値が変わらないなら以下の数字は青色のままに、といった具合に、これを列の最後まで繰り返させたいのです。

よろしくお願いします。


2006/3/8    9:53    387    387.78    100     
2006/3/8    9:54    387    387.74    200     
2006/3/8    10:04    387    387.72    100     
2006/3/8    10:04    388    387.73    200     
2006/3/8    10:10    388    387.74    200     
2006/3/8    10:27    386    387.63    300     
2006/3/8    10:46    386    387.6    100     
2006/3/8    10:55    386    387.44    500     
2006/3/8    10:55    386    387.36    300     
2006/3/8    10:55    386    387.25    500     
2006/3/8    12:30    385    385.82    10500     
2006/3/8    12:30    385    385.81    200     
2006/3/8    12:35    386    385.81    100     
2006/3/8    12:37    386    385.81    400

【35628】Re:列の数値に変化がある度に数字の色を...
質問  ichinose  - 06/3/8(水) 19:34 -

引用なし
パスワード
   ▼ringotyanZ さん:
こんばんは。

>列の数値に変化がある度に数字の色を変化させたいのですが可能でしょうか?
>数値が上った場合は赤に、下がった場合は青に、前の値と変わらない場合は色は前の色と同じに、といった具合にセルの数字に色を付けることは可能ですか?
>
>マクロを作りたい元データは下記の通りなのですが、例えば、3列目の数字が387→388に上った場合数字を赤色に、その後数値が変わらず388のままなら数字は赤のまま、388→386など下がった場合数字を青に、その後値が変わらないなら以下の数字は青色のままに、といった具合に、これを列の最後まで繰り返させたいのです。
>
>よろしくお願いします。
>
>
以下のデータがSheet1というシート名のセルA1から入っているとします。

>2006/3/8    9:53    387    387.78    100     
>2006/3/8    9:54    387    387.74    200     
>2006/3/8    10:04    387    387.72    100     
>2006/3/8    10:04    388    387.73    200     
>2006/3/8    10:10    388    387.74    200     
>2006/3/8    10:27    386    387.63    300     
>2006/3/8    10:46    386    387.6    100     
>2006/3/8    10:55    386    387.44    500     
>2006/3/8    10:55    386    387.36    300     
>2006/3/8    10:55    386    387.25    500     
>2006/3/8    12:30    385    385.82    10500     
>2006/3/8    12:30    385    385.81    200     
>2006/3/8    12:35    386    385.81    100     
>2006/3/8    12:37    386    385.81    400


Thisworkbookのモジュールに
'=======================================================
Private Sub Workbook_Open()
  Dim rng As Range
  With Worksheets("sheet1")
    For Each rng In .Range("a1").CurrentRegion
     If rng.Column > 2 Then
       rng.ID = Str(rng.Value)
       'rng.Font.ColorIndex = 0
       End If
     Next
    End With
End Sub


Sheet1のシートモジュールに
'=================================================================
Private Sub Worksheet_Change(ByVal Target As Range)
  Dim t_target As Range
  Dim crng As Range
  Set t_target = Application.Intersect(Target, Range("c:e"))
  If Not t_target Is Nothing Then
    For Each crng In t_target
     With crng
       If Val(.ID) < Val(.Value) Then
        .Font.ColorIndex = 3
       ElseIf Val(.ID) > Val(.Value) Then
        .Font.ColorIndex = 5
        End If
      .ID = Str(.Value)
      End With
     Next
    End If
End Sub

データチェック対象セル範囲はC列〜E列とします。

尚、上記コードを追加して一度保存後して閉じた後
再度開いてみて確認してください。

【35629】Re:列の数値に変化がある度に数字の色を...
発言  ichinose  - 06/3/8(水) 19:35 -

引用なし
パスワード
   尚、Excel2000以上で動作します。

【35632】Re:列の数値に変化がある度に数字の色を...
質問  ringotyanZ  - 06/3/8(水) 20:08 -

引用なし
パスワード
   ichinose さん、ありがとうございます。

さっそく試してみたのですが、マクロを実行しようとしても「Worksheet_Change」というマクロ名が見つかりませんでした。

上手く出来ていないのでしょうか?

【35636】Re:列の数値に変化がある度に数字の色を...
発言  ponpon  - 06/3/8(水) 20:40 -

引用なし
パスワード
   こんばんは。
私も作ってみました。

開いたときの値を作業列(Z列)にコピーしてそれと比較しています。
データは、Sheet1にあると仮定しています。

Thisworkbookモジュールに

Private Sub Workbook_Open()
 Dim myR As Range
 
   Set myR = Sheets("Sheet1").Range("C1", Sheets("Sheet1").Range("C65536").End(xlUp))
   With myR
     .Font.ColorIndex = 0
     .Copy Sheets("sheet1").Range("Z1")
   End With
End Sub

シート1モジュールに

Private Sub Worksheet_Change(ByVal Target As Range)
  
  Application.ScreenUpdating = False
  With Target
    If .Count > 1 Then Exit Sub
    If IsEmpty(.Value) Then Exit Sub
    If Not Application.Intersect(Target, Range("C:C")) Is Nothing Then
     Application.EnableEvents = False
     Select Case True
      Case .Value > Cells(.Row, "Z").Value
       .Font.ColorIndex = 3
       Cells(.Row, "Z").Value = .Value
      Case .Value < Cells(.Row, "Z").Value
       .Font.ColorIndex = 5
       Cells(.Row, "Z").Value = .Value
     End Select
     Application.EnableEvents = True
    End If
  End With
  Application.ScreenUpdating = True
End Sub

>さっそく試してみたのですが、マクロを実行しようとしても「Worksheet_Change」というマクロ名が見つかりませんでした。

Worksheet_Changeは、イベントマクロですから
ichinoseさんのは、C列D列E列の値が変化したときにマクロが走ります。
私のは、C列の値が変化したときにマクロが走ります。

【35639】Re:列の数値に変化がある度に数字の色を...
質問  ringotyanZ  - 06/3/8(水) 20:59 -

引用なし
パスワード
   ponpon さん、ありがとうございます。

試してみたところ、動作しました。


しかしすみません、言葉が足りませんでした。

下記のようなデータをデータ元からシートにコピー&ペーストして、そのデータをマクロを実行する事によって色分けできるか質問したかったのした。

すみません・・・・・

可能でしょうか?


2006/3/8    9:53    387    387.78    100     
2006/3/8    9:54    387    387.74    200     
2006/3/8    10:04    387    387.72    100     
2006/3/8    10:04    388    387.73    200     
2006/3/8    10:10    388    387.74    200     
2006/3/8    10:27    386    387.63    300     
2006/3/8    10:46    386    387.6    100     
2006/3/8    10:55    386    387.44    500     
2006/3/8    10:55    386    387.36    300     
2006/3/8    10:55    386    387.25    500     
2006/3/8    12:30    385    385.82    10500     
2006/3/8    12:30    385    385.81    200     
2006/3/8    12:35    386    385.81    100     
2006/3/8    12:37    386    385.81    400

【35641】Re:列の数値に変化がある度に数字の色を...
発言  ponpon  - 06/3/8(水) 21:28 -

引用なし
パスワード
   こんばんは。

ブックを開き直して、実行するのがまずいのですよね?

このマクロのポイントは、変化する前の最初の値をどのように保持しておくかということだろうと思います。

そこで、ichinoseさんは、ブックを開いたときに、IDにその値を
私のは、Z列にコピーして、保持して、変化があったときにそれと比較しています。

ですから、
>データをデータ元からシートにコピー&ペーストする
タイミングに、ichinoseさんのやり方なら、IDに値を保持させる
私のやり方なら、C列の値をZ列にコピーすれば、
シートのイベントマクロはそのままでいけると思います。

【35646】Re:列の数値に変化がある度に数字の色を...
質問  ringotyanZ  - 06/3/8(水) 23:11 -

引用なし
パスワード
   ponpon さん、ありがとうございます。

しかし、どうも上手く行きません.......

同一セルの内容が変わったとき、例えば388と入ってるデータの上に390と打ち直すと赤くなるのは確認できるのですが、データを丸ごとペーストしても何も起きませんでした。

紹介していただいた方法を、通常のマクロに置き換えることは出来ますか?

【35647】Re:列の数値に変化がある度に数字の色を...
発言  ponpon  - 06/3/9(木) 0:22 -

引用なし
パスワード
   ▼ringotyanZ さん:
>同一セルの内容が変わったとき、例えば388と入ってるデータの上に390と打ち直すと赤くなるのは確認できるのですが、データを丸ごとペーストしても何も起きませんでした。

私のマクロをお試しでしょうか?
それならば、私のマクロは、複数のコピペには対応していません。ichinoseさんのはOKです。

複数のコピペに対応するには、
以下のように変更していただく必要があります。

Private Sub Worksheet_Change(ByVal Target As Range)
  Dim r As Range
  Application.ScreenUpdating = False
  If Not Application.Intersect(Target, Range("C:C")) Is Nothing Then
   Application.EnableEvents = False
     For Each r In Target
       Select Case True
        Case r.Value > Cells(r.Row, "Z").Value
          r.Font.ColorIndex = 3
         Cells(r.Row, "Z").Value = r.Value
        Case r.Value < Cells(r.Row, "Z").Value
         r.Font.ColorIndex = 5
         Cells(r.Row, "Z").Value = r.Value
       End Select
     Next
    Application.EnableEvents = True
  End If
  Application.ScreenUpdating = True
End Sub

【35648】Re:列の数値に変化がある度に数字の色を...
質問  ringotyanZ  - 06/3/9(木) 0:37 -

引用なし
パスワード
   ponpon さん、本当に丁寧にありがとうございます。

動作チェックしてみたところ、新しく教えて頂いたものだと確かに複数のコピペに対応していました。
保存されたZ列とC列の数値の変化が色に現れるようになっているのですね。

私が質問していた内容と少し違っているような気がするので、もう少し説明させてください。

例えばC列のみで見た場合、上から順に(1)〜(9)へ数値が増減した場合の上げ下げを色分けして確認したかったのです。
数値を1と2のみに置き換えて説明させてもらいますと、


(1) 1  ←黒 (一つ目で変化が無いので)
(2) 2  ←赤 (数値が増加したので)
(3) 2  ←赤 (数値に変化がないので同色)
(4) 1  ←青 (数値が減少したので)
(5) 2  ←赤 (数値が増加したので)
(6) 1  ←青 (数値が減少したので)
(7) 1  ←青 (数値に変化がないので同色)
(8) 1  ←青 (数値に変化がないので同色)
(9) 2  ←赤 (数値が増加したので)


このような処理をマクロを実行する事によって行いたかったのです。

【35665】Re:列の数値に変化がある度に数字の色を...
発言  ponpon  - 06/3/9(木) 18:19 -

引用なし
パスワード
   ▼ringotyanZ さん:
>例えばC列のみで見た場合、上から順に(1)〜(9)へ数値が増減した場合の上げ下げを色分けして確認したかったのです。

私のマクロは、C列のみしか見ていません。

>数値を1と2のみに置き換えて説明させてもらいますと、
>
>(1) 1  ←黒 (一つ目で変化が無いので)
>(2) 2  ←赤 (数値が増加したので)
>(3) 2  ←赤 (数値に変化がないので同色)
>(4) 1  ←青 (数値が減少したので)
>(5) 2  ←赤 (数値が増加したので)
>(6) 1  ←青 (数値が減少したので)
>(7) 1  ←青 (数値に変化がないので同色)
>(8) 1  ←青 (数値に変化がないので同色)
>(9) 2  ←赤 (数値が増加したので)
>
>このような処理をマクロを実行する事によって行いたかったのです。

C列のどこかに 1 を入力し、開き直してみてください。
上記のようにフォントカラーが変わることをWin XP Excel2003で確認しました。

【35672】Re:列の数値に変化がある度に数字の色を...
質問  ringotyanZ  - 06/3/9(木) 20:55 -

引用なし
パスワード
   ponpon さん、アドバイスありがとうございます。

しかし、どうも上手く行きません.........

データをまとめてコピペしてみたところ、C列全てが赤くなってしまいます。

ブックを一旦保存して閉じてから開くと、今度はC列全てが黒くなってしまいました。

C列に「1」と入力するとそこだけ青くなります。


私はイベントマクロはまだまだ勉強不足なので、どこに問題があるのか分かりません........

【35676】Re:列の数値に変化がある度に数字の色を...
発言  ponpon  - 06/3/9(木) 23:11 -

引用なし
パスワード
   ▼ringotyanZ さん:
>ponpon さん、アドバイスありがとうございます。

>データをまとめてコピペしてみたところ、C列全てが赤くなってしまいます。

こちらでは、うまくいっているのですが・・・

>ブックを一旦保存して閉じてから開くと、今度はC列全てが黒くなってしまいました。
 
それは、そのようにしています。
それが、ダメなら(前回の色を保持するなら)

Thisworkbookもジールの

Private Sub Workbook_Open()
 Dim myR As Range

   Set myR = Sheets("Sheet1").Range("C1", Sheets("Sheet1").Range("C65536").End(xlUp))
   With myR
     ’.Font.ColorIndex = 0 ここで色を黒にしています。
     .Copy Sheets("sheet1").Range("Z1")
   End With
End Sub


>C列に「1」と入力するとそこだけ青くなります。
そのまま上書き保存して開き直し、1や2を入れてください。
希望通りになると思うのですが・・・

もう一度新規ブックにデータをコピペして試してみてください。
それでもうまくいかない場合は、ちょっと分かりかねますので、
識者の回答をお待ちください。

シートモジュール
Private Sub Worksheet_Change(ByVal Target As Range)
  Dim r As Range
  Application.ScreenUpdating = False
  If Not Application.Intersect(Target, Range("C:C")) Is Nothing Then
   Application.EnableEvents = False
     For Each r In Target
       Select Case True
        Case r.Value > Cells(r.Row, "Z").Value
         r.Font.ColorIndex = 3
         Cells(r.Row, "Z").Value = r.Value
        Case r.Value < Cells(r.Row, "Z").Value
         r.Font.ColorIndex = 5
         Cells(r.Row, "Z").Value = r.Value
       End Select
     Next
    Application.EnableEvents = True
  End If
  Application.ScreenUpdating = True
End Sub

【35678】Re:列の数値に変化がある度に数字の色を...
お礼  ringotyanZ  - 06/3/10(金) 0:16 -

引用なし
パスワード
   ponpon さん、やってみましたが、変わりませんでした......

親切に教えて頂いたのすみません。

本当にありがとうございました!

7989 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free