2016-08-10 7 views
0

このマクロのループ検索は「 W 」列の値NULLを見つけ、それが色でNULLで見つかった行を描くことになっています。しかし、同じ列(私がそこに存在することが分かっている)の数値を検索しようとすると値が見つからないようです。どんな助けもありがとう。のExcel VBA - その値の色行

Sub e() 

MsgBox "some question?", , "Marvin The Paranoid Android" 

Dim fNameAndPath As Variant, wb As Workbook 
Dim LastRow As Long, i As Long, sht As Worksheet 
Dim myValue As Variant 

fNameAndPath = Application.GetOpenFilename(FileFilter:="Excel Files (*.XLSX), *.XLSX", Title:="Èçáåðåòå ôàéë ñ èìå /Ðåâîëâèíãè/") 
If fNameAndPath = False Then Exit Sub 

Set wb = Workbooks.Open(fNameAndPath) 
Set sht = wb.Worksheets("Sheet1") 
X = wb.Name 

Windows(X).Activate 

'Macro optimization 
Application.ScreenUpdating = False 
Application.EnableEvents = False 
Application.DisplayAlerts = False 
Application.Calculation = xlCalculationManual 
'000000000 
ActiveWindow.Zoom = 85 
Rows("1:1").Select 
With Selection 
    .HorizontalAlignment = xlCenter 
    .VerticalAlignment = xlCenter 
    .WrapText = True 
    .Orientation = 0 
    .AddIndent = False 
    .IndentLevel = 0 
    .ShrinkToFit = False 
    .ReadingOrder = xlContext 
    .MergeCells = False 
End With 
Range("A1:W1").Select 
With Selection.Interior 
    .Pattern = xlSolid 
    .PatternColorIndex = xlAutomatic 
    .color = 65535 
    .TintAndShade = 0 
    .PatternTintAndShade = 0 
End With 
Range("A:E,L:N").EntireColumn.AutoFit 
Columns("F:F").ColumnWidth = 6.14 
Columns("G:G").ColumnWidth = 6.43 
Columns("H:K").ColumnWidth = 5.43 
Range("O:R,T:V").ColumnWidth = 4.71 
Columns("S:S").ColumnWidth = 14.71 
Rows("1:1").RowHeight = 54.54 
Range("A1").Select 

myValue = InputBox("Give me some input") 

LastRow = sht.Cells(sht.Rows.Count, "W").End(xlUp).row 

For r = 1 To LastRow 
    If Cells(r, Columns("W").Column).Value = myValue Then 
     Rows(r).Select 
     With Selection.Interior 
      .Pattern = xlSolid 
      .PatternColorIndex = xlAutomatic 
      .color = 65535 
      .TintAndShade = 0 
      .PatternTintAndShade = 0 
     End With 
    End If 
Next r 

Range("A1").Select 
Application.Calculation = xlCalculationAutomatic 

wb.Close SaveChanges:=True 'or false 

'Reverse macro optimization 
Application.EnableEvents = True 
Application.ScreenUpdating = True 
Application.DisplayAlerts = True 

MsgBox "Îáðàáîòèõ ôàéë /Ðåâîëâèíãè/...", , "Marvin The Paranoid Android" 

End Sub 
+0

ブックに複数のシートがありますか? 'Windows(X).Activate'はブックをアクティブにします。 – Brian

+0

すべてのマクロを含み、すべてのマクロが実行されるブックAがあります。 Windows(X)は、マクロがその魔法を実行する第2のワークブックです(たとえば、ワークブックB)。ワークブックBには1枚しかありません – Shakdun

+0

まだExcel VBAには新しいものがありますが、Imは「完全にラインを修飾する」という意味を完全には理解していません。 – Shakdun

答えて

0

Autofilter()メソッドは、両方の番号として「23」を検出することができますし、テキスト:

With sht 
    With .Range("W1", .Cells(.Rows.Count, "W").End(xlUp)) '<--| consider column "W" values down to its last non empty row 
     .AutoFilter field:=1, Criteria1:=myValue '<--| filter column "W" on 'myValue' 
     If Application.WorksheetFunction.Subtotal(103, .Cells) > 1 Then '<--| if any values match... 
      With .Offset(1).Resize(.Rows.Count - 1).SpecialCells(xlCellTypeVisible).Interior '<--|... consider only filtered values, and apply formatting 
       .Pattern = xlSolid 
       .PatternColorIndex = xlAutomatic 
       .Color = 65535 
       .TintAndShade = 0 
       .PatternTintAndShade = 0 
      End With 
     End If 
    End With 
    .ShowAllData '<--| show all rows back... 
End With 
+0

は素晴らしい作品です!ありがとうございました! NULLと数値、72.4などの数字の両方で動作します。 – Shakdun

+0

ようこそ。受け入れられたと答えてください。ありがとうございます – user3598756

+0

私はそれがうまく働くので、ちょうど方法の束をそれをテストしなければなりませんでした。私があきらめてここに尋ねる前に、私は数時間の検索をしました。再びありがとう – Shakdun

0

あなたが言う: -

を、私は同じ列の数を検索しようとした場合(私はそこに存在することがわかっていることを)値に

を見つけるように見えるしません。

あなたのコードから以下の行を参照して、trueを返しておらず、Ifステートメント内でコードを実行しているとします。要するに

If Cells(r, Columns("W").Column).Value = myValue Then 

その一致が見つからない場合は、そこ試合はありませんが、時々見に難しいことができます。

  • セルが12.12121212が含まれていますが、(あなたはそれが一致するだろうと思うよう)あなたが12.12を検索する場合、12.12としてそれを表示するようにフォーマットされている場合、それは - :あなたはそれがあるべきだと考えたときに一致していないの

    例一致しません。あなたは(末尾にスペースなし)12.12を検索する場合、細胞は、'12.12 '(末尾のスペース)、スペースを先頭または末尾が含まれている場合

  • それが一致しません。

あなたはあなたの質問にマッチすると思う内容や考えられる内容を見ることができますが、上記はあなたのコンテンツから回答を出すために必要な情報です。

コメントに基づいて、以下にあなたのコードを変更してみてください、私はその失敗理由を理解するために、いくつかのデバッグ行を追加しました: -

'If the value is null it will skip trying to check it, this mean no type mismatch error 
If Not IsNull(Cells(r, Columns("W").Column).Value) then 

    'This prints the value in the cell, the searched value, and if its seen as a match 
    Debug.Print "'" & Cells(r, Columns("W").Column).Value & "' ,'" & myValue & "', " & (Cells(r, Columns("W").Column).Value = myValue) 

    'Compares them both as Long data types 
    If CLng(Cells(r, Columns("W").Column).Value) = CLng(myValue) Then 
     'Your code 
    End If 

End If 
+0

の代わりに 'If Cells(r、" W ")。Text = myValue Then'を使うことができます。W1 - header、W2-0、W3-3、W4-7 、W5 - NULLなどがあります。その間にいくつかのNULLを持つ異なる数値を使用します。私はそれを探しているときに列が0を含んでいると確信していますが、それをスキップするだけです。 NULLが問題なく見つかる場所。 – Shakdun

+0

@ShaiRadoここで正しいアイデアがあるかもしれません、 '0'は' '0" 'と同じではありません(1つは数字で、1つは数字を含む文字列です)。 CInt(myValue)を述べたようにしてください。 –

+0

また、セル(r、Columns( "W")。Column).Value'、 'myValue'、および' Cell(r、Columns( "W")。Column).Value = myValue'を直接どのようなことが起こっているのかを知ることができます。 CInt関数(myValue)と –

0

は、以下のコードの一部を使用してForループを交換してみてください。 あなたはDecimal値を使用して、または整数より大きい値している場合は、CInt関数から自分のニーズに変更を加える:Rangeオブジェクトの

For r = 1 To LastRow 
    If sht.Cells(r, "W").Value = CInt(myValue) Then 
     sht.Rows(r).Select 
     With Selection.Interior 
      .Pattern = xlSolid 
      .PatternColorIndex = xlAutomatic 
      .color = 65535 
      .TintAndShade = 0 
      .PatternTintAndShade = 0 
     End With 
    End If 
Next r 
+0

まだ数値が足りないが、時々必要なNULLを検索する。 – Shakdun

+0

@Shakdunは、数値の範囲、文字列、Nullなどの検索オプションを共有しています... –

+0

小数点なしの1から200までの数値(通常の数字は覚えていません、英語は私の主な言語です)およびNULL。 – Shakdun

0

は、これであなたのループを交換してみてください:

Dim tempFind 
Set tempFind = ActiveSheet.Columns("W").Find(What:=myValue, LookIn:=xlValues, LookAt:=xlWhole, _ 
SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False) 
If Not tempFind Is Nothing Then 
    With Range(tempFind.Address).Interior 
     .Pattern = xlSolid 
     .PatternColorIndex = xlAutomatic 
     .color = 65535 
     .TintAndShade = 0 
     .PatternTintAndShade = 0 
    End With 
Else 
    MsgBox "Not Found!" 
End If 
関連する問題