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

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

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

全過去ログを検索

<< 0 >>
■10380  Re[7]: ハイパーターミナルからRS232Cを使って文字列を取得したい
□投稿者/ επιστημη -(2007/11/16(Fri) 16:22:15)
>
    > 自分で内容確認しましたが、ハイパーターミナルを相手にシリアル通信をしたい」があっています。
    > 申し訳ございませんが、そっちの面で教えてもらえませんか??

    ぃゃぃゃぃゃ、No10343 で参照されてるページ"そのまんま"やないのん。
記事No.10316 のレス /過去ログ23より / 関連記事表示
削除チェック/

■57115  Re[9]: クリスタルレポートでの帳票作成について
□投稿者/ こんぽ -(2011/02/15(Tue) 11:12:20)
    自己解決しました。

    結論から申しますと、shu様に頂いたアドバイス
    を元に以下のようなレポートを作成したところ線オブジェクトが
    レポートフッターを突き抜けてしまう現象が回避できました。

    ↓以下帳票

    ページヘッダーa :           <帳票タイトル>
    ページヘッダーb :省略
    グループヘッダー:|                |                  |
    詳細a        :|------------------|-------------------|
    (続き)       :|                |                  |
    (続き)       :|質問1           |質問2             |
    詳細b         :|------------------|-------------------|
    (続き)       :|回答1          |回答2              |
    グループフッター :|               |                   |
    (続き)       : ----------------------------------------
    レポートフッター :
    ページフッター   :          <ページ数(N/M)>

    以前までは詳細a、詳細bに三本ずつ、縦の線オブジェクトを配置してましたが
    修正後はグループヘッダーからグループフッダーまでの
    1本のラインオブジェクト三本配置するように変更しました。

    なんであのような動作になってしまうのかは分からないままですが、
    ひとまず問題の事象が回避できましたので解決済みに致します。

    じゃんぬねっと様、shu様、ありがとうございました。


記事No.57064 のレス / END /過去ログ96より / 関連記事表示
削除チェック/

■97735  Re[6]: 【ExcelVBA】行内の黄色セルのカウント
□投稿者/ 魔界の仮面弁士 -(2021/07/07(Wed) 09:58:38)
    2021/07/07(Wed) 11:42:25 編集(投稿者)

    No97733 (工場プログラマー さん) に返信
    > 列の指定がなかったですね、4列目から最終行です。

    4「列」目から最終「行」、という表現に違和感が…。

    「1 行目以降、最終行まで」の各行を
    「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
記事No.97715 のレス /過去ログ169より / 関連記事表示
削除チェック/

■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より / 関連記事表示
削除チェック/

■97753  Re[8]: 【ExcelVBA】行内の黄色セルのカウント
□投稿者/ 魔界の仮面弁士 -(2021/07/08(Thu) 09:26:06)
    2021/07/08(Thu) 09:42:40 編集(投稿者)

    No97752 (工場プログラマー さん) に返信
    > MaxRow = Cells(Rows.Count, 4).End(xlUp).Row
    > MaxCol = Cells(7, Columns.Count).End(xlToLeft).Column

    End プロパティはセル範囲の終端にしか反応しないので、
    最終行(1048576行目)や最終列(XFD すなわち 16384列目)にまで
    データが記載されていた場合、判定に失敗してしまいます。

    また、「背景が黄色になっているが値が空なセル」という状況は無いのでしょうか?
    End プロパティはコンテンツにしか反応しないので、セル値が空の場合は読み飛ばされてしまいます。
    それを避けるため、No97735 では End ではなく UsedRange を使用しています。

    必要要件次第では、UsedRange よりも狭い範囲を探索対象としたいこともあるとは思いますが、
    そもそも、最大列は 7 行目のみで判断されるものだったのでしょうか。
    そのような仕様は提示されていなかったように思うのですけれども。(^^;


    > If Cells(iRow, j).Interior.ColorIndex = 6 Then  '黄色の判定
    .Interior は、条件付き書式で着色された背景を考慮しませんが、本当にそれで良いのでしょうか?
    .DisplayFormat.Interior を使えば、条件付き書式で上書き着色されたセルでも判定できます。

    見た目上の黄色いセルを取得するのではなく、条件付き書式の影響を受ける前の
    セル設定が黄色のセルを取得する目的ならば、.Interior の方を使うことになるでしょう。


    > If yellow_cnt >= 4 Then           '4以上で1列目を背景色を赤色に変更
    この時点で、j のループは Exit For しておくべきだと思いますよ。
    もし、その行に黄色のセルが何千個もあったとしても、
    4 に達した時点で、その行で行うべき作業はもう無いわけですから。

    また、行・列処理のための入れ子のループ処理において、
    i や j といったループカウンタを使う事はあまりお奨めしません。
    i や j では後々、どちらが行でどちらが列なのかが分かりにくくなるためです。

    一文字変数を望むなら、r や c、あるいは x と y などのように、
    行なのか列なのか識別しやすい名前にしておくと、
    取り違えミスを防ぎやすくなると思います。


    > iRow = 7
    > For i = 7 To MaxRow
    > (中略)
    > iRow = iRow + 1
    > yellow_cnt = 0
    > Next i

    この流れなら、変数 i は不要で、
     For iRow = 7 To MaxRow
    だけで良い気がします。
記事No.97715 のレス / END /過去ログ169より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -