2017-07-10 9 views
1

特定の行が完了したことを示すハイライト表示処理を自動化しようとしています。このプロセスはうまくいきますが、私のシートの冒頭では、シートの色の異なる意味を示すためのコードを「キー」にするようにしています。キーでは、白、緑、赤の色は、未完了(白)、完了(緑)、エラー/不完全(赤)のラベルとして使用されます。グレーはプライベートパイプにも使用されます。私は対応するラベルを色で塗りつぶそうとしています、緑は緑、赤は赤などです。これは最初の行で動作するコードを作成しましたが、緑では "緑"セルが緑色になりませんそれは白を残す)、そして "赤"上ではセルを緑色に着色する。セルの色を設定したExcel 2010 VBA

Sub SmartHighlight() 
Dim Counter As Integer 
Dim i As Integer 
Dim j As Integer 
Dim k As Range 
Dim Chkr As Integer 
Chkr = 0 
xTitleId = "Smart Highlighter" 
MsgBox "This macro analyzes the given pipe data to highlight completed sections." 
For Each k In ActiveSheet.UsedRange.Rows 
    Counter = 0 
    i = 8 
    For j = 0 To 3 
     If ActiveSheet.Cells(k.Row, i).Value = 0 Then 
      Counter = Counter + 1 
     End If 
     i = i + 1 
    Next j 
    If ActiveSheet.Cells(k.Row, 1) = "PIPE_ID" Then 
     ActiveSheet.Cells(k.Row, 15).Value = "KEY:" 
     ActiveSheet.Cells(k.Row, 16).Value = "White" 
     ActiveSheet.Cells(k.Row, 17).Value = "Not yet completed." 
     ActiveSheet.Cells(k.Row, 18).Value = "Grey" 
     k.Cells(k.Row, 18).Interior.ColorIndex = 15 
     ActiveSheet.Cells(k.Row, 19).Value = "Private." 
    ElseIf ActiveSheet.Cells(k.Row, 1) = "" And Chkr = 0 Then 
     ActiveSheet.Cells(k.Row, 16).Value = "Green" 
     k.Cells(k.Row, 16).Interior.ColorIndex = 4 
     ActiveSheet.Cells(k.Row, 17).Value = "Completed." 
     Chkr = Chkr + 1 
    ElseIf ActiveSheet.Cells(k.Row, 1) = "" And Chkr = 1 Then 
     ActiveSheet.Cells(k.Row, 16).Value = "Red" 
     k.Cells(k.Row, 16).Interior.ColorIndex = 3 
     ActiveSheet.Cells(k.Row, 17).Value = "Error/Incomplete." 
    ElseIf ActiveSheet.Cells(k.Row, 4) = "PRIVATE PIPE" Then 
     k.EntireRow.Interior.ColorIndex = 15 
    ElseIf Counter <> 4 Then 
     k.EntireRow.Interior.ColorIndex = 4 
    ElseIf Counter = 4 And ActiveSheet.Cells(k.Row, 14) = "" Then 
     k.EntireRow.Interior.ColorIndex = 3 
    End If 
Next k 



End Sub 

そして、ここでは、Excelで出力されます: Click for Image

誰も私には着色を修正することができた場合はここで私は(私はコーディングに新しいですと、それは悪い謝罪)を使用していたコードですエラーが最も高く評価されます。ありがとう!

+0

*このアプリケーションでは条件付き書式設定*が簡単かもしれません... –

+0

応答ありがとうございました!Trauger!私は残念なことに、他のシートでこのマクロを再利用しようとしています。なぜVBAで書くのですか?私が知っていることから、条件付き書式を他のすべてのシート(それはかなり多くあります)に自動的に引き継ぐ方法はありません。最終的に私はリボンバーにこのマクロをリンクしようとしていますので、一度クリックして次へ進むことができます。 – dashton

答えて

2

ActiveSheet.Cellsk.Cellsを切り替える理由は不明ですか?

ActiveSheet.Cells(k.Row, 18).Value = "Grey" 
    k.Cells(k.Row, 18).Interior.ColorIndex = 15 

コードでは、範囲kはシートのデータの1行を表します。 Cells()を使用してその範囲内の単一のセルへの参照を取得できますが、正しいインデックスを使用するように注意する必要があります。そうしないと、kの一部でもないセルになります。例えば

、kはあなたのシート上に4行に設定されている場合:

k.Cells(4).Address() 

はD4であるが、

k.Cells(k.Row,4).Address() 'same as k.Cells(4, 4).Address() 

はないD4

k.Cells(1, 4).Address() 

D7、ありますD4になります。

+0

これはうまくいった!ありがとうございました。これは恥ずかしいですが、正確にk(またはkとActiveSheetの違い)が自分のコードに含まれているかどうかを理解することができません。 – dashton

+0

私の答えが少し更新されました。 –

+0

パーフェクト!ありがとうございました。 – dashton

0

私はマクロを実行すると、より静的な情報をヘッダー/キーなどを更新するサブプロシージャを作成することを提案します。

Sub PrepareHeaders(szSheetName) 
Sheets(szSheetName).Cells(iRow + 1, iCel) = "Add/Update" 
Select Case szSheetName 
    Case "Value Lists" 
     Sheets(szSheetName).Cells(iRow + 1, iCel + 1) = "Object Type Name Singular" 
     Sheets(szSheetName).Cells(iRow + 1, iCel + 2) = "Object Type Name Plural" 
     Sheets(szSheetName).Cells(iRow + 1, iCel + 3) = "ID" 
     Sheets(szSheetName).Cells(iRow + 1, iCel + 4) = "Real Object" 
     Sheets(szSheetName).Cells(iRow + 1, iCel + 5) = "Owner Type ID" 
     Sheets(szSheetName).Cells(iRow + 1, iCel + 6) = "Aliases" 
    End Select 
    Sheets(szSheetName).Rows(iRow + 1).Font.Bold = True 
    Sheets(szSheetName).Columns("A:Z").EntireColumn.AutoFit 
    Sheets(szSheetName).Cells(1, iCel).Select 
End Sub 

また、あなたがあなたのExcelシートでスタイルを使用することができます。これは私が1つのエクセルのマクロガジェット、ヘッダー行を描画するサブの部分にやってしまったものです

。これらのスタイルはVBAから呼び出すことができ、カラースキームなどを変更する必要がある場合は、スタイルを変更してスプレッドシート全体にフォーマットを適用できます。

Sheets(szSheetName).Cells(iRow + 1, iCel + 5).Style = "Input" 

もう1つの良いことは、入力に合わせて最後に特定のセルを選択することです。

Sheets(szSheetName).Columns("A:Z").EntireColumn.AutoFit 
Sheets(szSheetName).Cells(1, iCel).Select 

さらにもう1つ、条件付き書式設定が必要な場合があります。それは、使用する1つの追加機能を提供するかもしれません。

関連する問題