2015-10-27 2 views
2

Я пытаюсь выбрать первую видимую ячейку непосредственно под заголовком отфильтрованного столбца. Код, который я получаю, приведен ниже, но у меня есть проблемы с этим кодом. Во-первых, первая строка кода использует текущий активный диапазон файла. Весьма вероятно, что этот файл изменится, и этот диапазон будет не таким. Как я могу заставить его работать для любого файла, на котором я его буду использовать? Во-вторых, если я использую совершенно другой файл с одинаковым форматом столбцов, первой видимой ячейкой под столбцом J может быть J210. Как я могу сделать эту работу для любого массива переменных?Выберите первую видимую ячейку непосредственно под заголовком отфильтрованного столбца

Sub Macro16() 
' 
' Macro16 Macro 
' 

' 
    ActiveSheet.Range("$A$1:$R$58418").AutoFilter Field:=12, Criteria1:= _ 
     "Sheets" 
    Range("J2").Select 
    ActiveCell.FormulaR1C1 = "=RIGHT(RC[1],3)" 
    Selection.FillDown 
End Sub 

ответ

1

непроверенная, но:

Sub Macro16() 
' 
' Macro16 Macro 
' 

' 
    with ActiveSheet.Range("A1").currentregion 
     .AutoFilter Field:=12, Criteria1:="Sheets" 
     if .columns(1).Specialcells(xlcelltypevisible).Count > 1 then 
     with .columns(10) 
      .resize(.rows.count - 1).Offset(1).Specialcells(xlcelltypevisible).FormulaR1C1 = "=RIGHT(RC[1],3)" 
    end with 
    end if 
    end with 
End Sub 
+0

Этот код также работает! Плюс этот код, я могу понять, что он на самом деле делает, без каких-либо дополнительных объяснений. Спасибо за вашу помощь! – Todd

0

Нечто подобное могло бы работать ...

Sub Macro16() 

    Dim ARow As Long, JRow As Long, ws1 As Worksheet 
    ws1 = Sheets("NAME OF SHEET WITH DATA") 
    ARow = ws1.Range("A" & ws1.Rows.Count).End(xlUp).Row + 1 
    ws1.Range("$A$1:$R$" & ARow).AutoFilter Field:=12, Criteria1:="Sheets" 
    JRow = ws1.Range("J" & ws1.Rows.Count).End(xlUp).Row + 1 
    ws1.Range("J" & JRow).FormulaR1C1 = "=RIGHT(RC[1],3)" 
    ws1.Range("J" & JRow).FillDown 
End Sub 
+0

я не могу получить это один работать. Я ввел свой лист с именем данных, но он дал мне ошибку отладки. – Todd

1

Я предпочитаю неразрушающие методы определения Есть ли видимые ячейки для работы с после фильтрация. Поскольку вы заполняете столбец J формулой, нет никакой гарантии, что столбец J содержит любые значения tat, которые могут быть подсчитаны с листом рабочего стола SUBTOTAL function (SUBTOTAL не учитывает строки, спрятанные фильтром), но формулу, которую вы планируете заполнить в столбце J ссылается на столбец K, поэтому там должно быть что-то.

Sub Macro16() 
    With ActiveSheet 
     If .AutoFilterMode Then .AutoFilterMode = False 
     With .Cells(1, 1).CurrentRegion 
      .Columns(12).AutoFilter Field:=1, Criteria1:="Sheets" 
      With .Resize(.Rows.Count - 1, 1).Offset(1, 9) 
       If CBool(Application.Subtotal(103, .Offset(0, 1))) Then 
        .SpecialCells(xlCellTypeVisible).FormulaR1C1 = "=RIGHT(RC[1],3)" 
       End If 
      End With 
      .Columns(12).AutoFilter Field:=1 
     End With 
    End With 
End Sub 

Fill Formula to Visible cells

+0

Это дает мне то, что я хотел, но вы можете объяснить, что делает каждая строка. Я просто начинающий, когда дело доходит до макросов, и я не знаком с большей частью этого кода. – Todd

0
Sub FirstVisibleCell() 
    With Worksheets("You Sheet Name").AutoFilter.Range 
     Range("A" & .Offset(1, 0).SpecialCells(xlCellTypeVisible)(1).Row).Select 
    End With 
End Sub 
+0

Хотя этот фрагмент кода может решить вопрос, [включая объяснение] (http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers) действительно помогает улучшить качество вашего сообщения. Помните, что вы отвечаете на вопрос читателей в будущем, и эти люди могут не знать причин вашего предложения кода. – andreas

+0

Вы можете добавить это в свой модуль. единственное, что вам нужно, чтобы изменить его имя листа и диапазон «А» в крайний левый (или любой) столбец, содержащийся в таблице –

Смежные вопросы