C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.97752 の関連記事表示

<< 0 >>
■97752  Re[7]: 【ExcelVBA】行内の黄色セルのカウント
□投稿者/ 工場プログラマー -(2021/07/08(Thu) 08:47:25)
    No97735 (魔界の仮面弁士 さん) に返信
    > 2021/07/07(Wed) 11:42:25 編集(投稿者)
    >
    > ■No97733 (工場プログラマー さん) に返信
    >>列の指定がなかったですね、4列目から最終行です。
    >
    > 4「列」目から最終「行」、という表現に違和感が…。
    >
    > 「1 行目以降、最終行まで」の各行を
    > 「4 列目以降、最終列まで」の範囲で調べていくということですかね?

    ごめんなさい、4行目から最終行といいたかったです、、

    > Option Explicit
    >
    > Public Sub Wankuma97715(Optional ByVal targetSheet As Excel.Worksheet)
    >   Const CELL_MARK_COLOR As Long = vbRed
    >   Const CELL_FIND_COLOR As Long = vbYellow  '探索対象の色
    >   Const CELL_FIND_COUNT As Long = 4      '探索を打ち切る数(1以上)
    >   Const START_ROW As Long = 1         '探索開始行(1以上)
    >   Const START_COL As Long = 4         '探索開始列(2以上)
    >
    >   If targetSheet Is Nothing Then
    >     Set targetSheet = ThisWorkbook.ActiveSheet
    >   End If
    >   Dim rng As Excel.Range
    >   Set rng = targetSheet.UsedRange
    >
    >   ' A 列の背景色を事前にクリアしておく
    >   targetSheet.Columns(1).Interior.ColorIndex = xlColorIndexNone
    >
    >   Dim rowIndex As Long, colIndex As Long
    >   Dim colorCount As Long
    >   For rowIndex = WorksheetFunction.Max(rng.Row, START_ROW) To rng.Row + rng.Rows.Count - 1
    >     colorCount = 0
    >     For colIndex = START_COL To rng.Column + rng.Columns.Count - 1
    >       If targetSheet.Cells(rowIndex, colIndex).DisplayFormat.Interior.Color = CELL_FIND_COLOR Then
    >         colorCount = colorCount + 1   '該当する背景色を発見
    >         If colorCount >= CELL_FIND_COUNT Then
    >           '既定数に達したので A 列を着色
    >           targetSheet.Cells(rowIndex, 1).Interior.Color = CELL_MARK_COLOR
    >           'この行の探索を打ち切って次行へ
    >           Exit For
    >         End If
    >       End If
    >     Next
    >   Next
    > End Sub

    参考にしてこんな感じで作れました。

    Dim i, j, iRow, MaxRow, MaxCol, yellow_cnt As Long

    MaxRow = Cells(Rows.Count, 4).End(xlUp).Row
    MaxCol = Cells(7, Columns.Count).End(xlToLeft).Column
    iRow = 7

    For i = 7 To MaxRow
    For j = 4 To MaxCol                 '列の端までいったら抜ける
    If Cells(iRow, j).Interior.ColorIndex = 6 Then  '黄色の判定
    yellow_cnt = yellow_cnt + 1         '行内の黄色セルをカウント
    If yellow_cnt >= 4 Then           '4以上で1列目を背景色を赤色に変更
    Cells(iRow, 1).Interior.ColorIndex = 3
    End If
    End If
    Next j

    iRow = iRow + 1                     '次の行へ
    yellow_cnt = 0                      'カウントを0に戻す

    Next i

    皆さん、たくさんのご回答ありがとうございました。
記事No.97715 のレス / END /過去ログ169より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -