Выбрать дату в календареВыбрать дату в календаре

Страницы: 1 2 След.
Ошибка 1004 при копировании с другого листа, При наличии нескольких записей одного человека из первого листа на втором листе, добавить строки и скопировать нужные столбцы.
 
Ігор Гончаренко, я имею ввиду что перед объявлением переменных и т.д.
Ошибка 1004 при копировании с другого листа, При наличии нескольких записей одного человека из первого листа на втором листе, добавить строки и скопировать нужные столбцы.
 
New,Б...ь, спасибо большое, со всеми бывает(наверное)
Цитата
New написал:
указывать строку Option Explicit
как библиотеку в С?
Ошибка 1004 при копировании с другого листа, При наличии нескольких записей одного человека из первого листа на втором листе, добавить строки и скопировать нужные столбцы.
 
New,но я же ее приравниваю к номеру строки при втором совпадении(во вложенном цикле)
Ошибка 1004 при копировании с другого листа, При наличии нескольких записей одного человека из первого листа на втором листе, добавить строки и скопировать нужные столбцы.
 
New, прикрепил и код с комментариями, и урезанный файл
Ошибка 1004 при копировании с другого листа, При наличии нескольких записей одного человека из первого листа на втором листе, добавить строки и скопировать нужные столбцы.
 
New, и снова здравствуйте, извиняюсь, но комментарии отображаются некорректно, если это вас устроит, то приложу код как есть
Код
Sub ПоискДвижений()
    '
    ' ПоискДвижений Макрос
    '
    ' Сочетание клавиш: Ctrl+у
    '
    Dim i As Long, c As Long, br As Long, lr As Long, count As Long, f As Long, s As Long, t As Long
    Dim A As Worksheet, B As Worksheet
    
    Set A = Worksheets("Page1")
    Set B = Worksheets("Лист2")

    'снимаем фильтры
    If A.FilterMode = True Then A.ShowAllData
    If B.FilterMode = True Then B.ShowAllData
 
    lr = A.cells(Rows.count, 1).End(xlUp).Row 'последняя заполненная строка первого листа
    br = B.cells(Rows.count, 4).End(xlUp).Row 'последняя заполненная строка второго листа
    
    'перебор строк первого листа
    For i = 2 To lr
        count = 0
        f = 0
        s = 0
        t = 0
        'перебор строк второго листа
        For c = 2 To br
            'если фио и дата рождения совпадает
            If A.cells(i, 4) = B.cells(c, 4) And CDate(A.cells(i, 6)) = CDate(B.cells(c, 5)) Then
                'счетчик+1
                count = count + 1
            End If
            'если найдено совпадение, то запоминаем строку первого совпадения
            If count = 1 Then
                f = c
            End If
            'если 2 совпадения, то запоминаем строку со вторым совпадением
            If count = 2 Then
               s = с
            End If
           
        Next c
        If count = 2 Then 'если нашлось два совпадения, добавляем строку ниже и копируем туда нужные ячейки
         A.Rows(i + 1).Insert
            B.cells(f, 9).Copy A.cells(i + 1, 10)
            B.cells(f, 10).Copy A.cells(i + 1, 12)
            B.cells(f, 14).Copy A.cells(i + 1, 21)
            'аналогично ниже
         A.Rows(i + 1).Insert
            B.cells(s, 9).Copy A.cells(i + 1, 10) '!!!!!!!!!!ТУТ ПАДАЕТ В ОШИБКУ 1004
            B.cells(s, 10).Copy A.cells(i + 1, 12)
            B.cells(s, 14).Copy A.cells(i + 1, 21)
        
            With A
                .Range(.cells(i, 1), .cells(i, 28)).Interior.ColorIndex = 8
            End With
            With A
                .Range(.cells(i + 1, 1), .cells(i, 28)).Interior.ColorIndex = 8
            End With
            With A
                .Range(.cells(i + 2, 1), .cells(i, 28)).Interior.ColorIndex = 8
            End With
            With B
                .Range(.cells(f, 1), .cells(c, 20)).Interior.ColorIndex = 8
            End With
            With B
                .Range(.cells(s, 1), .cells(c, 20)).Interior.ColorIndex = 8
            End With
        count = 0
        f = 0
        s = 0
        t = 0
        End If
        
    Next i
    MsgBox "Конец", vbInformation, "Конец"
End Sub
Изменено: Tr Tr - 05.02.2021 16:51:56
Ошибка 1004 при копировании с другого листа, При наличии нескольких записей одного человека из первого листа на втором листе, добавить строки и скопировать нужные столбцы.
 
Собственно в чем суть вопроса, не понимаю почему у меня не копируется ячейка со строкой "s", до этого последний if был во вложенном цикле, но потом стало понятно что это работает совсем не так, как надо, поэтому я его вынес после вл. цикла, все вроде заработало, но ячейки второго совпадения перестали копироваться.
буду крайне благодарен, если кто-то скажет где ошибка или почему оно падает в ошибку

upd. прикладываю скрин, т.к. код с комментариями прикладываться не захотел(вместо комментов разные знаки)
есть комментарий на строке, где падает в ошибку
При наличии нескольких совпадений на двух листах, добавить строки на первый и скопировать данные
 
New, а вас я вообще не знаю как отблагодарить, такие тупые вопросы терпели и мои кривые объяснения)
При наличии нескольких совпадений на двух листах, добавить строки на первый и скопировать данные
 
Inexsu, принцип понял.
Спасибо огромное!!!
При наличии нескольких совпадений на двух листах, добавить строки на первый и скопировать данные
 
Цитата
New написал:
If InStr(1, A.cells(i, 12), "_", vbTextCompare) > 0 Then        
  ValueFromA = Split(A.cells(i, 12), "_")(0)
Если не сложно, можете объяснить что из этого что, а именно, vbTextCompare и на нижней строке (0)?
Это последние мои вопросы, в принципе остальное наверное сам додумаю
При наличии нескольких совпадений на двух листах, добавить строки на первый и скопировать данные
 
Inexsu, а функция универсальна? там есть несколько видов как сделали вы, есть вот такой 08.00.16.013_23681 и вроде еще какой-то
и если не сложно, можете кратенько рассказать что из этого что?
заранее спасибо!
Изменено: Tr Tr - 04.02.2021 23:37:51
При наличии нескольких совпадений на двух листах, добавить строки на первый и скопировать данные
 
то что циклами это понятно, коды просто выглядят совсем по разному
в первом листе как пример вот так : 370_st37.007_Медицинская реабилитация.  или так 08.00.16.013_23681
во втором листе вот так: 370 или так 08.00.16.013

вопрос будет правильнее поставить так, как вытащить из первого листа значение до нижнего подчеркивания?
Изменено: Tr Tr - 04.02.2021 23:31:27
При наличии нескольких совпадений на двух листах, добавить строки на первый и скопировать данные
 
Хорошо
Цитата
Tr Tr написал:
а как быть со сравнением двух столбцов (Вид ОМС(первый лист) и Код вида лечения(второй лист))
А с этим как быть? есть какой-то метод?
При наличии нескольких совпадений на двух листах, добавить строки на первый и скопировать данные
 
New, а как быть со сравнением двух столбцов (Вид ОМС(первый лист) и Код вида лечения(второй лист)), тобишь берем человека у которого только по одной записи в каждом листе, нужно сравнить эти два столбца(чтоб значения до нижнего подчеркивания были одинаковые)
каким способом это можно сделать?
При наличии нескольких совпадений на двух листах, добавить строки на первый и скопировать данные
 
Цитата
New написал:
P.S. Я смотрю у вас совсем плохо с Excel...
ну я с ним можно сказать не работаю сейчас, очень давно было
При наличии нескольких совпадений на двух листах, добавить строки на первый и скопировать данные
 
Попробовал, не работает, ощущение что высота строки очень маленькая, но ее изменение ничего не дает(

Скрыть строки могу, но показать не работает

Снял фильтр, все показало, спасибо большое!!!

Можно последний вопрос?
Изменено: Tr Tr - 04.02.2021 22:47:22
При наличии нескольких совпадений на двух листах, добавить строки на первый и скопировать данные
 
А тот же файл, который вы прикрепили, ощущение что строки 2-61 включительно и 99-228 включительно просто свернули, они есть, но их не видно
Либо просто мой эксель забагался
При наличии нескольких совпадений на двух листах, добавить строки на первый и скопировать данные
 
Хм, у меня выделено всё, могу еще раз скрины прислать, если надо
макрос берет строку с Малкиным из первого листа, находит две строки Малкина на 2 листе
добавляет 2 пустые строки на первый лист после его записи и вписывает туда данные  Это верно
Тобишь вместо 20 строк людей на первом листе, их должно стать 22
НО
откуда-то появляются строки, которых не было, последний номер строки 200

я понял почему это, но не понимаю как это убрать, до исп. макроса эти строки просто не видно, они походу имеют слишком маленький размер
Изменено: Tr Tr - 04.02.2021 22:29:32
При наличии нескольких совпадений на двух листах, добавить строки на первый и скопировать данные
 
Цитата
New написал:
Своим кодом вы добавили 2 строки на Page1 под этим Малковым и скопировали какие-то данные из листа 2 в Page1. Всё так? Ваша задача решена или ещё что-то надо сделать? Теперь на первом листе видно, что у Малкова ещё 2 каких-то обращения/заболевания.
это верно, вот это правильно работает

у меня вопрос по поводу последнего скрина, который я прикреплял с нумерацией строк, как их оттуда вытащить? они склеились в одну
в этом сейчас у меня главная проблема
если так я объяснил непонятно, то я не знаю как понятнее объяснить(
При наличии нескольких совпадений на двух листах, добавить строки на первый и скопировать данные
 
Цитата
New написал:
Я в предыдущем сообщение дописал, почитайте.По поводу пустых строк - смотрите - вы в своём коде когда нашли 2 раза повторяющуюся ФИО сами добавляете 2 строки на Page1 - я не знаю нужно вам это или нет. Но это прописано в вашем коде. Вот этот блок
мне нужны эти 2 новые строки чтоб туда вписать ТОЛЬКО того человека, который повторяется один раз в 1 таблице и 2 раза во второй
тобишь мне нужно сделать условие в этот IF чтоб совпадало с ячейкой первого листа?

прочитал повнимательнее, пустые строки добавляются там где надо, но почему-то появляются люди, которых в таблице не было вообще, либо их просто не видно из-за вот такой штуки, которую я не знаю как убрать, странная нумерация строк... сейчас скрин прикреплю
Изменено: Tr Tr - 04.02.2021 22:15:47
При наличии нескольких совпадений на двух листах, добавить строки на первый и скопировать данные
 
Цитата
New написал:
А что про With объяснять. Да такого нет в C#. Это блок родителя, с которым вы сейчас работаете, чтобы не писать его много разA - у нас Лист (Set A = Worksheets("Page1"), тогда
а, ну то есть у меня было правильно? сначала объявил А как лист Page1, а потом использовал его через A.cells и т.д.
При наличии нескольких совпадений на двух листах, добавить строки на первый и скопировать данные
 
вот два скриншота, до и после
это первый лист, на котором добавляется что-то лишнее, которого в таблице явно не было
на втором листе все работает хорошо
можно посмотреть по номерам строк, будет видно, не знаю как по-другому показать не те строки

До использования макроса на первом листе было 20 строк ровно, потом стало около 200
Изменено: Tr Tr - 04.02.2021 22:01:14
При наличии нескольких совпадений на двух листах, добавить строки на первый и скопировать данные
 
Цитата
New написал:
нет, надо в коде указывать на каком листе производить изменения,либо так  A.Rows(i + 1).Insert  - указывая родителя ячеек (родитель у ячеек является лист)
Понял, да, ну про родителя я сразу понял, можете в двух словах про With объяснить, если не сложно?
Просто ни в книжке, ни в интернете и документации я нормального объяснения не нашел(
При наличии нескольких совпадений на двух листах, добавить строки на первый и скопировать данные
 
Цитата
New написал:
нет, надо в коде указывать на каком листе производить изменения, как вы указывали уже With A ... End with - это правильно
Понял, спасибо.

А что скажете с добавлением лишних строк, которых в таблице нет?(удаленные строки)
При наличии нескольких совпадений на двух листах, добавить строки на первый и скопировать данные
 
Большое спасибо! Отдельно хочу поблагодарить за синтаксис, ибо за бейсик взялся по сути дня 3-4 назад, работаю в основном с плюсами и шарпом.
Есть вопрос по вашему первому пункту, что это и с чем едят?(можно в двух словах? не совсем глупый, пойму)
Получается чтоб все правильно сработало, нужно активный лист держать тот, в который копируем?

Почему-то после использования макроса появилось крайне много строк, НО человек, который повторился на 2 листе выделился как надо, для 2 и более я допишу скрипт.
А в целом, можете что-то сказать по ходу мыслей и вообще по коду?

Да, удалил много строк, оставил по нескольку одиночных и нужные, но на первом листе появилось около 200 строк, которых в документе не было вообще
Изменено: Tr Tr - 04.02.2021 21:42:53
При наличии нескольких совпадений на двух листах, добавить строки на первый и скопировать данные
 
Теперь тут есть повторения одного и того же человека на 2 листе(он в одном экземпляре на 1 листе)
2 лист, 2 нижние строки Малков Роман Викторович
Изменено: Tr Tr - 04.02.2021 20:26:29
При наличии нескольких совпадений на двух листах, добавить строки на первый и скопировать данные
 
Код
Sub ПоискДвижений()
'
' ПоискДвижений Макрос
'
' Сочетание клавиш: Ctrl+у
'
Dim i As Integer, c As Integer, br As Integer, lr As Integer, cells As Range, count As Integer, j As Integer

Dim A As Worksheet, B As Worksheet
Set A = Worksheets("Page1")
Set B = Worksheets("Лист2")

 
lr = A.cells(Rows.count, 1).End(xlUp).Row 'последняя заполненная строка первого листа
br = B.cells(Rows.count, 3).End(xlUp).Row 'последняя заполненная строка второго листа
For i = 2 To lr                             'перебор строк первого листа
count = 0
j = 0
    For c = 2 To br                                             'перебор строк второго листа
    If A.cells(i, 4) = B.cells(c, 4) And A.cells(i, 6) = B.cells(c, 5) Then     'ЗДЕСЬ ПРОВЕРЯЕТСЯ СОВПАДЕНИЕ ФИО И ДР ЯЧЕЙКИ ПЕРВОЙ ТАБЛИЦЫ С ЯЧЕЙКАМИ ВТОРОЙ ТАБЛИЦЫ
         count = count + 1                                                      'ЗДЕСЬ СЧЕТЧИК СОВПАДЕНИЙ
    End If
        If count = 1 Then                                                       '
            j = c                                                               'ЗДЕСЬ ЗАПОМИНАЕМ НОМЕР СТРОКИ ПЕРВОГО СОВПАДЕНИЯ
        End If
    If count = 2 Then                                                           'ЕСЛИ ПОПАЛОСЬ ТАК, ЧТО У ЯЧЕЙКИ ПЕРВОГО ЛИСТА НЕСКОЛЬКО СОВПАДЕНИЙ СО ВТОРЫМ ЛИСТОМ
        Rows(i + 1 & ":" & i + 1).Insert                                        'ТО ДОБАВЛЯЕМ ДВЕ СТРОКИ(ЧТОБ ЗАПИСАТЬ ПЕРВОЕ СОВПАДЕНИЕ И ВТОРОЕ)
        Rows(i + 1 & ":" & i + 1).Insert                                        '
        B.cells(j, 9).Copy                                                      'ДАЛЕЕ КОПИРУЕМ И ВСТАВЛЯЕМ НУЖНЫЕ СТОЛБЦЫ В ПУСТЫЕ СТРОКИ
        A.cells(i + 1, 10).Paste
        B.cells(j, 10).Copy
        A.cells(i + 1, 12).Paste
        B.cells(j, 14).Copy
        A.cells(i + 1, 21).Paste
        
        B.cells(c, 9).Copy
        A.cells(i + 2, 10).Paste
        B.cells(c, 10).Copy
        A.cells(i + 2, 12).Paste
        B.cells(c, 14).Copy
        A.cells(i + 2, 21).Paste
        
     With A
        .Range(.cells(i, 1), .cells(i, 28)).Interior.ColorIndex = 8             'ЗДЕСЬ УЖЕ КРАСИМ СТРОКИ, У КОТОРЫХ ВЫПОЛНИЛОСЬ УСЛОВИЕ ВЫШЕ
    End With
     With A
        .Range(.cells(i + 1, 1), .cells(i, 28)).Interior.ColorIndex = 8
        End With
     With A
        .Range(.cells(i + 2, 1), .cells(i, 28)).Interior.ColorIndex = 8
        End With
     With B
        .Range(.cells(j, 1), .cells(c, 20)).Interior.ColorIndex = 8
        End With
     With B
        .Range(.cells(c, 1), .cells(c, 20)).Interior.ColorIndex = 8
        End With
        
    End If
    
    Next c
    
Next i


'

End Sub
При наличии нескольких совпадений на двух листах, добавить строки на первый и скопировать данные
 
Последняя запись на втором листе(в третьем столбце номер 616), я не заметил что таблицу укоротил и этот человек там есть 2 раза, продублируйте ее пожалуйста
Просто таблица на ~5 тысяч строк
Хорошо, через 5 минут разъясню все более подробно
При наличии нескольких совпадений на двух листах, добавить строки на первый и скопировать данные
 
Извиняюсь за неточность, просто вожусь с этой темой уже дня 2 или 3, изучая с нуля язык и уже каша в голове
При наличии нескольких совпадений на двух листах, добавить строки на первый и скопировать данные
 
мой код сравнивает первый лист со вторым по ФИО и Дате рождения, если находит совпадение, в переменную count добавляет единицу и записывает в переменную j номер строки из 2 таблицы(с первым совпадением), если находится во 2 таблице еще одно совпадение, то он должен добавить строки в 1 лист после сравниваемой ячейки. Во втором листе сравнивать совпадения не нужно. Если человек есть во 2 таблице, то он 100% есть в первой.
Изменено: Tr Tr - 04.02.2021 19:30:23
При наличии нескольких совпадений на двух листах, добавить строки на первый и скопировать данные
 
Цитата
New написал: зачем вы сравниваете их с листом 1
Так в этом и задача, на первом листе у каждого человека одна запись, а на втором - может быть несколько(если смотреть по этому документу, человек поступил в больницу с одним диагнозом, а ему нашли еще что-то, вот это и отображается на 2 листе), поэтому мне нужно сравнить 2 листа, если на 2 будет у этого человека несколько записей, на первом листе добавить после него строки и 3 нужные столбца туда скопировать со 2 листа

и выделение снимать не нужно, нужно на том что есть, сделать доп выделение другим цветом
Страницы: 1 2 След.
Наверх