Excel VBA質問箱 IV

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

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


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

【77942】一定以上の数値に色づけをしたい 初心者A 16/2/15(月) 14:44 質問[未読]
【77943】Re:一定以上の数値に色づけをしたい β 16/2/15(月) 17:07 発言[未読]
【77944】Re:一定以上の数値に色づけをしたい β 16/2/15(月) 17:15 発言[未読]
【77945】Re:一定以上の数値に色づけをしたい 初心者A 16/2/15(月) 18:54 回答[未読]
【77946】Re:一定以上の数値に色づけをしたい β 16/2/15(月) 19:14 発言[未読]
【77949】Re:一定以上の数値に色づけをしたい 初心者A 16/2/15(月) 21:59 回答[未読]
【77950】Re:一定以上の数値に色づけをしたい β 16/2/16(火) 7:44 発言[未読]
【77951】Re:一定以上の数値に色づけをしたい 初心者A 16/2/16(火) 16:29 お礼[未読]
【77947】Re:一定以上の数値に色づけをしたい yuto 16/2/15(月) 21:01 回答[未読]
【77948】Re:一定以上の数値に色づけをしたい β 16/2/15(月) 21:24 発言[未読]

【77942】一定以上の数値に色づけをしたい
質問  初心者A  - 16/2/15(月) 14:44 -

引用なし
パスワード
     A   B   C   D   E   F   G
1 5    4   1   2      1
2     5      1   2   1   1
3     3   2            1
4     3   1      1   1
5     8      2   2   3   1

--------------------------------------------------

質問
A1には任意のデーター件数が入ります--説例は5
C1からG5まではデーターです
各行のB列にはC列〜G列の合計が入ります
B列合計が5以上のセルに色付けたい

Sub Cells色付() 'B列が5以上になった場合はセルに色付注意----
Dim h As Integer, i As Integer

h = Cells(1, 1)
For i = 1 To h
Cells(i , 2).FormulaR1C1 = "=SUM(Cells(" & i + 2 & ",1):Cells(" & i + 2 & ",7))"
If Cells(i , 2) > 5 Then
  Cells(i , 2).Interior.ColorIndex = 7
End if
Next
End Sub

【77943】Re:一定以上の数値に色づけをしたい
発言  β  - 16/2/15(月) 17:07 -

引用なし
パスワード
   ▼初心者A さん:

なら

B1 に =SUM(C1:G1) をいれて、下にフィルコピー。
B列を選択して、条件付き書式 数式が =B1>=$A$1 書式で背景色を好きな色に。

【77944】Re:一定以上の数値に色づけをしたい
発言  β  - 16/2/15(月) 17:15 -

引用なし
パスワード
   ▼初心者A さん:

あっ!
A1 の 5 は 【5行目まで】という 5 でしたか??
で、比べる基準値の 5 は、固定なんですか?

だとしたら、アップされたコードで、どこがどう具合悪かったのですか?

【77945】Re:一定以上の数値に色づけをしたい
回答  初心者A  - 16/2/15(月) 18:54 -

引用なし
パスワード
   ▼β さん:
>▼初心者A さん:
>
>あっ!
>A1 の 5 は 【5行目まで】という 5 でしたか??
>で、比べる基準値の 5 は、固定なんですか?
>
>だとしたら、アップされたコードで、どこがどう具合悪かったのですか?

A1の5は変動します。説例で5としただけです。
A1はデーター件数でデーターの件数により他シートから
A1には1から100までのいずれかの数値が自動で入力されます。

比べる数値は、6であったり4であったり任意です。
説例で5としただけです。紛らわしくてすいません。

【77946】Re:一定以上の数値に色づけをしたい
発言  β  - 16/2/15(月) 19:14 -

引用なし
パスワード
   ▼初心者A さん:

う・・・ん・・・

データ、なにも A1 をさんしょうしなくても、じどうはんていはできるんですが
まぁ、A1 がデータ数だとしましょう。
>▼β さん:
>>▼初心者A さん:

う〜ん・・・・

データ件数は 何も A1 を参照しなくても自動把握は可能ですが、
まぁ、A1 がデータ件数だとしましょう。

質問しているのは、

アップしたコードを実行して、どんな不具合があったのですか

ということです。

まぁ、ループの最初で実行時エラーになったんだと思いますが。

マクロ内で、セルに数式を入れる場合、その数式は、セルに入力するまんまの文字列を
" で囲んで指定します。

セットすべき数式は、たとえば =SUM(C1:G1) という文字列ですよね。

"=SUM(Cells(" & i + 2 & ",1):Cells(" & i + 2 & ",7))"

これでは、たとえば

=SUM(Cells(3,1):Cells(3,7))

こんな数式文字列になります。なので、エクセルは、こんな名前、知らないよ!
ということで #NAME? と表示してますよね。
このエラー値になっているセルのValue を参照しようとすると実行時エラーになります。

もし数式を入れるなら

Cells(i, 2).Formula = "=SUM(C" & i & ":G" & i & ")"

ですね。

数式を入れず、VBA内でワークシート関数のSUMを使って合計した値をB列にセットすることも
もちろんできますが。

しかし、比べる数字が、6 になったり 8 になったりするのでしょ?
そのたびにマクロを修正するのですか?

コメントしたように、データ件数は自動で把握できますので、むしろ A1 には 
比べる数字をいれ、それを使ったほうがよろしいのでは?

【77947】Re:一定以上の数値に色づけをしたい
回答  yuto  - 16/2/15(月) 21:01 -

引用なし
パスワード
   ▼初心者A さん:
 要件が不明な点もありますが、参考までに以下のように
書いてみました。
 Excelのない環境で記述していますので、タイプミス等
ありましたら、すみません。

Sub Sample()
 Dim TargetRow As Long
 For TargetRow = 1 To 5
  With Cells(TargetRow, 2) ’ 本来は、Sheetもきちんと修飾した方が望ましいです。
  ' 数式の設定は、RC形式で記載。
   .FormulaR1C1 = "=SUM(RC[1]:RC[5])"
  ' 数式を残す必要がなければ、以下のようにも書けます。
  ' .Value = WorksheetFunction.Sum( .Offset(,1).Resize(,5).Value)
   If (.Value >= 5) Then
    .Interior.ColorIndex = 7
   End If
  End With
 Next TargetRow
End Sub

【77948】Re:一定以上の数値に色づけをしたい
発言  β  - 16/2/15(月) 21:24 -

引用なし
パスワード
   ▼初心者A さん:

処理例です。

コメントした通りデータ行数はA1を参照しなくても取得できますので A1 は無視しています。
比べるべき数字 5 であたり、10 であったり、変更のつど、マクロを修正するのは感心しませんので
セルに入力して指定します。仮に、そのセルを A2 にします。

Sample1 は条件付書式に色塗りを任せます。Sample2は比較して色塗りします。
βとしては Sample1 がおすすめです。

Sub Sample1()

  With Range("A1", ActiveSheet.UsedRange)   'このシートのA1から使用領域最後までの領域
    .Columns("B").Formula = "=SUM(C1:G1)"  '使用領域のB列に、数式を一括設定。
  End With
  
  With Columns("B")
    .FormatConditions.Delete
    .FormatConditions.Add Type:=xlExpression, Formula1:= _
            "=AND($A$2<>"""",B1<>"""",SUM(C1:G1)>$A$2)"
    With .FormatConditions(1).Interior
      .PatternColorIndex = xlAutomatic
      .ColorIndex = 7
      .TintAndShade = 0
    End With
  End With

End Sub

Sub Sample2()
  Dim c As Range
  
  With Range("A1", ActiveSheet.UsedRange)   'このシートのA1から使用領域最後までの領域
    .Columns("B").Formula = "=SUM(C1:G1)"  '使用領域のB列に、数式を一括設定。
  End With
  
  Columns("B").Interior.ColorIndex = xlNone  '処理前に色をクリア
  
  For Each c In Range("B1", Range("B" & Rows.Count).End(xlUp))
    If c.Value > Range("A2").Value Then c.Interior.ColorIndex = 7
  Next
  
End Sub

【77949】Re:一定以上の数値に色づけをしたい
回答  初心者A  - 16/2/15(月) 21:59 -

引用なし
パスワード
   ▼β さん:
>▼初心者A さん:
>
>う・・・ん・・・
>
>データ、なにも A1 をさんしょうしなくても、じどうはんていはできるんですが
>まぁ、A1 がデータ数だとしましょう。
>>▼β さん:
>>>▼初心者A さん:
>
>う〜ん・・・・
>
>データ件数は 何も A1 を参照しなくても自動把握は可能ですが、
>まぁ、A1 がデータ件数だとしましょう。
>
>質問しているのは、
>
>アップしたコードを実行して、どんな不具合があったのですか
>
>ということです。
>
>まぁ、ループの最初で実行時エラーになったんだと思いますが。
>
>マクロ内で、セルに数式を入れる場合、その数式は、セルに入力するまんまの文字列を
>" で囲んで指定します。
>
>セットすべき数式は、たとえば =SUM(C1:G1) という文字列ですよね。
>
>"=SUM(Cells(" & i + 2 & ",1):Cells(" & i + 2 & ",7))"
>
>これでは、たとえば
>
>=SUM(Cells(3,1):Cells(3,7))
>
>こんな数式文字列になります。なので、エクセルは、こんな名前、知らないよ!
>ということで #NAME? と表示してますよね。
>このエラー値になっているセルのValue を参照しようとすると実行時エラーになります。
>
>もし数式を入れるなら
>
>Cells(i, 2).Formula = "=SUM(C" & i & ":G" & i & ")"
>
>ですね。
>
>数式を入れず、VBA内でワークシート関数のSUMを使って合計した値をB列にセットすることも
>もちろんできますが。
>
>しかし、比べる数字が、6 になったり 8 になったりするのでしょ?
>そのたびにマクロを修正するのですか?
>
>コメントしたように、データ件数は自動で把握できますので、むしろ A1 には 
>比べる数字をいれ、それを使ったほうがよろしいのでは?

>>▼β さんへ
早々の返信ありがとうございます。
説明が足りなくてすいません。
しかし、比べる数字が、6 になったり 8 になったりするのでしょ?
変動するのは確かですが、Inputboxで対応しようかと考えていました。

【77950】Re:一定以上の数値に色づけをしたい
発言  β  - 16/2/16(火) 7:44 -

引用なし
パスワード
   ▼初心者A さん:

で、yutoさんや私のコード、試した結果はいかがでしたか?

【77951】Re:一定以上の数値に色づけをしたい
お礼  初心者A  - 16/2/16(火) 16:29 -

引用なし
パスワード
   ▼β さん:
>▼初心者A さん:
>
>で、yutoさんや私のコード、試した結果はいかがでしたか?


▼β さんへ
yutoさんへ
お礼の返事が遅れてすいません。
大変参考になりました。
yotoさのコードでためしました。
また、ご教授お願いします。

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