Excel VBA質問箱 IV

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

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


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

【73244】条件に合うセルの色づけ tk 12/12/12(水) 11:25 質問[未読]
【73245】Re:条件に合うセルの色づけ UO3 12/12/12(水) 13:37 発言[未読]
【73246】Re:条件に合うセルの色づけ ウッシ 12/12/12(水) 14:17 回答[未読]
【73247】Re:条件に合うセルの色づけ tk 12/12/12(水) 16:54 発言[未読]
【73249】Re:条件に合うセルの色づけ UO3 12/12/12(水) 21:44 発言[未読]
【73254】Re:条件に合うセルの色づけ UO3 12/12/13(木) 10:16 発言[未読]
【73256】Re:条件に合うセルの色づけ ウッシ 12/12/13(木) 13:31 回答[未読]
【73259】Re:条件に合うセルの色づけ tk 12/12/14(金) 11:11 発言[未読]
【73283】Re:条件に合うセルの色づけ tk 12/12/17(月) 17:23 質問[未読]
【73296】Re:条件に合うセルの色づけ ウッシ 12/12/18(火) 11:26 回答[未読]
【73310】Re:条件に合うセルの色づけ tk 12/12/19(水) 16:19 お礼[未読]

【73244】条件に合うセルの色づけ
質問  tk  - 12/12/12(水) 11:25 -

引用なし
パスワード
   二つの異なるデータベースの情報が正しく入力されているかを
チェックして色付けで出来るマクロ作成を依頼されました。

恥ずかしながら、「マクロの記録」から中身を弄るくらいしか触れません。
実作業として↓の流れです、どうかご教授願います。

DB1. DB1. DB2.

○ →○→○正
 ↓  →×偽
 ↓
 →×→○偽
    →×正

× →○→○偽
 ↓  →×偽
 ↓
  →×→○偽
    →×正

○:オープン
×:クローズ
DB1.,2.は同ブック別シート

【1】DB1.の(B,8)セルの数値を取得
【2】DB1.の【1】で取得した行のE列に"クローズ"の文字有無で条件検索開始
---------------------------------------
・"クローズ"無 ○
DB1.の(AL,8)セルが"オープン""クローズ"or空白
・オープン○
→(AK,8)の値を取得し、その値をDB2.で検索
→選択行のD列に"クローズ"の文字が含まれている、N列に数字が入っている

false ○
→正

true ×
→偽

・クローズ×
→(AK,8)の値を取得し、その値をDB2.で検索
→選択行のD列に"クローズ"の文字が含まれている、N列に数字が入っている

false ×
→偽

true ○
→正

・空白
→end
→一つ下のセルで実行、空白セルで終了
---------------------------------------
・"クローズ"有 ×
DB1.の(AL,8)セルが"オープン""クローズ"or空白
・オープン ○
→偽

・クローズ ×
→(AK,8)の値を取得し、その値をDB2.で検索
→選択行のD列に"クローズ"の文字が含まれている、N列に数字が入っている

false ○
→偽

true ×
→正

・空白
→end
→一つ下のセルで実行、空白セルで終了
---------------------------------------
【3】正の場合は何もしない、偽の場合はDB1.(B,x)セルを色付け

【73245】Re:条件に合うセルの色づけ
発言  UO3  - 12/12/12(水) 13:37 -

引用なし
パスワード
   ▼tk さん:

こんにちは

丁寧に説明いただいてはいるのですが、ロジックを書いておられるので
かえって、なにがなんだかわからなくなる部分もありますねぇ。
むしろ、シートのレイアウトの説明、どこからどこに何が記載されているか。
で、そこで、どのような処理を行いたいのかを、処理要件として【言葉】で
説明いただくわけにはいきませんか?

コードの説明に重点があるので、たとえば

>DB1.の(AL,8)セルが"オープン""クローズ"or空白

それ以外だったらどうするのかな?
それとも、"オープン","クローズ" と、それ以外ということなのかな?

>・空白
>→end
>→一つ下のセルで実行、空白セルで終了

このあたりも、わかりそうで、でも、ほんとはどうなのかなぁ?
空白なら処理が終わるのかまだ続くのか?
一つ下のセルとは、何の1つ下なのか?

ということもあり、コードロジックではなく、レイアウト説明と言葉での処理要件が
ほしいなと思っています。

【73246】Re:条件に合うセルの色づけ
回答  ウッシ  - 12/12/12(水) 14:17 -

引用なし
パスワード
   こんにちは

DB2のどこを検索するのか分からないですし、判定ロジックもあやふやですけど、

Private f As Range
Sub test()
  Dim r As Range
  Dim t As Range
  Dim b As Boolean
  
  'DB2のどこを検索するのか
  Set t = Worksheets("DB2").Range("A1").CurrentRegion.Columns(1)
  With Worksheets("DB1")
    For Each r In .Range("B8", .Cells(Rows.Count, 2).End(xlUp))
      Select Case r.EntireRow.Range("E1").Value
        Case "クローズ"
          Select Case r.EntireRow.Range("AL1").Value
            Case "オープン"
              b = False
            Case "クローズ"
              b = Search_DB2(r.EntireRow.Range("AK1").Value, t) * False
            Case ""
          End Select
        Case Else
          Select Case r.EntireRow.Range("AL1").Value
            Case "オープン"
              b = Search_DB2(r.EntireRow.Range("AK1").Value, t) * False
            Case "クローズ"
              b = Search_DB2(r.EntireRow.Range("AK1").Value, t)
            Case ""
          End Select
      End Select
      If b = False Then
        r.Interior.ColorIndex = 3
      End If
      Set f = Nothing
    Next
  End With
End Sub
Function Search_DB2(ByVal s As Variant, Target As Range) As Boolean
  Set f = Target.Find(s, , xlValues, xlWhole)
  If f Is Nothing Then
    Search_DB2 = False
    Exit Function
  End If
  If f.EntireRow.Range("D1").Value Like "*クローズ*" And _
      IsNumeric(f.EntireRow.Range("N1").Value) = True Then
    Search_DB2 = True
  Else
    Search_DB2 = False
  End If
End Function

【73247】Re:条件に合うセルの色づけ
発言  tk  - 12/12/12(水) 16:54 -

引用なし
パスワード
   UO3さん
>コードロジックではなく、レイアウト説明と言葉での処理要件がほしいなと思っています。

解り辛くて大変申し訳ないです、
レイアウト説明と言葉ですか…文才が無いので上手く伝わるか自信ないですが;;
特にこちらの現場での言葉/決まり事が入っていて解り辛いと思いますがご容赦ください。

【レイアウト】
同ブックでインシデントDBシート、変更管理DBシートの2シートがあり、
各シートで個別の管理番号が割り振られています
例:インシデントDB Iyyyymmnnnn 
  変更管理DB Cyyyymmnnnn ※nは連番

一番左のセルに管理番号を記載し、その行に作業スケジュールや現在のステータス等を記載して管理しているエクセルデータベースです
インシデントDBは全ての案件を登録、変更管理DBはシステムの変更が掛かる案件のみ登録します。
※変更管理DBに登録する際はインシデントDBの一部のセルに変更管理DBの管理番号をとステータスを登録する

インシデントDB案件のステータス種類:1〜6迄オープン、7.クローズ
変更管理DB案件のステータス種類:1〜12迄オープン 13.クローズ


【処理要件】

端的に言えば、インシデントDBの各案件のステータスが正しいのチェックがしたい

1.インシデントDBの管理番号のステータスをチェック
2.インシデントDBに変更管理DBの番号とステータスが記載されているかチェック
※ここで未記入なら5.へ
3.変更管理DBの管理番号とステータスをチェック
4.各チェックで○×かを総合的に判断し最後に色を付ける
5.全ての管理番号をチェックするまでループ


ウッシさん
>DB2のどこを検索するのか分からないですし、判定ロジックもあやふやですけど、
色々と説明不足で申し訳無いです、
DB1で取得した値をA列で検索し、ヒットしたx行のD列N列を見る


すいません、自分で書いていて頭がこんがらがって来ました…
もっと解りやすく纏めるようにしたいのですが…パンクしそうです。

【73249】Re:条件に合うセルの色づけ
発言  UO3  - 12/12/12(水) 21:44 -

引用なし
パスワード
   ▼tk さん:

ありがとうございます
ただ・・・・
レイアウトの説明に【文才】は必要ないですよ。
○列は、何だということをシート毎に説明にただければいいのです。
それと、各シートの行関係はどうなっているのか?
どこかにタイトル行があるのか?
データは何行目からなのか?

(B,8) とか (AL,8) とか (AK,8) というのは、本当に8行目のことなのか、それとも
8 は、たとえばということなのか?

"クローズ" の文字有無 といった説明でしたけど、
文字有無ではなく "クローズ"を意味するコードの有無ということなのか・・・

もう一度整理して説明いただければ幸いです。
>UO3さん
>>コードロジックではなく、レイアウト説明と言葉での処理要件がほしいなと思っています。
>
>解り辛くて大変申し訳ないです、
>レイアウト説明と言葉ですか…文才が無いので上手く伝わるか自信ないですが;;
>特にこちらの現場での言葉/決まり事が入っていて解り辛いと思いますがご容赦ください。
>
>【レイアウト】
>同ブックでインシデントDBシート、変更管理DBシートの2シートがあり、
>各シートで個別の管理番号が割り振られています
>例:インシデントDB Iyyyymmnnnn 
>  変更管理DB Cyyyymmnnnn ※nは連番
>
>一番左のセルに管理番号を記載し、その行に作業スケジュールや現在のステータス等を記載して管理しているエクセルデータベースです
>インシデントDBは全ての案件を登録、変更管理DBはシステムの変更が掛かる案件のみ登録します。
>※変更管理DBに登録する際はインシデントDBの一部のセルに変更管理DBの管理番号をとステータスを登録する
>
>インシデントDB案件のステータス種類:1〜6迄オープン、7.クローズ
>変更管理DB案件のステータス種類:1〜12迄オープン 13.クローズ
>
>
>【処理要件】
>
>端的に言えば、インシデントDBの各案件のステータスが正しいのチェックがしたい
>
>1.インシデントDBの管理番号のステータスをチェック
>2.インシデントDBに変更管理DBの番号とステータスが記載されているかチェック
>※ここで未記入なら5.へ
>3.変更管理DBの管理番号とステータスをチェック
>4.各チェックで○×かを総合的に判断し最後に色を付ける
>5.全ての管理番号をチェックするまでループ
>
>
>ウッシさん
>>DB2のどこを検索するのか分からないですし、判定ロジックもあやふやですけど、
>色々と説明不足で申し訳無いです、
>DB1で取得した値をA列で検索し、ヒットしたx行のD列N列を見る
>
>
>すいません、自分で書いていて頭がこんがらがって来ました…
>もっと解りやすく纏めるようにしたいのですが…パンクしそうです。

【73254】Re:条件に合うセルの色づけ
発言  UO3  - 12/12/13(木) 10:16 -

引用なし
パスワード
   ▼tk さん:

お答がいただけないのですが、列と行がどうなっているのか
回答をお願いします。

とくに DB1のB8(B列?)が何者なのか、
DB2 の N列が何者なのか。

【73256】Re:条件に合うセルの色づけ
回答  ウッシ  - 12/12/13(木) 13:31 -

引用なし
パスワード
   こんにちは

A列を検索するようにして有りますので、シート名を実情に合わせるだけで
動くと思いますので、判定条件の各パターンのデータを用意しておいて
試してみて下さい。

【73259】Re:条件に合うセルの色づけ
発言  tk  - 12/12/14(金) 11:11 -

引用なし
パスワード
   返信が遅くなりまして大変申し訳ありませんでした。
度々の解り辛い説明ばかりで大変恐縮です、、、

UO3さん
>(B,8) とか (AL,8) とか (AK,8) というのは、本当に8行目のことなのか、それとも
>8 は、たとえばということなのか?
>とくに DB1のB8(B列?)が何者なのか、
→(B,8)は最初の管理番号が記載されているセルです、(B,8)から順に下方向番号が並んでいる為(B,8)と記載しました

>DB2のN列が何者なのか。
→DB2のN列はDB2の管理番号の作業終了時間を記載するセルでして、ここに値が入っていれば作業完了という意味合いの列です

>"クローズ" の文字有無 といった説明でしたけど、
>文字有無ではなく "クローズ"を意味するコードの有無ということなのか・・・
→こちらはコードの有無では無く、対象セルに"クローズ"が含まれる文字列が記載されているか?という意味合いです

ウッシさん
>A列を検索するようにして有りますので、シート名を実情に合わせるだけで
>動くと思いますので、判定条件の各パターンのデータを用意しておいて
>試してみて下さい。
→本当にありがとうございます、色々と弄らせて頂き、またご報告させて頂きます

【73283】Re:条件に合うセルの色づけ
質問  tk  - 12/12/17(月) 17:23 -

引用なし
パスワード
   ご報告が遅くなりました。
無事やりたいマクロが出来ました。本当にありがとうございました。

ついで申し訳ないのですが、一つ追加したい部分があります。
セルの色づけをする際にrのA列に数字のフラグを付けてフィルターを掛けたいです。
フィルターは解るのですがrの一つ左のセル指定の書き方が解りませんでした、どうかご教授お願いします。

Private f As Range
Sub check_release()
  Dim r As Range
  Dim t As Range
  Dim b As Boolean
   
  Set t = Worksheets("変更・リリース管理台帳").Range("A1").CurrentRegion.Columns(1)
  With Worksheets("インシデント管理台帳")
    For Each r In .Range("B8", .Cells(Rows.Count, 2).End(xlUp))
      Select Case r.EntireRow.Range("E1").Value
        Case "7.クローズ"
          Select Case r.EntireRow.Range("AL1").Value
            Case "1.オープン"
              b = False
            Case "2.クローズ"  'クローズ分岐
              b = Search_DB3(r.EntireRow.Range("AK1").Value, t)
            Case ""
              b = True
          End Select
        Case Else
          Select Case r.EntireRow.Range("AL1").Value
            Case "1.オープン"  'オープン分岐1.
              b = Search_DB1(r.EntireRow.Range("AK1").Value, t)
            Case "2.クローズ"  'オープン分岐2.
              b = Search_DB2(r.EntireRow.Range("AK1").Value, t)
            Case ""
              b = True
          End Select
      End Select
      If b = False Then
         r.Interior.ColorIndex = 43
      End If
      Set f = Nothing
    Next
  End With
 End With
MsgBox "処理終了"
End Sub

Function Search_DB1(ByVal s As Variant, Target As Range) As Boolean
'オープン分岐1.
  Set f = Target.Find(s, , xlValues, xlWhole)
  If f Is Nothing Then
    Search_DB1 = False
    Exit Function
  End If
  If f.EntireRow.Range("D1").Value Like "13.クローズ(終了)" And _
      IsNumeric(f.EntireRow.Range("N1").Value) = False Then
    Search_DB1 = False
  Else
    Search_DB1 = True
  End If
End Function

Function Search_DB2(ByVal s As Variant, Target As Range) As Boolean
'オープン分岐2.
  Set f = Target.Find(s, , xlValues, xlWhole)
  If f Is Nothing Then
    Search_DB2 = False
    Exit Function
  End If
  If f.EntireRow.Range("D1").Value Like "13.クローズ(終了)" And _
      IsDate(f.EntireRow.Range("N1").Value) = True Then
    Search_DB2 = True
  Else
    Search_DB2 = False
  End If
End Function

Function Search_DB3(ByVal s As Variant, Target As Range) As Boolean
'クローズ分岐
  Set f = Target.Find(s, , xlValues, xlWhole)
  If f Is Nothing Then
    Search_DB3 = False
    Exit Function
  End If
  If f.EntireRow.Range("D1").Value Like "13.クローズ(終了)" And _
      IsDate(f.EntireRow.Range("N1").Value) = True Then
    Search_DB3 = True
  Else
    Search_DB3 = False
  End If
End Function

【73296】Re:条件に合うセルの色づけ
回答  ウッシ  - 12/12/18(火) 11:26 -

引用なし
パスワード
   こんにちは

コードは見てないですけど、rの一つ左のセル指定は r.Offset(0, -1) とかです。

【73310】Re:条件に合うセルの色づけ
お礼  tk  - 12/12/19(水) 16:19 -

引用なし
パスワード
   ▼ウッシ さん:
>こんにちは
>
>コードは見てないですけど、rの一つ左のセル指定は r.Offset(0, -1) とかです。

本当にありがとうございました、無事やりたいことが出来ました。

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