[[20150130141625]] 『和が10になる数字を赤字で表示したい』(アラントロン) ページの最後に飛ぶ

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

 

『和が10になる数字を赤字で表示したい』(アラントロン)

B2:J21の各セルに1から9までの数字を振りました。
隣り合う数、上下の数、斜めに接する数の和が10になる箇所の数字を赤字で示す方法を教えてください。

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


 この隣り合うセルの合計は二つのセルだけなのか?
 例えば1,4,5と並んでいる場合、これも対象になるのか?
(ねむねむ) 2015/01/30(金) 14:23

 1行目、22行目、A列、K列は空白と考えていいのでしょうか?
 それとも、それは甘い!! でしょうか?

(β) 2015/01/30(金) 14:49


 似たような質問だが。

 1行目・22行目・A列目・K列目に数字が入ることはあるのか?
 (文字はあっても構わない)
(ねむねむ) 2015/01/30(金) 14:53

ねむねむ様、早速のご返事ありがとうございます。
説明不足で申し訳ありません。
1,4,5はだめです。
1,4,5,5,3 5と5は赤字に
9,6,3,7,7 上段の1と9、4と6で赤字に 3と7は赤字に
2,1,4,3,8 斜めで9と1、7と3、6と4、縦に7と3
この様な風です。

(アラントロン) 2015/01/30(金) 14:54


衝突してしまいました。
β様、ご返事ありがとうございます。
1行目、A列は入っていません。
22行目、K列以降も空欄です。

(アラントロン) 2015/01/30(金) 14:57


 1行目には入りません。
22行目以降は数字を増やす予定です。
A列目・K列目に数字は入りません。

(アラントロン) 2015/01/30(金) 15:00


 B2:J21(最終的に数字を入力する行まで設定してくれ)を選択してホーム−条件付き書式−新しいルールを開き
 「数式を使用して、書式設定するセルを決定」で数式に
 =OR(AND(B2<>5,COUNTIF(A1:C3,10-B2)),COUNTIF(A1:C3,10-B2)>1)
 として書式でフォントを赤、でどうだろうか?
(ねむねむ) 2015/01/30(金) 15:05

 To ねむねむさん 

 たとえば B2 に B2 を参照する式を入れると循環参照になってしまいますね。
 さっきから、そこをどうにかできないかと頭の体操を繰り返してるんですが、なかなかいいアイデアが
 うかびません。

(β) 2015/01/30(金) 15:08


 直接セルに入力するのではなく条件付き書式の条件として入力するのであれば循環参照にはならないと思うが。

(ねむねむ) 2015/01/30(金) 15:10


 Sub test()
    Dim R As Range
    Dim i As Long
    Dim j As Long
    Dim iMaxX As Long
    Dim iMaxY As Long

    Set R = Range(Range("B2").Offset(-1, -1), Range("J21").Offset(1, 1))
    R.Interior.Color = xlAutomatic
    iMaxX = R.Columns.Count
    iMaxY = R.Rows.Count

    R.Range(R.Cells(3, 1), R.Cells(3, iMaxX)).Copy R.Cells(1, 1)
    R.Range(R.Cells(iMaxY - 2, 1), R.Cells(iMaxY - 2, iMaxX)).Copy R.Cells(iMaxY, 1)
    R.Range(R.Cells(1, 3), R.Cells(iMaxY, 3)).Copy R.Cells(1, 1)
    R.Range(R.Cells(1, iMaxX - 2), R.Cells(iMaxY, iMaxX - 2)).Copy R.Cells(1, iMaxX)

    For i = 2 To iMaxX - 1
        For j = 2 To iMaxY - 1
            If R(j, i).Value + R(j - 1, i).Value = 10 And _
               R(j, i).Value + R(j + 1, i).Value = 10 And _
               R(j, i).Value + R(j, i - 1).Value = 10 And _
               R(j, i).Value + R(j, i + 1).Value = 10 And _
               R(j, i).Value + R(j - 1, i - 1).Value = 10 And _
               R(j, i).Value + R(j - 1, i + 1).Value = 10 And _
               R(j, i).Value + R(j + 1, i - 1).Value = 10 And _
               R(j, i).Value + R(j + 1, i + 1).Value = 10 Then
               R.Cells(j, i).Interior.Color = RGB(255, 128, 128)
            End If
        Next j
    Next i

    R.Range(R.Cells(1, 1), R.Cells(1, iMaxX)).ClearContents
    R.Range(R.Cells(iMaxY, 1), R.Cells(iMaxY, iMaxX)).ClearContents
    R.Range(R.Cells(1, 1), R.Cells(iMaxY, 1)).ClearContents
    R.Range(R.Cells(1, iMaxX), R.Cells(iMaxY, iMaxX)).ClearContents
 End Sub
(???) 2015/01/30(金) 15:19

【直接セルに入力するのではなく条件付き書式の条件として入力するのであれば循環参照にはならないと思うが】

 そのとおりでした。確認もしないでレスして申し訳なし。

(β) 2015/01/30(金) 15:23


OR条件ならば、以下。

 Sub test()
    Dim R As Range
    Dim i As Long
    Dim j As Long
    Dim iMaxX As Long
    Dim iMaxY As Long

    Set R = Range("B2:J21")
    R.Interior.Color = xlAutomatic
    iMaxX = R.Columns.Count
    iMaxY = R.Rows.Count

    For i = 1 To iMaxX
        For j = 1 To iMaxY
            If R(j, i).Value + R(j - 1, i).Value = 10 Or _
               R(j, i).Value + R(j + 1, i).Value = 10 Or _
               R(j, i).Value + R(j, i - 1).Value = 10 Or _
               R(j, i).Value + R(j, i + 1).Value = 10 Or _
               R(j, i).Value + R(j - 1, i - 1).Value = 10 Or _
               R(j, i).Value + R(j - 1, i + 1).Value = 10 Or _
               R(j, i).Value + R(j + 1, i - 1).Value = 10 Or _
               R(j, i).Value + R(j + 1, i + 1).Value = 10 Then
               R.Cells(j, i).Interior.Color = RGB(255, 128, 128)
            End If
        Next j
    Next i
 End Sub
(???) 2015/01/30(金) 15:26

ねむねむ様、きっちり赤字になりました。
条件付き書式しかできないと思い考えていましたが式が浮かびませんでした。
情けないです。。。
???様、コードありがとうございます。
しかし、赤字にならないのですがどうしてでしょうか?

(アラントロン) 2015/01/30(金) 15:27


また衝突しました。
???様、この表現のほうが斬新で見やすいです。
ありがとうございました。

(アラントロン) 2015/01/30(金) 15:30


最初ので赤にならなかったのは、8方向すべて合計が10で塗っていたせいかな。(最初の条件だと、こう受け取れた)
2番目のほうなら1方向でも10ならば塗るので、目的はこっちだったのかと。
(???) 2015/01/30(金) 15:31

  セルを塗りつぶすほうが良ければ条件付き書式の書式で「フォント」の色ではなく「塗りつぶし」の「色」を設定してみてくれ。
(ねむねむ) 2015/01/30(金) 15:34

 こんな感じでも・・・
 =SUM((B2+A1:C3=10)*1)>(B2=5)*1

 (ねむねむ)さんの回答を利用して
 =COUNTIF(A1:C3,10-B2)>(B2=5)*1
(・) 2015/01/30(金) 16:21

おっと、かぶった。
条件付き書式だと、ねむねむさんの案を発展させて、こんなのでもいいのかな。
=COUNTIF(B2,5)<COUNTIF(A1:C3,10-B2)
(???) 2015/01/30(金) 16:22

???様、マクロなので伺いたいのですがよろしいですか?
 R.Cells(j, i).Interior.Color = RGB(255, 128, 128)
を少し変更して、
R.Cells(j, i).Interior.ColorIndex = 5
調べてこの様にして色付けセルの数を数えるように。
http://excel-magic.com/post-41/
Function CellColor(セル)
     CellColor = セル.Interior.ColorIndex
End Function
=CellColor(B2)
なぜなのか数が合わないのです。

(アラントロン) 2015/01/31(土) 23:46


数を数えるとおっしゃっていますが、CellColor(セル) とは、セルの色番号を返すだけに見えますよ?

リンク先で、一致する色の数を数えるのはSumColor( 計算範囲 , 条件色セル )のようですし、
これは行に付けた色を数えるものなので、このままでは今回のようなセル範囲には使えないです。

着色したセル数を数えたいなら、例えば以下。

 Sub test2()
    Dim R As Range
    Dim iCou As Long

    For Each R In Range("B2:J21")
        If R.Interior.ColorIndex <> xlNone Then
            iCou = iCou + 1
        End If
    Next R

    MsgBox iCou
 End Sub
(???) 2015/02/02(月) 09:01

???様、ご返事ありがとうございます。
手探り状態で勉強不足で済みません。
このコードで動いてくれました。
本当にありがとうございました。

(アラントロン) 2015/02/02(月) 19:54


コメント返信:

[ 一覧(最新更新順) ]


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