2017-02-17 26 views
0

Я работаю над моделью, которая требует сортировки данных в диапазоне по дате, прежде чем копировать данные в другой шаблон на другом листе. Каждая строка имеет формулу, которая извлекает данные из Bloomberg, поэтому, даже если ячейка выглядит пустой, excel распознает, что в ячейке есть контент. Сортировка столбца даты, поскольку он не работает, поскольку excel не распознает данные, которые Bloomberg тянет как дату, поэтому он будет отсортирован с A по Z, который вместо этого скопирует даты.Excel: работа над сортировкой таблиц по дате с пустыми строками в диапазоне

Чтобы обойти это, я вставил и смежный столбец с формулой (используя ячейку A1 в качестве примера) "= (A1 + 0)", которая затем позволяет сортировать столбец от нового до старого. Проблема здесь в том, что если ячейка A1 не отображает дату (другими словами, она кажется пустой, но ячейка содержит формулу, которая оставляет ячейку пустой, если ни одна дата не вытащена), она возвращает значение #VALUE! ошибка и сортировка новых по старым помещали бы ошибки наверху (спасибо Excel за эту фантастическую функцию, кстати).

Чтобы обойти эту новую проблему, я заменил приведенную выше формулу в ячейке «= IFERROR (A1 + 0,1)», которая дает мне дату 1/1/1900. Отлично, теперь данные сортируются так, как я хочу, но у меня есть куча древних дат, которые просто делают мой конечный продукт уродливым.

У меня есть два вопроса: как я могу использовать VBA для удаления данных в ячейках, где дата равна 1 (которая показывает дату 1/1/1900), и только те ячейки? Или, альтернативно, только копирование строк над ячейкой, которая содержит 1/1/1900. Это относительно небольшое количество клеток, на которые это повлияет, максимум 40.

Второй; есть ли другой способ сортировки данных с помощью VBA, который мне не хватает, что может быть более эффективным?

+0

Я не вижу, почему '= (A1 + 0)' приводит к ошибке. Так или иначе. что, если вы попробуете '= IFERROR (A1 + 0," ")'? –

+0

Если формула в ячейке A1 не вытягивает дату, она обрабатывается как текст excel. Извиняется, что я не был более ясен в этой ячейке, на самом деле не пуст, он просто не вытаскивает дату из Bloomberg из-за отсутствия Cusip в другой ячейке. Формула «IFERROR» работает при очистке внешнего вида, однако, когда я сортирую столбец fron New to Old, сначала он пустует. Это создает проблему с количеством X пустых строк вверху. Благодарим за помощь, я отредактирую вопрос, чтобы уточнить проблему с помощью «A1». – Jon0311

+0

Хорошо, мы можем написать mcro, чтобы отсортировать диапазон правильно сразу. какой диапазон вы хотите отсортировать и по какому столбцу? –

ответ

1

Попробуйте этот макрос, я попытался проверить его с максимально возможным количеством аномалий.

Sub SortByDateColumnH() 
    Dim r As Range: Set r = Sheet1.Range("B3:P40") 
    Dim cel As Range 
    For Each cel In r.Columns(7).Cells 
     If IsError(cel.Value) Then 
      cel.Value = 0 
     ElseIf Not IsDate(cel.Value) Then 
      cel.Value = 0 
     Else 
      cel.Value = CLng(cel.Value) 
     End If 
    Next 

    r.Columns(7).NumberFormat = "0" 
    r.Sort Key1:=r.Cells(1, 7), Order1:=xlDescending, Header:=xlNo 

    For Each cel In r.Columns(7).Cells 
     If cel.Value < 100 Then cel.ClearContents 
    Next 
    r.Columns(7).NumberFormat = "m/d/yyyy" '<-- set the format to your preference 

    'r.Copy Destination:=someDestination ' you can copy the range by code if needed 
End Sub 
+1

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

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

  • Нет связанных вопросов^_^