Excel VBA質問箱 IV

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

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


2432 / 13646 ツリー ←次へ | 前へ→

【68052】データによってフォントの色を変えたい まさ 11/1/27(木) 21:16 質問[未読]
【68053】Re:データによってフォントの色を変えたい 不明 11/1/27(木) 22:39 質問[未読]
【68054】Re:データによってフォントの色を変えたい まさ 11/1/27(木) 22:58 質問[未読]
【68055】Re:データによってフォントの色を変えたい 不明 11/1/28(金) 7:01 発言[未読]
【68056】Re:データによってフォントの色を変えたい まさ 11/1/28(金) 7:40 発言[未読]
【68057】Re:データによってフォントの色を変えたい 不明 11/1/28(金) 8:38 発言[未読]
【68082】Re:データによってフォントの色を変えたい まさ 11/1/28(金) 21:01 お礼[未読]

【68052】データによってフォントの色を変えたい
質問  まさ  - 11/1/27(木) 21:16 -

引用なし
パスワード
   loopの中にloop、その中にifなど入れたのですが、重すぎるのか、2行目以降
全く処理が進みません。
どなたか教えてください。

1行目は項目が入っています。
2行目以降、A列とL列が同じ項目、H列とM列が同じ項目、J列とN列が同じ項目です。

『A,H,J』が1つのリスト、『L,M,N』が1つのリストで、これを対比させたいのです。

『A,H,J』のリストは多くて1000行くらい、もう1つのリストは3万行くらいまで
増えます。

『L,M,N』のリストを基準に

Nのセルがブランクでなければ
 1) AとHとJ=LとMとN であればN列のセルのフォントを黒にしたい。
 2) AとH=LとM であり J<>NであればN列のセルのフォントを赤にしたい。


Nのセルがブランクであれば
 3) AとH=LとM であればNのセルにJの値を入れたい。


4) Nの値(日付)がJの値より遅ければNのセルのフォントを青にしたい。

上記4つのことをL,M,Nのリストの順序を変えずに行いたいのです。

AとLは品名で、H,J,M,Nは日付です。

何か良い不法があれば是非教えてください。

【68053】Re:データによってフォントの色を変えたい
質問  不明  - 11/1/27(木) 22:39 -

引用なし
パスワード
   ▼まさ さん:
>Nのセルがブランクでなければ
> 1) AとHとJ=LとMとN であればN列のセルのフォントを黒にしたい。
何と何を比較するのか、もう少し正確に書いたほうがいいですね。
AとHとJ=LとMとN というが、どの行のことですかねえ。

【68054】Re:データによってフォントの色を変えたい
質問  まさ  - 11/1/27(木) 22:58 -

引用なし
パスワード
   ▼不明 さん:
>▼まさ さん:
>>Nのセルがブランクでなければ
>> 1) AとHとJ=LとMとN であればN列のセルのフォントを黒にしたい。
>何と何を比較するのか、もう少し正確に書いたほうがいいですね。
>AとHとJ=LとMとN というが、どの行のことですかねえ。

説明不足で申し訳ありません。
A2、A3、A4〜というように、1000行くらいです。(A,H,J全て同じ)
L2,L3,L4〜という感じで3万行くらいです。(L,M,N全て同じ)

例)A2〜J2までが1つの商品のもので、その中のA,H,Jと
  L2〜N2が1つの商品のもので、その中のL,M,Nを比較したいのです。

 | A  |B 〜 G |  H  |I |  J       L  | M  |  N
1 |品名 |    | 希望日 |  | 回答日   と  品名 |希望日 | 回答日
 |
2 |AAA       1/1      1/5       CCC  2/1   2/5
 |
3 |CCC       2/1      2/5       BBB  2/1   2/3


上記のような感じです。

【68055】Re:データによってフォントの色を変えたい
発言  不明  - 11/1/28(金) 7:01 -

引用なし
パスワード
   こういうことですか?
品名、希望日、回答日の3項目からなるリスト1,リスト2がある。

リスト2の各行ごとに以下の操作をしたい。
回答日が記入済みのとき、
 1) リスト1にあるデータと照合し、3項目とも一致するデータがあれば、
   リスト2の回答日のフォントを黒にしたい。
 2) 品名、希望日の2項目が一致するデータはあるが、
   回答日が一致しない場合は、
   リスト2の回答日のフォントを赤にしたい。
回答日が未記入のとき、
 3) 品名、希望日の2項目が一致するリスト1のデータがあれば、
   そのリスト1の回答日をリスト2の回答日に記入したい。

4) そして、Nの値(日付)がJの値より遅ければNのセルのフォントを青にしたい。
これはどういう意味ですか?転記したものなら遅れることはないですし。
2)のさらに場合分けということですか?

Dictionaryを使ったマッチングと言うことだと思いますけど、
まずは正確に問題を示してください。

【68056】Re:データによってフォントの色を変えたい
発言  まさ  - 11/1/28(金) 7:40 -

引用なし
パスワード
   ▼不明 さん:
>こういうことですか?

はい。下記の通りです。
4番目も、2の組み分けと言うことです。
説明が下手で申し訳ありません。
不明者様のおっしゃられている通りの意味になります。
どうぞ宜しくお願い致します。

>品名、希望日、回答日の3項目からなるリスト1,リスト2がある。
>
>リスト2の各行ごとに以下の操作をしたい。
>回答日が記入済みのとき、
> 1) リスト1にあるデータと照合し、3項目とも一致するデータがあれば、
>   リスト2の回答日のフォントを黒にしたい。
> 2) 品名、希望日の2項目が一致するデータはあるが、
>   回答日が一致しない場合は、
>   リスト2の回答日のフォントを赤にしたい。
>回答日が未記入のとき、
> 3) 品名、希望日の2項目が一致するリスト1のデータがあれば、
>   そのリスト1の回答日をリスト2の回答日に記入したい。
>
>4) そして、Nの値(日付)がJの値より遅ければNのセルのフォントを青にしたい。
>これはどういう意味ですか?転記したものなら遅れることはないですし。
>2)のさらに場合分けということですか?
>
>Dictionaryを使ったマッチングと言うことだと思いますけど、
>まずは正確に問題を示してください。

【68057】Re:データによってフォントの色を変えたい
発言  不明  - 11/1/28(金) 8:38 -

引用なし
パスワード
   列はA〜C、D〜F列として書きました。修正してください。
テストしていませんので、動かなければ手入れをしてください。
Dictionaryが不明なら、ネットで検索して学習してください。

Sub Sample()
  Dim dic1 As Object, dic2 As Object
  Dim s1 As String, s2 As String, s As String
  Dim k As Long
  Dim v As String
  
  Set dic1 = CreateObject("Scripting.Dictionary")
  Set dic2 = CreateObject("Scripting.Dictionary")
  
  For k = 2 To Range("A1").End(xlDown).Row
    s1 = Cells(k, 1).Value & vbTab & Cells(k, 2).Value
    s2 = Cells(k, 3).Value
    s = s1 & vbTab & s2
    dic1(s) = Empty
    dic2(s1) = s2
  Next
  
  For k = 2 To Range("D1").End(xlDown).Row
    s1 = Cells(k, 4).Value & vbTab & Cells(k, 5).Value
    s2 = Cells(k, 6).Value
    s = s1 & vbTab & s2
    
    If Not (IsEmpty(s2) Or s2 = "") Then
      If dic1.Exists(s) Then
        Cells(k, 6).Font.ColorIndex = 0 '黒
      Else
        If dic2.Exists(s1) Then
          v = dic2(s1)
          If v >= Cells(k, 6).Value Then
            Cells(k, 6).Font.ColorIndex = 3 '赤
          Else
            Cells(k, 6).Font.ColorIndex = 41 '青
          End If
        End If
      End If
    Else
      If dic2.Exists(s1) Then
        Cells(k, 6).Value = dic2(s1)
      End If
    End If
  Next
End Sub

【68082】Re:データによってフォントの色を変えたい
お礼  まさ  - 11/1/28(金) 21:01 -

引用なし
パスワード
   ありがとうございます。
無事に組み込み、動かすことが出来ました。

dictionaryは現在勉強中ではあるのですが、
まだ良く理解できておりません。
これからも勉強していくつもりです。
大変助かりました。

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