2012-08-27 2 views
0

Я имею эту формулу для поиска имен и переместить эту строку на другой лист:Как перемещать строки с датами в них на другой лист?

With Intersect(Sheet.UsedRange, Sheet.Columns("D")) 
    .AutoFilter 1, "=Name" 
    With Intersect(.Offset(2).EntireRow, .Parent.Range("A:G")) 
     .Copy Sheet.Cells(Rows.Count, "A").End(xlUp).Offset(1) 
     .EntireRow.Delete 
    End With 
    .AutoFilter 
End With 

Есть ли способ использовать эту же формулу только строки передачи от одного листа к другому с датами в этой клетке?

+0

Это своего рода хак, но опять же, необходимость немного не в коробке ... Если у вас есть даты и текст в том же столбце и в полях даты, вы может попробовать '.AutoFilter 1, Criteria1: ="> 1/1/1990 "', где 1/1/1990 - это произвольная дата до первой даты в ваших данных (чтобы вы захватили все необходимые данные). Постскриптум - В автофильтре нет возможности сказать «дайте мне строки с датами». –

ответ

1

Нам нужно будет увидеть весь ваш код, чтобы точно ответить на этот вопрос - и скриншот вашей таблицы. Я рекомендую опубликовать его.

В то же время я могу разумно предположить, что у вас здесь сейчас.

Вам необходимо настроить диапазон на вашем автофильтре, независимо от того, какой столбец содержит ваши даты. Сейчас он проверяет столбец D для критериев «= Имя». Возможно, вам также придется корректировать свои критерии. to "= Date" --- "date", независимо от того, какая дата находится в текстовом формате. Поскольку даты в excel часто являются фактическими числами, вам может потребоваться использовать фактическое число, если вы не преобразуете свой столбец даты в строку/текст, что я, вероятно, рекомендую. .offset (2) выглядит странно, вам, возможно, придется это подкорректировать. Я бы предположил, что «A: G» - это диапазон, содержащий всю вашу таблицу.

http://www.ozgrid.com/VBA/autofilter-vba-criteria.htm

Попробуйте это:

With Intersect(Sheet.UsedRange, Sheet.Columns("G")) ' assuming column G contains your dates.  
.AutoFilter Field:=1, "=Date" ' put your date in number or text format here as the criteria 

удачи.

EDIT: Попробуйте это:

.AutoFilter Field:=1, Criteria1:="*/*" 
+0

Все, что я прошу, это эквивалент ##/##/## для просмотра в VBA ... Я пробовал ##/##/##, и это не сработало. Я тоже не хочу искать конкретную дату, я хочу любую дату. Кроме того, D верно в колонке, которую я ищу. Причина для имени там, потому что в D есть ячейки, которые показывают текст, а также даты. Однако скриншот действительно не требуется для этого вопроса. Я думал, что я был довольно ясен в моих потребностях ... извините, также, смещение 2 есть не просто так. Все, что мне нужно, это простая вещь: ##/##/## equivalent для VBA ..., пожалуйста, дайте мне мой сценарий так, как я его сейчас. Благодарю. –

+0

Теперь, когда я понимаю ваш вопрос, я бы согласился, что скриншот не нужен. Я не понял, что у вас были имена и даты в той же колонке. – Stepan1010

+0

Так вы бы использовали ответ whytheq? или придерживаться своего собственного оригинала, потому что ваш будет получать только дату, а не все даты ... правильно? –

0

В колонке рядом с таблицей использовать формулу, как =ISTEXT(D2) Использование нового столбца, чтобы сделать вашу фильтрацию на основе того, является ли оно истинным или ложным. Это предполагает, что есть только имена или даты в столбце D i.e, если существует целое число, тогда этот подход не будет работать.

EDIT

Вы можете закодировать выше, используя worksheetfunction. Попробуйте следующее ...

Sub test() 

With Excel.Application.ActiveWorkbook.Sheets("Sheet1") 
      MsgBox (Excel.Application.WorksheetFunction.IsText(.Range("D2"))) 
End With 

End Sub 
+0

Нет другого выхода? Я хотел бы сохранить его там, где скрипт выполняет всю работу, а не добавляет другую формулу ... –

+0

'ISTEXT' является скомпилированным - см. Edit; вам нужно построить это в цикле – whytheq

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