2016-12-07 11 views
0

特定の列に特定の列の空白がある特定の列に問題があります。これは、コードをリードしています:xlDown空白のセルを選択していません

レンジ(FieldName.Offset(1)、FieldName.End(xlDown))は、それが空白で停止しているため、細胞のすべてを選択しないために

を選択します。ブランクの直前のセルのXYZを入力します。

xlupがこの問題を解決することはわかっていますが、フィールドの最後のセルが空白の場合、そのセルは変更されずに次のセルに移動します。私はコードを変更して、xlupを利用し、下のセルが列内で空白になるのを避けるようにする方法についてはわかりません。私は "ABC"という名前の列を持っています。この列には、すべての行が取り込まれ、フィルタリングされたデータの最後の行として呼び出すためにpingできますが、これを行う方法がわかりません。

マイコードあなたはこのコードを使用することができます

Sub SelectDown() 

Dim FieldName As Range 
Dim rng As Range, res As Variant, lrow As Long 

Set rng = ActiveSheet.AutoFilter.Range.Rows(1) 
res = Application.Match("Errors", rng, 0) 

'Finds the Specific Error' 
rng.AutoFilter Field:=res, Criteria1:="*-SHOULD BE XYZ*" 

'Only Shows rows that have something that matches the filter criteria 
lrow = ActiveSheet.Cells(Rows.Count, res).End(xlUp).Row + 1 

If ActiveSheet.Range(Cells(1, res), Cells(lrow, res)).SpecialCells(xlCellTypeVisible).Cells.Count > 1 Then 

    Set FieldName = Range("A1:BZ1").Find("COLUMN NAME") 

    'If field isnt present shows message 
    If FieldName Is Nothing Then 
     MsgBox "Field Name was not found." 
    End If 

    'Changes the Selection to XYZ if there is a change present 
    Range(FieldName.Offset(1), FieldName.End(xlDown)).Select 
    Selection.FormulaR1C1 = "XYZ" 
    'Changes the Color of the fields changed to Yellow 
    With Selection.Interior 
     .Pattern = xlSolid 
     .PatternColorIndex = xlAutomatic 
     .Color = 65535 
    End With 
Else 
End If 

End Sub 
+0

。SELECT'フィールド名の場合は何もThen''の 'Else'部の'FieldName'を見つけるための' Find'メソッドが成功したことを確認してください。 –

答えて

1


Set FieldName = Range("A1:BZ1").Find("COLUMN NAME")を使用して列番号を見つけてください(何もないことを前提としています)。あなたは `レンジ(FieldName.Offset(1)、FieldName.End(xlDown))で始まる、すべての行を配置する必要があり

Public Function LastCell(wrkSht As Worksheet, Optional Col As Long = 0) As Range 

    Dim lLastCol As Long, lLastRow As Long 

    On Error Resume Next 

    With wrkSht 
     If Col = 0 Then 
      lLastCol = .Cells.Find("*", , , , xlByColumns, xlPrevious).Column 
      lLastRow = .Cells.Find("*", , , , xlByRows, xlPrevious).Row 
     Else 
      lLastCol = .Cells.Find("*", , , , xlByColumns, xlPrevious).Column 
      lLastRow = .Columns(Col).Find("*", , , , xlByColumns, xlPrevious).Row 
     End If 

     If lLastCol = 0 Then lLastCol = 1 
     If lLastRow = 0 Then lLastRow = 1 

     Set LastCell = wrkSht.Cells(lLastRow, lLastCol) 
    End With 
    On Error GoTo 0 

End Function 
+0

こんにちは、これを既存のコードに挿入する場所がわからず、列の最後まで空白を含む列(フィールド)内のすべてを選択している場合は、 – MrLockett

+0

コードを新しい関数として追加します。 'SelectDown'手続きで範囲変数を作成します。 'Dim rLastCell as Range'。あなたの 'MsgBox'の後に' End If'を 'Else'で置き換え、' Else'をコードの最後に 'End If'で置き換えてください。 'Set rLastCell = LastCell(ActiveSheet、FieldName.Column)'と 'Range(FieldName.Offset(1)、FieldName.End(xlDown))を変更します。 'Range(FieldName.Offset(1)、rLastCell.Row).Select'。私は全体的に '選択 '事を使用しないようにしません。 –

+0

こんにちは、私はそのようなコードを変更して、今はランタイムエラー1004を取得しています:オブジェクトのグローバルメソッドの範囲が失敗しました。 'Range(FieldName.Offset(1)、rLastCell.Row).Select'行のために関数を置いて、次にブレークしてSubを続けます。私はelseとコードを変更しました。これが起こります。私が何を正しくしていないのか分かりません。 – MrLockett

関連する問題