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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.03.2018, 11:37   #11
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

Katiy2002, приложите файл-пример, объясните задачу словами. Может, можно все сделать проще, формулами/фильтрами например.
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 02.03.2018, 11:42   #12
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Цитата:
Сообщение от Katiy2002 Посмотреть сообщение
мне нужен так)
- почему?
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 02.03.2018, 14:10   #13
Katiy2002
Пользователь
 
Регистрация: 25.11.2015
Сообщений: 11
По умолчанию

Файл не удается загрузить, слишком большой даже архив.
Есть выгрузка анкет на одном листе книги. Каждый день с утра макросом из этой выгрузки подтягивается на другой лист анкеты с определенным статусом и с датами от сегодняшнего числа, но в течении дня эта выгрузка обновляется не один раз. То есть при повторном переносе на второй лист анкет на втором листе появляются не только новые анкеты, но и дублируются старые за сегодняшнее число, нужно это исправить.
Я загнала в массив номера анкет со второго листа, и при его обновлении сравниваю номер анкеты с первого листа со значениями этого массива. Если номера анкет совпадают, значит загружать ее не нужно на второй лист, тк она там уже есть.
Еще раз приложу код
Код:
Public Sub Main()

llastr = Sheets("ÐÅÅÑÒÐ ÄÎÑÒÀÂÊÈ").Cells(Rows.Count, 2).End(xlUp).Row 'çàïîìíèëè ïîñëåäíþþ ñòðîêó
ReDim MnumberA(1 To llastr)
s = 0 ' ñòðîêè ìàññèâà
For y = 3 To Sheets("ÐÅÅÑÒÐ ÄÎÑÒÀÂÊÈ").Cells(Rows.Count, 2).End(xlUp).Row 'ïåðåáèðàþ ñòðîêè íà ëèñòå
 If Sheets("ÐÅÅÑÒÐ ÄÎÑÒÀÂÊÈ").Cells(y, 2) <> " " Then ' óñëîâèå îòáîðà
     s = s + 1 ' íîìåð ñòðîêè ìàññèâà
     MnumberA(s) = CStr(Sheets("ÐÅÅÑÒÐ ÄÎÑÒÀÂÊÈ").Cells(y, 2).Value) ' çàïèñü â ïåðâóþ êîëîíêó
  End If
Next y
MC = True
MANK = RangeCNT("ANK", 1, 1)
For i = 2 To MANK
     If Sheets("ANK").Cells(i, 11).Value = 2 And Sheets("ANK").Cells(i, 13).Value > CDate(Now()) Then  'ïðîâåðêà äàòû
        If FindPos(CStr(Sheets("ANK").Cells(i, 1).Value), "ÐÅÅÑÒÐ ÄÎÑÒÀÂÊÈ", 3, 2) = 0 Then
          AddANK i, RangeCNT("ÐÅÅÑÒÐ ÄÎÑÒÀÂÊÈ", 3, 1)
        End If
     End If
Next i
MC = False
MsgBox ("Âûïîëíåíî!")
End Sub

Public Function poisk(MnumberA(), k) As Boolean
MANK = RangeCNT("ANK", 1, 1)
For i = 2 To MANK
x = CStr(Sheets("ANK").Cells(i, 1).Value)
 For k = 3 To UBound(MnumberA)
    'On Error Resume Next
    If x <> CStr(MnumberA(k)) Then poisk = True: Exit Function
 Next k
Next i
End Function

Function FindPos(FVal As String, SName As String, FRow As Long, FCol As Long)
For i = 0 To RangeCNT(SName, FRow, FCol)
 If CStr(Sheets(SName).Cells(i + FRow, FCol).Value) = FVal Then
  FindPos = i
  Exit Function
 End If
   FindPos = 0
Next i
End Function

Function RangeCNT(SName As String, FRow As Long, FCol As Long)
 i = 0
 While Sheets(SName).Cells(i + FRow, FCol) <> ""
   i = i + 1
 Wend
 RangeCNT = i + FRow
End Function

Function MaxID(SName As String, FRow, FCol)
 i = 0
 j = 0
 While Sheets(SName).Cells(j + FRow, FCol) <> ""
  If Sheets(SName).Cells(j + FRow, FCol).Value > i Then
   i = Sheets(SName).Cells(j + FRow, FCol).Value
  End If
  j = j + 1
 Wend
 MaxID = i
End Function

Sub AddANK(XRow, TargetX)
MANK = RangeCNT("ANK", 1, 1)
For o = 2 To MANK
 If poisk(MnumberA(), o) = True Then 'ïðîâåðêà íàëè÷èÿ çàïèñè â ðååñòðå
  Sheets("ÐÅÅÑÒÐ ÄÎÑÒÀÂÊÈ").Cells(TargetX, 1) = MaxID("ÐÅÅÑÒÐ ÄÎÑÒÀÂÊÈ", 3, 1) + 1
  Sheets("ÐÅÅÑÒÐ ÄÎÑÒÀÂÊÈ").Cells(TargetX, 2) = Sheets("ANK").Cells(XRow, 1)
  Sheets("ÐÅÅÑÒÐ ÄÎÑÒÀÂÊÈ").Cells(TargetX, 3) = Sheets("ANK").Cells(XRow, 2)
  Sheets("ÐÅÅÑÒÐ ÄÎÑÒÀÂÊÈ").Cells(TargetX, 5) = Sheets("Ëèñò1").Range("A2")
  Sheets("ÐÅÅÑÒÐ ÄÎÑÒÀÂÊÈ").Cells(TargetX, 4) = Sheets("ANK").Cells(XRow, 12)
  Sheets("ÐÅÅÑÒÐ ÄÎÑÒÀÂÊÈ").Cells(TargetX, 6) = "Öåíòð äîñòàâêè" 'ÊÊ Ñ ËÏ 120 Ä
  Sheets("ÐÅÅÑÒÐ ÄÎÑÒÀÂÊÈ").Cells(TargetX, 8) = Now()
  Sheets("ÐÅÅÑÒÐ ÄÎÑÒÀÂÊÈ").Cells(TargetX, 9) = Now()
  Sheets("ÐÅÅÑÒÐ ÄÎÑÒÀÂÊÈ").Cells(TargetX, 10) = "ÊÊ Ñ ËÏ 120 Ä"
  Sheets("ÐÅÅÑÒÐ ÄÎÑÒÀÂÊÈ").Cells(TargetX, 11) = Sheets("ANK").Cells(XRow, 3)
  Sheets("ÐÅÅÑÒÐ ÄÎÑÒÀÂÊÈ").Cells(TargetX, 12) = Sheets("ANK").Cells(XRow, 4)
  Sheets("ÐÅÅÑÒÐ ÄÎÑÒÀÂÊÈ").Cells(TargetX, 13) = Sheets("ANK").Cells(XRow, 5)
  Sheets("ÐÅÅÑÒÐ ÄÎÑÒÀÂÊÈ").Cells(TargetX, 15) = Sheets("ANK").Cells(XRow, 8)
  Sheets("ÐÅÅÑÒÐ ÄÎÑÒÀÂÊÈ").Cells(TargetX, 16) = Sheets("ANK").Cells(XRow, 7)
  Sheets("ÐÅÅÑÒÐ ÄÎÑÒÀÂÊÈ").Cells(TargetX, 17) = Sheets("ANK").Cells(XRow, 17)
  Sheets("ÐÅÅÑÒÐ ÄÎÑÒÀÂÊÈ").Cells(TargetX, 21) = Sheets("ANK").Cells(XRow, 16) + ", " + Sheets("ANK").Cells(XRow, 17) + ", " + Sheets("ANK").Cells(XRow, 18) + ", " + Sheets("ANK").Cells(XRow, 19) + ", " + Sheets("ANK").Cells(XRow, 20) + ", " + Sheets("ANK").Cells(XRow, 21)
  Sheets("ÐÅÅÑÒÐ ÄÎÑÒÀÂÊÈ").Cells(TargetX, 22) = Sheets("ANK").Cells(XRow, 13)
  Sheets("ÐÅÅÑÒÐ ÄÎÑÒÀÂÊÈ").Cells(TargetX, 23) = Sheets("ANK").Cells(XRow, 14)
  Sheets("ÐÅÅÑÒÐ ÄÎÑÒÀÂÊÈ").Cells(TargetX, 24) = Sheets("ANK").Cells(XRow, 22)
 End If
Next o
End Sub
Katiy2002 вне форума Ответить с цитированием
Старый 02.03.2018, 14:25   #14
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

Katiy2002, зачем опять эта простыня нечитаемого кода? Файл-пример может содержать в 100 раз меньше данных, чем рабочий, лишь бы была понятна структура данных и что с ними надо сделать.
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 02.03.2018, 14:42   #15
Katiy2002
Пользователь
 
Регистрация: 25.11.2015
Сообщений: 11
По умолчанию

Вот файл
Вложения
Тип файла: rar Лист Microsoft Excel (2).rar (848.1 Кб, 4 просмотров)
Katiy2002 вне форума Ответить с цитированием
Старый 02.03.2018, 20:05   #16
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Честно пытался помочь - не вышло: кода в файле нет, не понял что и как нужно делать, не нашёл ни одного совпадения между листами... Я пас.
P.S. Кстати про объём - если из файла удалить все эти лишние миллионы пустых строк - там остаётся всего 180 кб, которые можно ещё чуть незначительно поджать архиватором.
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 02.03.2018 в 20:12.
Hugo121 вне форума Ответить с цитированием
Старый 02.03.2018, 21:08   #17
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

Есть одно совпадение - В33 с первого листа находится в А23 второго листа.
Можно получить массив значений совпадает/не_совпадает с помощью функций листа ЕНД(ПОИСКПОЗ()):
Код:
Sub bb()
Dim v()
  With Worksheets("РЕЕСТР ДОСТАВКИ")
    v = Application.IsNA(Application.Match(.Range("B3", .Cells(.Rows.Count, "B").End(xlUp)), Range("ANK!A:A"), 0))
  End With
Dim x: For Each x In v: Debug.Print x: Next 'вывод массива в Immediate
End Sub
В данном случае выводится массив
Код:
True
True
True
True
True
True
True
True
True
True
True
True
True
True
True
True
True
True
True
True
True
True
True
True
True
True
True
True
True
True
False
т.е. все номера анкет из первого листа, кроме последнего, не находятся на втором листе и подлежат переносу.
В файле книга с удаленными пустыми строками.
Вложения
Тип файла: rar Лист Microsoft Excel (2).rar (178.8 Кб, 4 просмотров)
exceleved@yandex.ru Яндекс.Деньги: 410011500007619

Последний раз редактировалось Казанский; 02.03.2018 в 21:15.
Казанский вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка Subscript out of range ольгаг Microsoft Office Excel 5 01.10.2017 11:06
subscript out of range Bape}l{ka Microsoft Office Excel 2 31.10.2011 12:54
Subscript out of range amator_roma Помощь студентам 1 04.07.2011 11:32
Динамический массив - Subscript out of range Zeraim Microsoft Office Excel 2 29.11.2010 16:28
ReDim и Subscript out of range (Error 9) oldfatham Microsoft Office Excel 5 24.08.2009 18:32