Excel VBA質問箱 IV

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

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


6190 / 13644 ツリー ←次へ | 前へ→

【46674】フォント色の指定について ayaka 07/2/12(月) 6:46 質問[未読]
【46675】Re:フォント色の指定について ichinose 07/2/12(月) 7:54 発言[未読]
【46676】Re:フォント色の指定について ayaka 07/2/12(月) 8:20 質問[未読]
【46677】Re:フォント色の指定について ichinose 07/2/12(月) 8:49 発言[未読]
【46678】Re:フォント色の指定について T 07/2/12(月) 9:04 発言[未読]
【46686】Re:フォント色の指定について Kein 07/2/12(月) 14:02 回答[未読]
【46679】Re:フォント色の指定について かみちゃん 07/2/12(月) 9:19 発言[未読]
【46680】Re:フォント色の指定について かみちゃん 07/2/12(月) 10:36 発言[未読]
【46700】Re:フォント色の指定について ayaka 07/2/12(月) 17:20 お礼[未読]
【46685】Re:フォント色の指定について Hirofumi 07/2/12(月) 12:06 回答[未読]

【46674】フォント色の指定について
質問  ayaka  - 07/2/12(月) 6:46 -

引用なし
パスワード
   モーグ掲示板にて下記の質問をしましたが、満足のいく回答が得られなかったのでこちらで質問させていただきます。

以下のようなコードを考えています。

セルG5からG19に同じ数値が、いくつか表示されます。
一番下のセルのフォント色を黒にして、それより上のセルのフォント色は白に
したいのです。
同じ数値の個数は決まっていません。
例えば、G5からG10に同じ数値が表示されていて、G11からG19が空白の場合、G5からG9のフォント色を白にして、G10の色を黒にしたいのです。

Sub フォント色()
With Range("G5:G19")    
  .Cells(1).Resize(.Count - 1) _
    .Font.Color = vbWhite
  .Cells(.Count).Font.Color = vbBlack
 End With

上記のコードだと、G19に数値が表示されていないと反応しません。
ご教授よろしくお願いします。

【46675】Re:フォント色の指定について
発言  ichinose  - 07/2/12(月) 7:54 -

引用なし
パスワード
   ▼ayaka さん:
おはようございます。

>セルG5からG19に同じ数値が、いくつか表示されます。
>一番下のセルのフォント色を黒にして、それより上のセルのフォント色は白に
>したいのです。
>同じ数値の個数は決まっていません。
>例えば、G5からG10に同じ数値が表示されていて、G11からG19が空白の場合、G5からG9のフォント色を白にして、G10の色を黒にしたいのです。

私は、日頃このようなご質問の場合は、「必ず例を交えて説明してください」
と何度かこの質問箱では申し上げてきていますが・・・。

この問題、見ている方は、何のためにこのようなプログラムが必要なのか
わかりませんよね(バックボーンの説明がありませんからね)?
そうするとこの問題は、例題が少なすぎると思うのです。

>例えば、G5からG10に同じ数値が表示されていて、G11からG19が空白の場合、G5からG9のフォント色を白にして、G10の色を黒にしたいのです。

   G
 5  9
 6  9
 7  9
 8  9
 9  9
10  9
11
 ・
 ・
19

この場合は G10を黒にして G5〜G9を白にする
事はわかります。

では、

   G
 5  1
 6  1
 7  1
 8  9
 9  9
10  9
11
 ・
 ・
19

この場合は、どうなるのですか?

又、

   G
 5  1
 6  9
 7  1
 8  9
 9  1
10  9
11
 ・
 ・
19

この場合は、どのようになるのですか?


   G
 5  1
 6  1
 7  1
 8  9
 9  9
10  9
11
12  3
 ・
19

この場合は、?

これらの場合の結果によって、コードは簡単になる場合もあるし、
ちょっと複雑になる場合もあります。

ね、仕様を書くって大変でしょう?
ここで質問を記述する事は仕様を記述する練習になります。
投稿を見ている方に何を説明すれば自分の意図する事柄が伝わるか?
よく考えてみて下さい。

【46676】Re:フォント色の指定について
質問  ayaka  - 07/2/12(月) 8:20 -

引用なし
パスワード
   ichinose さん
おはようございます。
説明不足ですみませんでした。

>>セルG5からG19に同じ数値が、いくつか表示されます。

セルG5からG19に同じ数値だけが、いくつか表示されます。


>   G
> 5  1
> 6  1
> 7  1
> 8  9
> 9  9
>10  9
>11
> ・
> ・
>19
>
>この場合は、どうなるのですか?

G列に異なる数値は入りません。

>又、
>
>   G
> 5  1
> 6  9
> 7  1
> 8  9
> 9  1
>10  9
>11
> ・
> ・
>19
>
>この場合は、どのようになるのですか?

同様にG列に異なる数値は入りません。


>   G
> 5  1
> 6  1
> 7  1
> 8  9
> 9  9
>10  9
>11
>12  3
> ・
>19
>
>この場合は、?

数値と数値の間に空白は入りません。

よろしくお願いします。

【46677】Re:フォント色の指定について
発言  ichinose  - 07/2/12(月) 8:49 -

引用なし
パスワード
   Sub フォント色()
  With Range("G5", Range("g5").End(xlDown))
    .Font.Color = vbWhite
    .Cells(.Count).Font.Color = vbBlack
    End With
End Sub

これで試してみて下さい

【46678】Re:フォント色の指定について
発言  T  - 07/2/12(月) 9:04 -

引用なし
パスワード
   ▼ayaka さん:
With Rnage("G5:G19")を使うと

Sub フォント色3()
With Range("G5:G19")
  .Cells(1).Resize(.Count - 10) _
    .Font.Color = vbWhite
  .Cells(6).Font.Color = vbBlack
 End With
End Sub

【46679】Re:フォント色の指定について
発言  かみちゃん  - 07/2/12(月) 9:19 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>モーグ掲示板にて下記の質問をしましたが、満足のいく回答が得られなかったのでこちらで質問させていただきます。

http://www2.moug.net/bbs/exvba/20070211000027.htm
のご質問は、拝見していましたが、
もし、満足いく回答が得られず、掲示板を変えるならば、あちらは閉じられるべき
ではないでしょうか?
そうでないと、「マルチポスト」状態になってしまいます。

それとも、あちらかこちらかどちらかから、満足のいく回答が得たいということで
しょうか?

【46680】Re:フォント色の指定について
発言  かみちゃん  - 07/2/12(月) 10:36 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>モーグ掲示板にて下記の質問をしましたが、満足のいく回答が得られなかった

結果的に、こちらでichinoseさんがおっしゃっている、サンプルデータの提示が
なかったのが、原因かと思います。
こちらで、サンプルデータの提示がありましたので、やっと、本当にしたいこと
がわかったような気がします。

ただし、異なるデータがあったらどうするのでしょうか?

ichinoseさんのコードは、同じ数値のデータを探しているのではなく、G5セルを
基点として、G列の下方向に次の空白のひとつ上のセル範囲(G5:G10)を取得して、
そのセル範囲の一番下のセル(G10)だけを黒色にするというものです。

また、Tさんのコードは、ayakaさんの提示された例題を忠実に実現されていますが、
「同じ数値の個数は決まっていない」つまり、G5:G10のときは対応できるが、
G5:G11のときは対応できないと思います。

さらに、mougで回答のついているTry2は、少し複雑に見えますが、ayakaさんが
したいことが実現できると思います。

そして、今さらながら、mougで最初にご質問されたときに提示されたコードを修正
されるならば、以下のようなコードでもできると思います。
Sub フォント色_moug_ayaka()
 Dim x As Long
 With Range("G5:G19")
'  .Font.ColorIndex = xlAutomatic
  .Font.ColorIndex = 1 '★
  For x = 1 To .Count - 1
   If .Cells(x + 1).Value = "" Then Exit For '★
   .Cells(x).Font.ColorIndex = 2
  Next
 End With
End Sub

もっとも、ichinoseさんご提示のコードが一番簡単なわけですが・・・

もし、これで解決されて、mougも閉じていただけるならば、どのように解決した
のか、あちらでもご紹介していただけると、コメントを寄せていただいた方にも
失礼にはならないかと思いますし、掲示板を見ている他の方々の役にも少しは立
てるのではないかと思いますので、ご配慮いただければと思います。

【46685】Re:フォント色の指定について
回答  Hirofumi  - 07/2/12(月) 12:06 -

引用なし
パスワード
   こんな事なのかなぁ?

Option Explicit

Public Sub Sample()

  Dim i As Long
  Dim lngRows As Long
  Dim lngTop As Long
  Dim lngCount As Long
  Dim rngList As Range
  Dim vntData As Variant
  Dim strProm As String
  
  'Listの左上隅セル位置を基準として設定
  Set rngList = ActiveSheet.Cells(5, "G")
  
  '画面更新を停止
  Application.ScreenUpdating = False
  
  With rngList
'    'データ行数を取得 ★データ行数が不定で行数を取得する場合
'    lngRows = .Offset(Rows.Count - .Row).End(xlUp).Row - .Row + 1
'    'データが無い場合
'    If lngRows <= 1 And .Value = "" Then
'      strProm = "データが有りません"
'      GoTo Wayout
'    End If
    'データ行数を設定(G5〜G19) ★データ行数を予め指定する場合
    lngRows = 15
    'データを配列に取得
    vntData = .Resize(lngRows + 1).Value
    '番兵を設定
    vntData(lngRows + 1, 1) = Empty
    '範囲のフォントを初期化
    .Resize(lngRows).Font.ColorIndex = 0
    '同一セル値の先頭行初期値設定
    lngTop = 1
    '同一セル値のカウント初期値設定
    lngCount = 1
    'データ2行目〜最終行+1まで繰り返し
    For i = 2 To lngRows + 1
      '同一セル値先頭と現在行の値が違った場合
      If vntData(lngTop, 1) <> vntData(i, 1) Then
        '同一セル値先頭が""で無いなら
        If vntData(lngTop, 1) <> "" Then
          With .Offset(lngTop - 1)
            '同一値が1超える場合
            If lngCount > 1 Then
              'FontColorをWhiteに
              .Resize(lngCount - 1).Font.Color = vbWhite
            End If
            'FontColorをBlackに
            .Offset(lngCount - 1).Font.Color = vbBlack
          End With
        End If
        '同一セル値の先頭行を更新
        lngTop = i
        '同一セル値のカウント初期値設定
        lngCount = 1
      Else
        '同一セル値のカウントを更新
        lngCount = lngCount + 1
      End If
    Next i
  End With
  
  strProm = "処理が完了しました"
  
Wayout:
  
  '画面更新を再開
  Application.ScreenUpdating = True
  
  Set rngList = Nothing
  
  MsgBox strProm, vbInformation
  
End Sub

【46686】Re:フォント色の指定について
回答  Kein  - 07/2/12(月) 14:02 -

引用なし
パスワード
   コードの書き方はいくらでもありそうですが、値が可変であるなら
事前に何らかのチェックや色を初期状態へ戻す処理は、入れておいたほうが
良いような気がします。こんな感じでどうでしょーか ?

Dim Cnt As Integer

With Range("G5:G19")
  Cnt = WorksheetFunction.Count(.Cells)
  If Cnt < 2 Then Exit Sub
  .Font.ColorIndex = xlColorIndexAutomatic
  .Cells(1).Resize(Cnt - 1).Font.Color = xlWhite
  .Cells(1).Offset(Cnt - 1).Font.Color = xlBlack
End With 

【46700】Re:フォント色の指定について
お礼  ayaka  - 07/2/12(月) 17:20 -

引用なし
パスワード
   皆さん、色々とご回答ありがとうございました。

返事が遅くなり申し訳ありません。

また、かみちゃんさんのご指摘の通り、モーグ掲示板を閉じる事にします。

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