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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.07.2015, 13:44   #1
Marisabell
 
Регистрация: 03.01.2010
Сообщений: 6
По умолчанию Удаления определенного количества ячеек

Добрый день,
Уверена, что мой тяжкий труд можно оптимизировать. Прошу помощи.

Имею 2 массива данных из 3 столбцов (пример данных в приложении).
Массив данных 1:
<Уникальный код 0>.
<Уникальный код 1>.
<Уникальный код 2>. (он дублируется. Каждый код может дублироваться разное количество раз).

Массив данных 2:
<Уникальный код 2>. (он дублируется. Каждый код может дублироваться разное количество раз).
Количество записей DELETE ( эта цифра указывает количество, которые надо удалить с конца второго столбца каждого Уникального кода 2., и вывести в Новый лист удалённые записи с кодами Первого столбца).

Пожалуйста, помогите с МАКРОСОМ. Так как их около 400 000 руками это буду делать очень долго!

Не получается приложить файлы-образцы, могу выслать на мейл!!!

Спасибо!

Последний раз редактировалось Marisabell; 01.07.2015 в 13:53.
Marisabell вне форума Ответить с цитированием
Старый 01.07.2015, 14:43   #2
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

Цитата:
Сообщение от Marisabell Посмотреть сообщение
Не получается приложить файлы-образцы
Расширенный режим - "скрепка" или Управление вложениями - zip или rar.
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 01.07.2015, 15:42   #3
Marisabell
 
Регистрация: 03.01.2010
Сообщений: 6
По умолчанию

Цитата:
Сообщение от Казанский Посмотреть сообщение
Расширенный режим - "скрепка" или Управление вложениями - zip или rar.
Именно так и делаю, но после загрузки (rar) появляется окно <Загрузка файла прошла неудачно>. Не понимаю в чем беда.
Marisabell вне форума Ответить с цитированием
Старый 01.07.2015, 15:52   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Вы в архив файлы запаковали? Может размер получился большой?
какой размер файла, который Вы пытаетесь загрузить?


p.s. на крайний случай выложите архив на файло-хранилище (любое. хоть на http://files.mail.ru/ ) и сюда ссылку на скачивание.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 01.07.2015, 16:17   #5
Marisabell
 
Регистрация: 03.01.2010
Сообщений: 6
По умолчанию Ссылка

Надеюсь получилось!

https://cloud.mail.ru/public/8crU/w9bxUe4VE
Marisabell вне форума Ответить с цитированием
Старый 01.07.2015, 16:24   #6
Marisabell
 
Регистрация: 03.01.2010
Сообщений: 6
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Вы в архив файлы запаковали? Может размер получился большой?
какой размер файла, который Вы пытаетесь загрузить?


p.s. на крайний случай выложите архив на файло-хранилище (любое. хоть на http://files.mail.ru/ ) и сюда ссылку на скачивание.
Файл 13,5 KB
Marisabell вне форума Ответить с цитированием
Старый 01.07.2015, 17:02   #7
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

Marisabell,
а если строк в массиве1 окажется меньше, чем указано в массиве2 - что делать?
Вообще какой-то отчет об операциях нужен?
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 01.07.2015, 17:51   #8
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

Пробуйте. Макрос надо запускать при активном листе Массив1. Книга с Массив2 должна быть открыта. Лучше, если будут открыты только эти две книги (увидите, почему).
Если значение из Массив2 не будет найдено или найдено в недостаточном количестве, результат будет выведен рядом с Массив2.
Код:
Sub Marisabell()
Dim c As Range, d As Range, sh As Worksheet, sh1 As Worksheet, i&, j&
Dim v(), trace$(), wb As Workbook, w As Boolean
Set sh = ActiveSheet
For Each wb In Workbooks
  If Not wb Is ThisWorkbook And wb.Windows(1).Visible Then
    wb.Activate
    j = MsgBox("Это книга со списком на удаление?", vbYesNoCancel)
    If j = vbYes Then Exit For
    If j = vbCancel Then Exit Sub
  End If
Next
If wb Is Nothing Then Exit Sub
Application.ScreenUpdating = False

v = Range("A2", Cells(Rows.Count, "B").End(xlUp)).Value
ReDim trace(1 To UBound(v), 1 To 1)
sh.Activate
Set sh1 = Worksheets.Add(after:=sh)
sh.Range("A1:C1").Copy sh1.Range("A1")

On Error Resume Next
For i = 1 To UBound(v)
  Set c = sh.Columns("C").Find(v(i, 1), , xlValues, xlWhole, , xlPrevious)
  If Not c Is Nothing Then
    Set d = c.Offset(1 - WorksheetFunction.Round(v(i, 2), 0))
    If Err Then Err.Clear: GoTo 1
    If d.Value <> c.Value Then
1     Set d = sh.Columns("C").Find(v(i, 1), , xlValues, xlWhole, , xlNext)
      trace(i, 1) = "перенесено " & c.Row - d.Row + 1
      w = True
    End If
    Range(d, c).EntireRow.Copy sh1.Cells(Rows.Count, 1).End(xlUp).Offset(1)
    Range(d, c).EntireRow.Delete
  Else
    trace(i, 1) = "не найдено"
    w = True
  End If
Next
If w Then
  wb.Activate
  Range("C2").Resize(UBound(v)).Value = trace
  MsgBox "Не все прошло идеально, смотрите 3-й столбец", vbExclamation
Else
  MsgBox "Успешно", vbInformation
End If
Application.ScreenUpdating = True
End Sub
exceleved@yandex.ru Яндекс.Деньги: 410011500007619

Последний раз редактировалось Казанский; 01.07.2015 в 18:08.
Казанский вне форума Ответить с цитированием
Старый 01.07.2015, 20:54   #9
Marisabell
 
Регистрация: 03.01.2010
Сообщений: 6
По умолчанию

Огромное спасибо! Всё получилось! Вы просто волшебник!
Делилось всё примерно 1:20, и это просто молниеносно, по сравнению с временем, которое бы потратила на мануальную обработку!
Благодарю!
Marisabell вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
При достижении определенного количества участников выскакивает окно (проблема) FleXik Общие вопросы Delphi 4 20.11.2012 05:41
Удаление определенного количества символов из компонента label Sandysman Мультимедиа в Delphi 4 22.03.2012 14:46
Процедура добавления к дате определенного количества дней W. Aron Помощь студентам 6 04.11.2011 00:37
Вставка определенного количества пробелов Klim Bassenger Microsoft Office Excel 3 01.07.2009 10:11