[[20150516200928]] 『上下のセルで色付け』(初老) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『上下のセルで色付け』(初老)

お世話になります。
やりたい事が有るのですが私には出来そうもないので教えてください。

行は10行から27行、列は16列(P列)から33列(AG列)まで有ります。

各列ごとに上下で1以内の数値また同じ数値が有ったらセルの背景をピンクと赤にしたいのです。

異動先の職場で使う事になったのですがどの様にしたら良いか知りたいのですが
可能でしょうか?

構文的には滅茶苦茶ですが自分なりに考えてみました。
エラーで 型が一致しません。と表示されます。

宜しくお願い致します。

sub test ()

   Dim i As Long           
   Dim j As Long          
   Dim prow As String 
   Dim nrow As String 

            For i = 10 To 27
      For j = 16 To 33

                 nrow = Cells ( i , j ).Value

                      If nrow - prow <  1 Then
                      Cells(i - 1, j).Interior.Colorindex = 7
                      Cells(i, j).Interior.Colorindex = 7

                       ElseIf   nrow = prow Then
                       Cells(i - 1, j).Interior.Colorindex = 3
                       Cells(i, j).Interior.Colorindex = 3

	         End If

	     prow = nrow

      Next  
      Next  

  End Sub

< 使用 Excel:Excel2007、使用 OS:Windows7 >


(1)
文字列どうしの差を取っていますから そこが NGですね。

(2)
それと、何と何を比較するのですか?
今は、結果として、
左のセル(もしくは前の行の最終列)と比較していることになりますね。
そのあたりを検討されたらいかがですか?

(γ) 2015/05/16(土) 20:43


追記します。

 If nrow - prow <  1 Then
     (処理1)
 ElseIf   nrow = prow Then
     (処理2)
 End If

 という構文ですが、処理2は絶対に実行されません。

 (理由)
 コードを日本語で書くと、
 差が 1 より小さい時は、       処理1 をせよ
 そうではなくて、差が0 の時は  処理2 をせよ。
 ということです。

 「差が 1 より小さい」ではない時とは、
 差が 1 以上を意味しますから、差が 0 には なりえません。
 ですから、条件が満たされることはありません。

# Select Caseでの指摘は、理解されたのでしょうか?
# Select Case は、どれかにマッチしたら、それ以降はスキップされるのです。
# きちんと理解してくださいね。

(γ) 2015/05/16(土) 21:14


 VBA の練習ということでしょうから、γさんのご指導のもと、コードを完成させていただきたいのですが
 本件であれば、たぶん条件付き書式が適していると思います。
 上下でということですから、10行目と27行目は対象外だとして、

 1.P11:AG26 を選択
 2.条件付き書式 数式が =AND(ABS(P10-P11)<1,ABS(P11-P12)<1) で書式 背景色をピンク
 3.続けて 数式が =AND(P10=P11,P11=P12) で書式 背景色を赤

 これで赤の条件が上にきているはずですので、その横の 条件を満たす場合は停止にチェック

 こうすればお望みの状態になると思います。

(β) 2015/05/16(土) 21:28


βさん、どうもありがとうございます。
そうですね、この場合は条件付き書式がぴったり嵌りますね。
質問者さんに方針を決めていただければと思います。
 追記:初老というと、私も相当に初老です。

(γ) 2015/05/16(土) 21:39


γ様、β様
返答ありがとうございます。

複数の人が触るのでマクロの方が都合がよいのです。

γ様のおっしゃる通り あの条件では動かないですね! また上下で1以内の色付けは
次のステップの伏線でしたので今回は上下同じ場合のみにしたいと考えます。

   Dim i As Long           
   Dim j As Long          
   Dim prow As String 
   Dim nrow As String 

            For i = 10 To 27
         j = 16 

                 nrow = Cells ( i , j )

                       If   nrow = prow Then
                       Cells(i - 1, j).Interior.Colorindex = 3
                       Cells(i, j).Interior.Colorindex = 3

	         End If

	     prow = nrow

      Next  

  End Sub

上記にすると1列では出来るのですが、複数列にすると駄目です。
なんとなくは分ってきて、jにiの数えた数でもう一つの変数とjを足す事で
出来ないかと思ったのですが記述の仕方が分からず足踏み状態です。
御教示願います。

(初老) 2015/05/17(日) 01:21


ご苦労様です。

 > For i = 10 To 27
 >     j = 16 
   ではなく、

   列のループ
      行のループ

      Next
   Next   
 のような構造にする必要があるでしょうね。

いくつか質問します。

Q1

   セルに入っているのは文字列なのですか?
   差が1以内とかいうことからすれば、数値ではないのですか?
   Dim prow As String
   Dim nrow As String
   は, Stringですから、文字列を想定されているようですが。

Q2

   > 行は10行から27行、列は16列(P列)から33列(AG列)まで有ります。 
   とのことですが、議論しにくいので、A1から始まる領域で議論しませんか?
   その領域でなければならない特殊性はないはずです。
   結論が出たあとで、そちらで直して下さい。

   そこで、
   > 各列ごとに上下で1以内の数値また同じ数値が有ったら
   > セルの背景をピンクと赤にしたいのです。 
   とのことですが、以下の例では、どのような結果になりますか?
   右に色を書いてもらえますか?
    A列
 1  0.0
 2  1.0
 3  2.0
 4  2.5
 5  2.5
 6  3.0
 7  4.0
 8  3.5
 9  5.0

 なお、お願いですが、
 コードを提示するときは、
 (1)正確にインデントをつけてください(これはあなたにとって有益なはずです)
 (2)実際にテストしているVBEのコードをコピーペーストしてください
    手打ちが間に挟まりますと、そこがまた雑音になってしまいます。

(γ) 2015/05/17(日) 07:11


朝からありがとうございます。
>セルに入っているのは文字列なのですか?
>差が1以内とかいうことからすれば、数値ではないのですか?
Q1 本来なら Integer か Long を使うのでしょう。
  只、質問に入れていなかったのですがマトリクス表で同じ数値の交わるところに
  ”−−−”と データがないところは”該当なし”があるので Stringにしました。
Q2
   A列
 1  0.0 ピンク
 2  1.0 ピンク
 3  2.0 ピンク
 4  2.5 赤
 5  2.5 ピンク
 6  3.0 ピンク
 7  4.0 ピンク
 8  3.5 ピンク
 9  5.0

質問の答えは以上です。

これから子供の世話でしばらく外出するので返答が遅くなります。ご了承ください。
あと、これ以上白髪が増やしたくないので御手柔らかに願います。

(初老) 2015/05/17(日) 09:32


 失礼します

 γさんがあげられた例で、もし、 8行目が 1.5 、9行目が 1.0 だった場合の 9行目(つまりリスト最終行)は 何か色がつくと思いますが
 赤でしょうか?ピンクでしょうか?

 リストの1行目は、くらべるべき、その上の行がないはずですが、おそらく、それを 0.0 とみなしておられるように思いました。
 そうすると、リストの最終行に対しては、その次の行を 0.0 として処理されたいのかな? と思いまして。

 それと、

 >>複数の人が触るのでマクロの方が都合がよいのです。

 誤解されたかもしれません。多くの人が操作をするたびに条件付き書式を設定するのではなく
 シートに一度設定しておけば、数値によって「自動的に色がつく」機能です。
 いってみれば、自動でマクロが動くような感覚です。

 γさんと同じく、かなり初老(といいますか、還暦をはるか以前に過ぎてしまった 盛老? 熟老?)のβです。

(β) 2015/05/17(日) 09:44


 βさん
 > γさんと同じく、かなり初老(といいますか、還暦をはるか以前に過ぎてしまった 盛老? 熟老?)のβです。
 まぢですか!
 人生の大先輩とは(いい意味で)全く思いもよりませんでした。
 文章が若々しかったので、もっと年が近いと思っていました。

(稲葉@日曜出勤中) 2015/05/17(日) 10:53


β様、γ様
書き込みありがとうございます。

子供のアクシデントで今時間を作れなくなりました。
いろいろ教わりたかったのですが残念ながらリタイアします。
結果は自分で少し時間をかけやって行こうと思いますので
ご協力ありがとうございました。

(初老) 2015/05/17(日) 13:58


 それはご心配ですね・・

 どうぞ、お子様のお世話、ご専一に。
 お大事になさってください。

 また、おちつかれましたら、いつでも、お手伝いできるところは、させていただきますので。

(β) 2015/05/17(日) 15:36


 ただいま散歩(徘徊手前)から戻りました。

 ああ、そうでしたか、それは心配ですね。
 ご家族を大切になさってください。

 こちらの話は緊急性はないでしょうし、
 また時間ができたら取り組んでみてください。

(γ) 2015/05/17(日) 15:51


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.