• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Excel_VBA 2列を比較し、同番号行色付け)

Excel_VBA 2列を比較し、同番号行色付け

このQ&Aのポイント
  • Excel_VBAを使用して、2つの列を比較し、同じ番号の行に色を付けたいと考えています。
  • 色付けする際には、特定の条件を満たす行に特定の色を付けたいです。
  • また、最新の日付の行にある特定のコードと同じコードの行にも色を付けたいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.5

 それで、 >実は1行目のタイトル行は、異なる2つのデータを、アクセスファイルで吐き出す人によって(処理のアクセスファイルが複数ある)、SQLやクエリーで名称を変えて出している場合があるので(複数データ処理アクセスファイルあり、それぞれ過去につくった人が異なる)名称が一定しません。 という事は、御質問の例における「マッチ」、「コード」、「日付」、「販売額A」、「販売額B」、「ステータス」に対応する、項目名が別のファイルでは何という項目名になっているのかは不明ということになりますし、 >販売額の列はご推測のとおり吐き出されてくるデータシートによって異なるのですが という事は、御質問の例における「マッチ」、「コード」、「日付」、「販売額A」、「販売額B」、「ステータス」に対応するデータが、別のファイルでは異なる列に入力されているという事になりますので、項目名も列番号も不明である以上、上記の各項目に対応するデータがどの列に入力されているのかという事を、パソコンという機械に自動的に見分けさせる事は不可能な事という事になります。  しかしそうなりますと、色分けを開始する前に、御質問の例における「マッチ」、「コード」、「日付」、「販売額A」、「販売額B」、「ステータス」に対応するデータがそれぞれどの列に入力されているのかを、一々手動で指定してやるか、或は、元データとするためのExcelBook上での列を、御質問の画像の例と同様の列になる様に並べ替えてから本件のVBAでの処理を行うかのどちらかになるかと思われますが、どちらの場合であっても結構面倒な事ではないでしょうか?  一応、マクロを起動させた際に、最初にInputBoxメソッドを使って、処理に必要となる各データがそれぞれどの列に入力されているのかという事を指定する事が出来る様なVBAとする事もおそらく可能だと思われますが、その様にした方が宜しいのでしょうか?  後それから、 >同じコードの最終行(ここでは4や8)が最新の日付であるデータの吐き出し方は決まっている(動かない)ため、わたしの添付画像のような色付け(それぞれのコードの「最新日の行を1行だけ」)黄色ではない色にして目立たせたかったのでした。 という事は、もしかしますと、(同じコードのデータの中で2つの販売額が一致しているものが1つでも存在しているという条件を満たしている場合には、)万が一、その「同じコードの中での最終行」のデータが2つの販売額が一致していなかったり、同じコードのデータの中で日付が最新のものでなかったりした場合であっても、兎に角「同じコードの中での最終行」でさえあればその1行のみに別な色を付ければ良いという事なのでしょうか?

ketae
質問者

お礼

ありがとうございます。 この質問スレ自体は、CSVデータをExcelで起動した際に、見栄えとして決まった行に色をつけるというだけのものでした。 Excelではデータ(数値)を管理をしておらず、DBからCSVが吐き出されるだけで、ここではデータの確からしさよりも、目的の行の列に色をつけたいというだけでした。 ただ、データ(NOの判定フラグ)のたしからしさについては、人間の目には醜いため、ここは該当部署にリクエストを出してDBチームに今後改善してもらう予定です。 ちょっとやりたいことから幅が増えてしまったため、一度整理してまた質問をたてたいと思います。 いつもお世話になります。 (なお、画像の文字は企業コンプライアンスの関係で常にダミー(意味はない)と思っていただいたほうがよく、列、行などで処理対象をいじっていくのがたぶん大企業で複数のAccess担当者がいるようなところでは、統一ができておあらず、ほかの事務員はExcelしかもっていあにので、Excelではデータを表示して簡単な計算式を入れておわりです。Excelでデータの確からしさをみつけても、DBチームが改修しないなら意味がない)

その他の回答 (4)

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.4

>A列の3の行(Excelでいう4行目)でいうと、D列「-29600」とH列「29600」は異なるのに、青い色がつくようです。ただ青や赤の色付けの判断はここではないようです。  申し訳御座いません。  意図したものではなかったのですが、 >F列の日付は、9/25が2行あるため、ここで判断しているようです というVBAになってしまっておりました。  取り急ぎ、D列とH列の値が異なっていても赤や青や緑の色が付くという点だけは解消したVBAを御伝えしておきます。  但し、これに関しましても、日付が最終日でD列とH列の値が同じになっている行が複数ある場合には、色変わりの行が複数生じてしまいます。 Sub QNo924060_Excel_VBA_2列を比較し同番号行色付け() Const CodeName = "コード" '「コード」を入力する列の項目名 Const DateName = "日付け" '「日付け」を入力する列の項目名 Const FlagName = "ステータス" '「フラグ」を入力する列の項目名 Const MoneyName1 = "販売額A" '「金額その1」を入力する列の項目名 Const MoneyName2 = "販売額B" '「金額その2」を入力する列の項目名 Const MatchName = "マッチ" '「金額その1」と「金額その2」が異なっている場合に「NO」を入力する列の項目名 Const Flag0 = "NO" '「金額その1」と「金額その2」が異なっている場合に「マッチ」の列に入力されている値 Const Flag1 = "good" '「フラグ」(ステータス)を入力する列に入力されているフラグ用の文字列その1(半角小文字) Const Flag2 = "bad" '「フラグ」(ステータス)を入力する列に入力されているフラグ用の文字列その2(半角小文字) Dim ItemRow As Long, LastRow As Long, FirstColumn As Long, LastColumn As Long _ , CodeColumn As Long, DateColumn As Long, FlagColumn As Long _ , MoneyColumn1 As Long, MoneyColumn2 As Long, MatchColumn As Long _ , myColor As Long, i As Long, tempArray As Variant, buf As Variant For i = 1 To 9 If WorksheetFunction.CountIf(Columns(i), "*?") > 0 Then buf = WorksheetFunction.Match("*?", Columns(i), 0) If buf > ItemRow Then ItemRow = buf End If Next i If ItemRow = 0 Then MsgBox "項目名が入力されている行を見つける事が出来ませんでした。" _ & vbCrLf & "マクロを終了します。", vbExclamation, "項目欄不明" Exit Sub End If tempArray = Array(CodeName, DateName, FlagName, MoneyName1, MoneyName2, MatchName) For i = 0 To 5 If WorksheetFunction.CountIf(Rows(ItemRow), tempArray(i)) = 0 Then MsgBox "「" & tempArray(i) & "」という項目名が入力されている列が見つかりません。" _ & vbCrLf & "マクロを終了します。", vbExclamation, "項目列不明" Exit Sub Else buf = WorksheetFunction.Match(tempArray(i), Rows(ItemRow), 0) Select Case i Case 0 CodeColumn = buf Case 1 DateColumn = buf Case 2 FlagColumn = buf Case 3 MoneyColumn1 = buf Case 4 MoneyColumn2 = buf Case 5 MatchColumn = buf End Select End If Next i FirstColumn = WorksheetFunction.Match("*?", Rows(ItemRow), 0) LastColumn = Cells(ItemRow, Columns.Count).End(xlToLeft).column LastRow = Cells(Rows.Count, CodeColumn).End(xlUp).row If LastRow <= ItemRow Then MsgBox "処理すべきデータが見当たりませんません。" & vbCrLf _ & "マクロを終了します。", vbExclamation, "データ無し" Exit Sub End If Application.ScreenUpdating = False For i = ItemRow + 1 To LastRow If Cells(i, CodeColumn).Value <> "" _ And TypeName(Cells(i, DateColumn).Value) = "Date" _ And TypeName(Cells(i, MoneyColumn1).Value) = "Double" _ And TypeName(Cells(i, MoneyColumn2).Value) = "Double" Then If Cells(i, MoneyColumn1).Value = Cells(i, MoneyColumn2).Value Then If Cells(i, MatchColumn).Value = Flag0 Then Cells(i, MatchColumn).ClearContents ElseIf Cells(i, MatchColumn).Value <> Flag0 Then Cells(i, MatchColumn).Value = Flag0 End If End If Next i For i = ItemRow + 1 To LastRow myColor = RGB(255, 255, 128) If Cells(i, CodeColumn).Value <> "" Then If WorksheetFunction.CountIfs(Columns(MatchColumn), "<>" & Flag0 _ , Columns(CodeColumn), Cells(i, CodeColumn).Value _ , Columns(MoneyColumn1), "<" & 9E+307 _ , Columns(MoneyColumn2), "<" & 9E+307 _ , Columns(DateColumn), "<9999/12/31") > 0 Then If Cells(i, MatchColumn).Value <> Flag0 _ And TypeName(Cells(i, DateColumn).Value) = "Date" _ And TypeName(Cells(i, MoneyColumn1).Value) = "Double" _ And TypeName(Cells(i, MoneyColumn2).Value) = "Double" _ And WorksheetFunction.CountIfs(Columns(MatchColumn), "<>" & Flag0 _ , Columns(CodeColumn), Cells(i, CodeColumn).Value _ , Columns(DateColumn), ">" & Cells(i, DateColumn).Value) = 0 Then Select Case StrConv(Cells(i, FlagColumn).Value, vbLowerCase + vbNarrow) Case Flag1 myColor = RGB(128, 128, 255) Case Flag2 myColor = RGB(255, 128, 128) Case Else myColor = RGB(128, 255, 128) End Select End If With Range(Cells(i, FirstColumn), Cells(i, LastColumn)).Interior .Pattern = xlSolid .PatternColorIndex = xlAutomatic .Color = myColor .TintAndShade = 0 .PatternTintAndShade = 0 End With End If End If Next i Application.ScreenUpdating = True End Sub

ketae
質問者

お礼

ありがとうございます。助かります。

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.3

 尚、C列の「コード」が同じで、尚且つ2販売額の数字が合致しているものの中で、F列の日付けが最新の日付となっている行の「ステータス」の項目が、もしも「GOOD」でもなければ「BAD」でも無かった場合には、取り敢えず薄い緑色を付ける様にしております。  又、「マッチ」の項目にNOが入力されているか否かというデータを色付けの判定基準の一部に利用している都合で、もしも「コード」、「販売額A」、「日付け」、「販売額B」の各項目が入力されている行で、「マッチ」の項目が間違っている場合には、先にその間違いを自動的に修正してから、色付けを行う様になっております。(「コード」、「販売額A」、「日付け」、「販売額B」の各項目が正しく入力されていない行は無視します)

ketae
質問者

補足

追加での補足ありがとうございます。わたしも気がついたので補足いたします。 B列の「NO」はたしかに意味的にはD列とH列の不一致の意味で合致はしていますが、これはアクセスのテーブル表示上でそれを示しているだけで、ここを見ているのはアクセスを使う人達です。 Excelでの質問をたてていますが、実はこのデータは最初CSVデータでとどくので、単なる文字の「NO」入っているだけで計算式はB列にはまったく入っていません。というか、CSVなのですべてのセルに計算式は入っていません。

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.2

 回答No.1です。  一応、項目名が画像の通りのものとなっていて、 表がH列よりも左にある列から始まっている場合で、 尚且つ、表の左端の列よりも左にある列で表の項目名欄よりも下になる行には文字列が入力されているセルが存在していない場合には、 項目名が入力されている行の行番号や、 「マッチ」、「コード」、「販売額A」、「日付け」、「販売額B」、「ステータス」の項目がどの列に入力されているのか という事を自動的に検出して行の色分けを行う様なVBAのマクロになっておりますので、御確認願います。 Sub QNo924060_Excel_VBA_2列を比較し同番号行色付け() Const CodeName = "コード" '「コード」を入力する列の項目名 Const DateName = "日付け" '「日付け」を入力する列の項目名 Const FlagName = "ステータス" '「フラグ」を入力する列の項目名 Const MoneyName1 = "販売額A" '「金額その1」を入力する列の項目名 Const MoneyName2 = "販売額B" '「金額その2」を入力する列の項目名 Const MatchName = "マッチ" '「金額その1」と「金額その2」が異なっている場合に「NO」を入力する列の項目名 Const Flag0 = "NO" '「金額その1」と「金額その2」が異なっている場合に「マッチ」の列に入力されている値 Const Flag1 = "good" '「フラグ」(ステータス)を入力する列に入力されているフラグ用の文字列その1(半角小文字) Const Flag2 = "bad" '「フラグ」(ステータス)を入力する列に入力されているフラグ用の文字列その2(半角小文字) Dim ItemRow As Long, LastRow As Long, FirstColumn As Long, LastColumn As Long _ , CodeColumn As Long, DateColumn As Long, FlagColumn As Long _ , MoneyColumn1 As Long, MoneyColumn2 As Long, MatchColumn As Long _ , myColor As Long, i As Long, tempArray As Variant, buf As Variant For i = 1 To 9 If WorksheetFunction.CountIf(Columns(i), "*?") > 0 Then buf = WorksheetFunction.Match("*?", Columns(i), 0) If buf > ItemRow Then ItemRow = buf End If Next i If ItemRow = 0 Then MsgBox "項目名が入力されている行を見つける事が出来ませんでした。" _ & vbCrLf & "マクロを終了します。", vbExclamation, "項目欄不明" Exit Sub End If tempArray = Array(CodeName, DateName, FlagName, MoneyName1, MoneyName2, MatchName) For i = 0 To 5 If WorksheetFunction.CountIf(Rows(ItemRow), tempArray(i)) = 0 Then MsgBox "「" & tempArray(i) & "」という項目名が入力されている列が見つかりません。" _ & vbCrLf & "マクロを終了します。", vbExclamation, "項目列不明" Exit Sub Else buf = WorksheetFunction.Match(tempArray(i), Rows(ItemRow), 0) Select Case i Case 0 CodeColumn = buf Case 1 DateColumn = buf Case 2 FlagColumn = buf Case 3 MoneyColumn1 = buf Case 4 MoneyColumn2 = buf Case 5 MatchColumn = buf End Select End If Next i FirstColumn = WorksheetFunction.Match("*?", Rows(ItemRow), 0) LastColumn = Cells(ItemRow, Columns.Count).End(xlToLeft).column LastRow = Cells(Rows.Count, CodeColumn).End(xlUp).row If LastRow <= ItemRow Then MsgBox "処理すべきデータが見当たりませんません。" & vbCrLf _ & "マクロを終了します。", vbExclamation, "データ無し" Exit Sub End If Application.ScreenUpdating = False For i = ItemRow + 1 To LastRow If Cells(i, CodeColumn).Value <> "" _ And TypeName(Cells(i, DateColumn).Value) = "Date" _ And TypeName(Cells(i, MoneyColumn1).Value) = "Double" _ And TypeName(Cells(i, MoneyColumn2).Value) = "Double" Then If Cells(i, MoneyColumn1).Value = Cells(i, MoneyColumn2).Value Then If Cells(i, MatchColumn).Value = Flag0 Then Cells(i, MatchColumn).ClearContents ElseIf Cells(i, MatchColumn).Value <> Flag0 Then Cells(i, MatchColumn).Value = Flag0 End If End If Next i For i = ItemRow + 1 To LastRow myColor = RGB(255, 255, 128) If Cells(i, CodeColumn).Value <> "" Then If WorksheetFunction.CountIfs(Columns(MatchColumn), "<>" & Flag0 _ , Columns(CodeColumn), Cells(i, CodeColumn).Value _ , Columns(MoneyColumn1), "<" & 9E+307 _ , Columns(MoneyColumn2), "<" & 9E+307 _ , Columns(DateColumn), "<9999/12/31") > 0 Then If TypeName(Cells(i, DateColumn).Value) = "Date" And _ WorksheetFunction.CountIfs(Columns(MatchColumn), "<>" & Flag0 _ , Columns(CodeColumn), Cells(i, CodeColumn).Value _ , Columns(DateColumn), ">" & Cells(i, DateColumn).Value) = 0 Then Select Case StrConv(Cells(i, FlagColumn).Value, vbLowerCase + vbNarrow) Case Flag1 myColor = RGB(128, 128, 255) Case Flag2 myColor = RGB(255, 128, 128) Case Else myColor = RGB(128, 255, 128) End Select End If With Range(Cells(i, FirstColumn), Cells(i, LastColumn)).Interior .Pattern = xlSolid .PatternColorIndex = xlAutomatic .Color = myColor .TintAndShade = 0 .PatternTintAndShade = 0 End With End If End If Next i Application.ScreenUpdating = True End Sub

ketae
質問者

お礼

実際にコードを動かしてみて気が付きましたが、D列とH列の数字が絶対値で同じとみているようです。 A列の3の行(Excelでいう4行目)でいうと、D列「-29600」とH列「29600」は異なるのに、青い色がつくようです。ただ青や赤の色付けの判断はここではないようです。 で、F列の日付は、9/25が2行あるため、ここで判断しているようです、2つの9/25を A列が3の行(Excelでいう4行目)の日付け(F列)を9/25 A列が4の行(Excelでいう5行目)の日付け(F列)を9/26 にすると、A列が4の行だけ色がつきます。 ただ日付けは吐き出す側でなんらかの別の処理で必要なために、同じ日付けが2行ならぶことがあるので、DとHの列の数字が同じであることの判定がまず先に必要と思いました。

ketae
質問者

補足

ありがとうございます。 実は1行目のタイトル行は、異なる2つのデータを、アクセスファイルで吐き出す人によって(処理のアクセスファイルが複数ある)、SQLやクエリーで名称を変えて出している場合があるので(複数データ処理アクセスファイルあり、それぞれ過去につくった人が異なる)名称が一定しません。ただ読めば、ターゲットの項目であることは、わたしは理解しています。 (わたしはアクセスファイルを修正する権限がありません) このためこのExcelにおいては >現状では、D列とH列の比較という形で図をつくりました。 >画像に写っている列で、考えていただいてけっこうです。 と「列」で探す方向にこだわって考えていました。 あと説明が足りなかったのでが、たとえばA列で「1、2、3、4」も「」5、6、7、8」はC列でどちらも同じ商品コードですが、上から下方向に見るとき、同じコードの最終行(ここでは4や8)が最新の日付であるデータの吐き出し方は決まっている(動かない)ため、わたしの添付画像のような色付け(それぞれのコードの「最新日の行を1行だけ」)黄色ではない色にして目立たせたかったのでした。 現状いただいたVBAのプログラムでは、3、4が同じ色、7、8が同じ色、と2行づつ同じ色がつくようです。 ステータス列もGOODとBAD以外の文字や空欄はなく、かならずGOODかBADが入っています。 ともあれ、ヒントをいただいたので、(急ぎではないので)わたしも今週考えてみます。 質問は開けておきますので、行き詰まったらまた質問させていただくと思います。いつもお世話になりっぱなしで、ありがとうございます。

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.1

 御質問文にある色分けの条件の説明と、画像に写っている色分けの状況が一致していない様に見えます。  そのため、このままでは質問者様が何をやりたがっておられるのかが解りませんので、何故画像の様な色分けになっているのかを御説明願います。  また、質問文に書かれている御説明内容だけでは、質問者様の御要望を実現するために必要となる情報が不足しておりますので、それも併せて御補足して頂く様御願いします。 >1.「D」と「H」列(つまり2販売額)の数字が合致している列をみつけること との事ですが、A列の「番号」が2と6の行も2販売額の数字が合致しているにもかかわらず、特に他と異なる色が付けられている訳ではないのは何故なのですか?  もしかしますと、条件1、条件2、条件3を同時に満たしている行のみGOODは青系の色をつけたい、BADは赤系の色をセルにつけたいという事なのでしょうか?  しかしそうだとすると、2販売額の数字が合致していて、ステータスがGOODとなっているものの内で、日付が最新となっている行はA列の「番号」が6の行であるのにもかかわらず、「番号」が6の行には特に他と異なる色が付けられている訳ではなく、日付が最新ではない「番号」が4の行に色が着いているのは何故なのですか?  もしかしますと、C列のコードが同じものの中で条件1と条件2を同時に満たしている行を探し出して、その行に対してのみ条件3に従った色分けを行うという事なのでしょうか? (C列のコードが同じものの中で条件1を満たしている行で、ステータスがGOODとなっているものとBADとなっているものが両方ある場合でも、例えばBADの方がGOODよりも日付が新しければ、BADの方のもの1行のみに色を付け、GOODの方の行には色を付けない) >4. その最新日付けの行にあるコードと同じ「コード」(C列)を探して、同じなら黄色系の色をつけたい。 との事ですが、C列のコードが同じものの中で条件1を満たしている行が存在していないコードの行に関しては何も色を付けない方が良いと考えれば宜しいのでしょうか? >・黄色をつける行のデータの法則は不明(重要ではないので気にしていない) とは、どういう事なのでしょうか?  「C列のコードが同じものの中で条件1を満たしている行が存在している場合にのみ黄色を付ける」のではないという事なのですか?  法則が不明なのでは色を黄色を付ける行と付けない行を区別する事が出来ませんので、どの様な条件を満たしている行に対してのみ黄色を付けるのかを御説明願います。 >・横幅(色をつける列の右端までの項目数[列数])は吐き出さされるExcelシートによってばらばら。 というだけではどこまで色を付ける様にすれば良いのか判りません。  「番号」~「ステータス」等の各項目名が入力されて行において、何らかの値が入力されている最終列の所まで色を付ければ宜しいのでしょうか?  そうなりますと、項目名が入力されている行が何行目になっているのかが判らなければ、項目名が入力されている最終列を求める事が出来ないという事になりますが、各項目名が入力されている行は、画像に写っている例と同様に、必ず1行目が項目名の行になっているのでしょうか?  それとも項目名が入力されている行の行番号すらも未定で、それすらも自動で見つけ出せという事なのでしょうか?  また、色を付け始めるもっとも左端の列は必ずA列からであると考えておけば宜しいのでしょうか?  それとも項目名が入力されている最初の列すらも未定で、それすらも自動で見つけ出せという事なのでしょうか?  もし、「項目名が入力されている行が何行目になっているのか」という事と「項目名が入力されている最初の列」という事の両方を自動的に検出しなければならない場合において、「表の中で最も右端の列よりも更に右にある列」の中に、「項目名が入力されている行よりも下の行」に文字列データが入力されているセルがもしも存在している場合には、自動的に検出する事が困難になりますが、表よりも右の列で尚且つ「項目名が入力されている行よりも下の行」のセルに文字列データが入力されていない事は保障されているのでしょうか? >ステータス行は右端とは限らない >つまり右端をステータス列とみなすと誤動作する。 との事ですが、ステータス列の列番号すら自動で検出せよという事なのでしょうか?  そうしますと、ステータス列の項目名を基準にして検出するより他にはありませんが、ステータス列の項目名は必ず「ステータス」となっている事が保障されているのでしょうか?  また、各行のデータが御質問の条件を満たしているのか否かを判定するためには、「ステータス列」以外にも、「コード」、「販売額A」、「日付け」、「販売額B」が入力されている列が何列であるのかという情報(列番号の情報)も必要不可欠ですが、これらの列は画像に写っている通りの列に固定されているのでしょうか?  もし、それすらも固定ではなく、自動的に列番号を検出しなければならないとしますと、「ステータス」の場合と同様に、各項目名を基準にして検出するより他にはありませんが、各列の項目名は必ず画像に写っている項目名通りのものとなっている事が保障されているのでしょうか?  兎に角、列や行等に関して不明な点が多過ぎますので、最低限、上記の補足要求程度の事は明確にして頂かなければ、情報不足で回答する事が出来ません。  また、当然の事ながら、上記の補足要求に対する質問者様の御返答内容の状況次第では、更に確認しなければならない点が増える恐れもありますし、場合によっては質問者様の御要望を実現する事が不可能である事が明らかとなる恐れもあります。

ketae
質問者

お礼

回答し忘れてました。 >「ステータス列」以外にも、「コード」、「販売額A」、「日付け」、「販売額B」が入力されている列が何列であるのかという情報(列番号の情報)も必要不可欠ですが、 画像に写っている列で、考えていただいてけっこうです。 よろしくお願いします。

ketae
質問者

補足

お世話になります。 「A列の「番号」が2と6の行も2販売額の数字が合致しているにもかかわらず」 のところですが、「F」列をみるとここの行の日付けより後ろ(最新)の日付けが存在するため、最新日付けの4と8の行を、GOODとBADの処理対象にしております。 最新行を見るだけなら、フィルタリングをすればいいのですが、別の人間がデータベースがから吐き出された履歴をみたいとき、最新日付けではない行があることが視覚的にわかるように黄色をつけています。 コードとは画像の横幅が小さくなるので省きましたが、商品コードと考えていただければと思います。 「商品コード1158で、DとH列が合致し、F列の日付けが最新のもの」が4です。 「商品コード2034で、DとH列が合致し、F列の日付けが最新のもの」が8です。 やりたいことは 「DとH列が合致し、F列の日付けが最新のものを見つけて、右端(下記参照)まで色をつける」…★(1) ここまでができれば実は視覚的にはとっても助かるののです。 「その行の商品コードと同じ商品コードの行に別の色(ここでは黄色)をつける」…★(2) ここにステータスという列(K列)がまだあるので、GOODかBADかで色分け (ここでは薄いブルーかピンク)できたら…★(3) と考えました。 なおステータス(K列)のGOODとBADは、その左(J列以左)のデータがいいとか悪いとかの意味はなく(関係なく)、単なるフラグです。AとB、0と1でもなんでもいいのですが、AとBや0と1だと視覚上紛らわしいので、とりあえず説明しやすくGOODとBADにしただけです。データのステータスではなく、別のデータベースから各行につけられたフラグです。 >C列のコードが同じものの中で条件1を満たしている行が存在している場合にのみ黄色を付ける はい、C列のコードで上の文章中の★(1)と同じコードをもつ行に黄色をつけたいのです。★(1)行とは別の色で色分けをしたいという言い方が正しいでしょうか。 「右端」(横幅)や「行」数については 最終行はA列でEnd(xlUp) 右端の列は1行目でxlToLeft).Column でみつかるデータがぎっしり埋まったデータです。 A列(縦方向)と1行目(横方向)の途中に空白セルはありません。 販売額の列はご推測のとおり吐き出されてくるデータシートによって異なるのですが、現状は(わたしではないDB担当者が)過去にいろんな人がつくったいろんなAcessを用い、比較したい列をAceess上でフィールドをクエリで(「販売額」など[フィール名]がクエリデザイン画面に文字(日本語)で表示されるので)、同じフィールド同士をマウスで紐付けて吐き出しているようです。 そのデータがExcelに吐き出された形でわたしのところにくるのですが、Excelではフィールド名で紐付けできないので、吐き出されたデータの列が違うものが手元にきた場合、自分でVBAエディターで、列の変数(または定数)を修正することになると思います。 現状では、D列とH列の比較という形で図をつくりました。 上の「★(1)」ができるだけでもうれしいのですが。 以上よろしくお願いします。 補足が必要なことがありましたが、またご質問ください。 PS:データ抽出だけならExcelの機能でできるのですが、プレゼン資料用にスクリーンショットを撮る人たちが手作業で毎回違う色をつけているので、統一してしまいたいなと思っています。

関連するQ&A