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

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

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

全過去ログを検索

<< 0 >>
■7996  Re[3]: 記憶領域の開放を明示的に
□投稿者/ 囚人 -(2007/09/20(Thu) 23:15:15)
    >これをC#でやるときには、Deleteに相当する動作はあるのでしょうか?
    >newでインスタンスを生成したものを開放するということでいいのでしょうけど…。
    >
    >ガベージコレクションのおかげで領域管理が楽になったとあるのですが、
    >いつそれが行われるかわからないので心配なんです。


    訊きたい事が何なのかよくわかりませんが、C++ の delete に相当するものをコードで書くことはできません。
    ガベージコレクションが動作するタイミングを制御することはできなくはないですが、やらない方が良いです。放っておけばよいです。
記事No.7971 のレス /過去ログ19より / 関連記事表示
削除チェック/

■51845  Re[5]: 印刷プレビュー(PrintPreviewDialog)で表示
□投稿者/ じいおい -(2010/07/22(Thu) 13:05:03)
    魔界の仮面弁士 さん

    どうしてそうなるのか分からなく、ずっとそこでハマり込んでいたので助かりました。
    そうなるものとして分割して対応しようと思います。
    いろいろ丁寧に教えていただきどうもありがとうございました。


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

■86794  Re[1]: System.NullReferenceExceptionが
□投稿者/ 魔界の仮面弁士 -(2018/03/16(Fri) 10:47:48)
記事No.86792 のレス /過去ログ149より / 関連記事表示
削除チェック/

■97715  【ExcelVBA】行内の黄色セルのカウント
□投稿者/ 工場プログラマー -(2021/07/05(Mon) 09:01:50)

    分類:[Microsoft Office 全般] 

    Win10

    例えば、1行ずつ黄色セルの数を調べていって4以上なら
    その行の1列目のセルを赤色セルに変えることはできますか?

    いろいろやってみたんですけど1列ずつ調べることしかできなくて、、
    どなたか教えてください。
親記事 /過去ログ169より / 関連記事表示
削除チェック/

■97716  Re[1]: 【ExcelVBA】行内の黄色セルのカウント
□投稿者/ mofuramei -(2021/07/05(Mon) 10:46:23)
    分類がオフィスなのでVBAを使用して取得すると読み取っています
    違えば使用されるツールも記載された方が回答が付きやすいです。
    後、1行の定義が何列目等を指すのかあいまいなので定義された方が良いかと思います。
    ※値が無くなる所までとか、最大100列目までとか

    セル位置の指定[https://excel-ubara.com/excelvba1/EXCELVBA311.html]
    セル色の取得[https://www.tipsfound.com/vba/07005]
    セル色の設定[https://www.tipsfound.com/vba/07006]


    以上


    No97715 (工場プログラマー さん) に返信
    > Win10
    >
    > 例えば、1行ずつ黄色セルの数を調べていって4以上なら
    > その行の1列目のセルを赤色セルに変えることはできますか?
    >
    > いろいろやってみたんですけど1列ずつ調べることしかできなくて、、
    > どなたか教えてください。
記事No.97715 のレス /過去ログ169より / 関連記事表示
削除チェック/

■97717  Re[1]: 【ExcelVBA】行内の黄色セルのカウント
□投稿者/ furu -(2021/07/05(Mon) 12:08:00)
    No97715 (工場プログラマー さん) に返信
    > 例えば、1行ずつ黄色セルの数を調べていって4以上なら
    > その行の1列目のセルを赤色セルに変えることはできますか?
    ・全データを行列入れ替えでコピー
    ・列毎に
      黄色でフィルター
      4以上なら、元データの1列目のセルを赤色セルに変える

    これで少なくとも全セルチェックしなくていけます。
記事No.97715 のレス /過去ログ169より / 関連記事表示
削除チェック/

■97718  Re[2]: 【ExcelVBA】行内の黄色セルのカウント
□投稿者/ メタルスライム -(2021/07/06(Tue) 00:13:32)
    やりたいことは簡単なことなのに
    質問の意味がわからない

    行とは何か

    あなたが当然伝えられていると思っていることは
    伝わっていない

    もう少し詳しく条件を提示しなければ
    そのまま使えるコードが提示されることはないと思います



    列ごとに●列から●列まで実行

    列に黄色いセルが何個あるか判定
    4を超えたら
    指定行の色を赤に変更


    という処理をするだけです。

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

■97719  Re[3]: 【ExcelVBA】行内の黄色セルのカウント
□投稿者/ 工場プログラマー -(2021/07/06(Tue) 08:49:55)
    No97718 (メタルスライム さん) に返信
    >
    > 列ごとに●列から●列まで実行
    >
    > 列に黄色いセルが何個あるか判定
    > 4を超えたら
    > 指定行の色を赤に変更
    >
    >
    > という処理をするだけです。
    >

    そのまま使えなくてもいいのですが甘えさせていただきますと
    7行目から最終行まで実行したいです。

    メタルスライムさんの説明に加えさせていただきますと

    行ごとに7行目から最終行まで実行
    行に黄色いセルが何個あるか判定
    4を超えたら
    指定行の黄色は残したまま指定行A列のセルを赤色に変更(11行目に黄色が4つあったらA11を赤にする)

    みたいな感じです。

    わかり辛かったらすいません。
記事No.97715 のレス /過去ログ169より / 関連記事表示
削除チェック/

■97721  Re[4]: 【ExcelVBA】行内の黄色セルのカウント
□投稿者/ 魔界の仮面弁士 -(2021/07/06(Tue) 10:06:54)
    No97715 (工場プログラマー さん) に返信
    > いろいろやってみたんですけど1列ずつ調べることしかできなくて、、

    残念ながら、一つずつ調べていくしか無いと思います。

    セル値に対する判定処理であれば、データ構造上比較的容易に処理できますが、
    セル色に対する判定処理は一括で行えません。ワークブックを作る際には
    「色」を識別用途にはせず、セル値として作りこんだ方がプログラム的には処理しやすいです。


    No97719 (工場プログラマー さん) に返信
    > 指定行の黄色は残したまま指定行A列のセルを赤色に変更(11行目に黄色が4つあったらA11を赤にする)

    A 列が黄色だったらどうするんだろう…という思いや、
    列数の上限なし(16384列目まで)なのかといった疑問はありますが、それはさておき。

    セルの色といっても、「パターンの色」「塗りつぶしの背景色」「文字色」「各罫線の色」などが
    ありますが、今回は背景色でしょうか。

    条件付き書式による色変化も考慮するとなれば、使用するのは必然的に
    .DisplayFormat.Interior.Color プロパティ (あるいは同 ColorIndex) になるでしょう。

    条件付き書式を使っていない場合は GET.CELL(63, セル) マクロという選択肢もありますが、
    大量に使うとメモリ不足で動かなくなるので実質的に使えないと思います。


    そして Interior オブジェクトにせよ GET.CELL マクロにせよ、
    複数のセル範囲を一括して処理することはできません。

    処理速度が懸念されますが、ループ処理で一つずつ見ていくしか無いと思いますよ。

    No97717 の furu さんの方法ならかなり楽にはなりそうですが、それでも
     ・行数上限は 1,048,576 だが、列数上限は 16,384 のため、回転しきれないケースもある
     ・元の行数(回転後の列数)分だけ、フィルターの切り替えが必要
    という制限はありますね。
記事No.97715 のレス /過去ログ169より / 関連記事表示
削除チェック/

■97733  Re[5]: 【ExcelVBA】行内の黄色セルのカウント
□投稿者/ 工場プログラマー -(2021/07/07(Wed) 08:43:03)
    No97721 (魔界の仮面弁士 さん) に返信
    > ■No97715 (工場プログラマー さん) に返信
    >>いろいろやってみたんですけど1列ずつ調べることしかできなくて、、
    >
    > 残念ながら、一つずつ調べていくしか無いと思います。
    >
    > セル値に対する判定処理であれば、データ構造上比較的容易に処理できますが、
    > セル色に対する判定処理は一括で行えません。ワークブックを作る際には
    > 「色」を識別用途にはせず、セル値として作りこんだ方がプログラム的には処理しやすいです。

    なるほど、色の判定は難しそうなんで別の方法も考えてみます。
    >
    > A 列が黄色だったらどうするんだろう…という思いや、
    > 列数の上限なし(16384列目まで)なのかといった疑問はありますが、それはさておき。

    すいません。列の指定がなかったですね、4列目から最終行です。

    > セルの色といっても、「パターンの色」「塗りつぶしの背景色」「文字色」「各罫線の色」などが
    > ありますが、今回は背景色でしょうか。

    背景色です。

    > 条件付き書式による色変化も考慮するとなれば、使用するのは必然的に
    > .DisplayFormat.Interior.Color プロパティ (あるいは同 ColorIndex) になるでしょう。
    >
    > 条件付き書式を使っていない場合は GET.CELL(63, セル) マクロという選択肢もありますが、
    > 大量に使うとメモリ不足で動かなくなるので実質的に使えないと思います。
    >
    >
    > そして Interior オブジェクトにせよ GET.CELL マクロにせよ、
    > 複数のセル範囲を一括して処理することはできません。
    >
    > 処理速度が懸念されますが、ループ処理で一つずつ見ていくしか無いと思いますよ。

    そこまで多いデータ量ではないんで頑張ってみますね。
記事No.97715 のレス /過去ログ169より / 関連記事表示
削除チェック/

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

■97725  Re[4]: 【ExcelVBA】行内の黄色セルのカウント
□投稿者/ PATIO -(2021/07/06(Tue) 14:33:42)
    No97719 (工場プログラマー さん) に返信
    > ■No97718 (メタルスライム さん) に返信
    >>
    >>列ごとに●列から●列まで実行
    >>
    >>列に黄色いセルが何個あるか判定
    >>4を超えたら
    >>指定行の色を赤に変更
    >>
    >>
    >>という処理をするだけです。
    >>
    >
    > そのまま使えなくてもいいのですが甘えさせていただきますと
    > 7行目から最終行まで実行したいです。
    >
    > メタルスライムさんの説明に加えさせていただきますと
    >
    > 行ごとに7行目から最終行まで実行
    > 行に黄色いセルが何個あるか判定
    > 4を超えたら
    > 指定行の黄色は残したまま指定行A列のセルを赤色に変更(11行目に黄色が4つあったらA11を赤にする)
    >
    > みたいな感じです。
    >
    > わかり辛かったらすいません。

    えーと、もしかしてコードを書いてほしいと言う事でしょうか。

    言われている内容であれば、EXCEL VBAの範疇であれば、基本的な内容の範囲で実現できると思います。
    コードにするには具体的な内容が色々足りなそうですけれど。

    具体的にどう動かすのかを整理した上で実現するにはどういうコードを書けばよいかで進めていく必要があると思いますよ。
    少なくともマクロの記録でどうにかなる様な話ではないと思います。

    VBAの文法とかそういう部分から説明が必要という話でしょうか。
記事No.97715 のレス /過去ログ169より / 関連記事表示
削除チェック/

■97734  Re[5]: 【ExcelVBA】行内の黄色セルのカウント
□投稿者/ 工場プログラマー -(2021/07/07(Wed) 09:01:04)
    No97725 (PATIO さん) に返信

    > えーと、もしかしてコードを書いてほしいと言う事でしょうか。

    アドバイスや参考になるコードをいただきたいですね。

    > 言われている内容であれば、EXCEL VBAの範疇であれば、基本的な内容の範囲で実現できると思います。
    > コードにするには具体的な内容が色々足りなそうですけれど。
    >
    > 具体的にどう動かすのかを整理した上で実現するにはどういうコードを書けばよいかで進めていく必要があると思いますよ。

    整理はついていたんですけど説明が足りなかったですね。申し訳ないです。
記事No.97715 のレス /過去ログ169より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -