Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.02.2012, 17:45   #1
zenner
Форумчанин
 
Регистрация: 12.08.2009
Сообщений: 199
По умолчанию Добавление строк с отсутсвующими значениями

Добрый день! У меня есть следующий файл:For forum.zip

Подскажите пожалуйста макрос который найдет в колонке "А" пропущенные номера телефонов и вставит их в соответствующие места. Диапазон нумерации: 353100 - 353891 Спасибо!
zenner вне форума Ответить с цитированием
Старый 22.02.2012, 18:37   #2
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

В общем получился такой корявый код (вероятно можно где-то оптимизировать, но и так работает):
Код:
Sub tt()
    Dim i&, ii&, il&
    Application.ScreenUpdating = False
    [h1].Select
    ii = 353891
    il = Cells(Rows.Count, 4).End(xlUp).Row

    For i = il To 2 Step -1
        Do While Cells(i, 1) < ii
            Cells(i + 1, 1).EntireRow.Insert
            Cells(i + 1, 1) = ii
            ii = ii - 1
        Loop
        ii = ii - 1
    Next
    Application.ScreenUpdating = True
End Sub
Но! На Ваших данных будет ошибка в одном месте - там 2 раза строка 353411.
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 22.02.2012 в 19:10.
Hugo121 вне форума Ответить с цитированием
Старый 23.02.2012, 15:25   #3
zenner
Форумчанин
 
Регистрация: 12.08.2009
Сообщений: 199
По умолчанию

Спасибо за помощь! да, я тоже заметил что одна строка повторяется но ошибку мне макрос не выдает.
zenner вне форума Ответить с цитированием
Старый 23.02.2012, 17:35   #4
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Он и у меня ошибку не выкидывает - просто там нарушается последовательность.

Вообще можно было сделать алгоритм совершенно другой - индексируем словарём массив существующих данных, затем в другом массиве собираем эти номера по порядку - существующим заполняем дааные из существующего массива, новые пишутся без данных.
Выгружаем результат на лист (любой).
Так в общем результат будет похож, но без добавления строк в существующую таблицу (т.е. таблица будет сделана другая из этих и сгенерённых данных). Зато исходный порядок номеров может быть любым, и повтор номеров будет игнорироваться (можно предусмотреть, что делать в таком случае).
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 23.02.2012 в 17:52.
Hugo121 вне форума Ответить с цитированием
Старый 25.02.2012, 18:19   #5
zenner
Форумчанин
 
Регистрация: 12.08.2009
Сообщений: 199
По умолчанию

Hugo121,

А может в Ваш код тот что выше добавить в начале чтобы он искал повторения в колонке "А" и если есть повторяющиеся номера чтобы макрос показал мне их, я их удалю так как это ошибка тех которые составляют наряды и тем самым данный макрос выполнял бы две очень важные функции: поиск дубликатов и добавление отсутствующих. Спасибо!
zenner вне форума Ответить с цитированием
Старый 25.02.2012, 19:01   #6
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Что-то не получается на Вашем примере сделать...
Так может сделать по плану Б - на словаре? Тогда повторы можно просто игнорировать (или сразу решить, какой из них будем брать), и из исходных данных создать новый лист с полным списком номеров.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 27.02.2012, 11:47   #7
zenner
Форумчанин
 
Регистрация: 12.08.2009
Сообщений: 199
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
Что-то не получается на Вашем примере сделать...
Так может сделать по плану Б - на словаре? Тогда повторы можно просто игнорировать (или сразу решить, какой из них будем брать), и из исходных данных создать новый лист с полным списком номеров.
Для меня было бы хорошо чтобы макрос игнорировал повторы но чтобы хотя бы выделял их цветом и добавлял отсутствующие номера в том же рабочем листе. Спасибо!!!
zenner вне форума Ответить с цитированием
Старый 27.02.2012, 16:07   #8
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Пробуйте план Б:
Код:
Sub tt()
    Dim a(), i&, ii&, x As Byte
    a = Sheets("ST").[a1].CurrentRegion.Offset(1).Value
    ReDim b(1 To 353891 - 353100 + 1, 1 To 5)
    With CreateObject("Scripting.Dictionary")
        For i = 1 To UBound(a)
        If Len(a(i, 1)) Then .Item(a(i, 1)) = i
        Next
        For ii = 353100 To 353891
            If .exists(ii) Then
                For x = 1 To 5
                    b(ii - 353100 + 1, x) = a(.Item(ii), x)
                Next
            Else
                b(ii - 353100 + 1, 1) = ii
            End If
        Next
    End With
    Sheets("ST").[a2:e2].Resize(UBound(b)).Value = b
End Sub
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подсчет количества строк с повторяющимися значениями jugelik Microsoft Office Excel 1 07.07.2011 13:14
Закрашивание строк с повторяющимися значениями SergioSolo Microsoft Office Excel 3 08.02.2011 23:07
Выборка строк с одинаковыми значениями на разных листах bernanke Microsoft Office Excel 3 26.01.2011 23:29
Выделение групп строк с уникальными значениями Mikodeki Microsoft Office Excel 1 18.02.2010 22:23
Удаление строк с повторяющимися значениями satten Microsoft Office Excel 11 01.12.2009 07:50