Страницы: 1
RSS
Сводка нескольких таблиц в одну через find (vba)
 
Подскажите пожалуйста, вот есть разрозненные таблицы на одном листе, у всех у них  в заголовке есть - КодЗаказа, как их все найти через find, вырезать и вставить друг под другом на другом листе? с одной таблицой так получается
Код
    shtList1.Activate
    shtRange1.Cells.Find "КодЗаказа", , xlValues, xlWhole    
    shtRange1.Cells.CurrentRegion.Select
    shtRange1.Cells.CurrentRegion.Cut
    shtList2.Activate
    shtRange2.Cells.Range("A1").Select
    shtList2.Paste Destination:=shtList2.Range("A1")   

а дальше при попытке зациклить find не находит на листе следующую таблицу .........
 
Вам и макрос в картинке написать?
 
ну если бы я мог написать макрос и картинку выложить то наверное этой темы бы не было ))))))) так уж что есть, только картинка ........
 
Вот код как подсказка
Код
Dim Rng as Range
Dim firstAddress as String

    With ActiveSheet
        Set Rng = .Cells.Find("КодЗаказа", , xlFormulas, xlWhole)
        firstAddress = Rng.Address 'запоминаем адрес первой найденной ячейки с "КодЗаказа"
        Do
            '
            ' тут ваше копирование куда хотите
            '
            Set Rng = .Cells.FindNext(Rng) 'продолжаем поиск второй ячейки с "КодЗаказа"
        Loop Until firstAddress = Rng.Address 'заканчиваем поиск, если дошли до первой найденной ячейки
    End With
 
Цитата
[USER=117452]АВам и макрос в картинке написать?
А Вы не поняли. Что правила форума пишут о примере, который нужно к вопросу прикреплять?
 
Кстати, как это ни удивительно, но про FindNext написано в справке Find :)
 
Цитата
vikttur написал:
А Вы не поняли. Что правила форума пишут о примере, который нужно к вопросу прикреплять?
да я вот кстати правила форума то и забыл прочитать ))))))

Цитата
Hugo написал:
Кстати, как это ни удивительно, но про FindNext написано в справке Find
я вот как раз второй день и пытаюсь сделать эту штуку через FindNext, даже урок на YouTube посмотрел про Fine и все равно не получается, во первых этот долбанный FindNext начинает искать почему то справа налево, во вторых с циклом не определюсь, то ли For Each то ли Do Loоp .... да и еще надо на листе вставки постоянно переопределять заново диапазон .....          

Цитата
New написал:
FindNext
спасибо, сейчас попробую этот вариант .......
Изменено: Артем Кузнецов - 23.07.2020 20:20:29
 
ТС, в моём примере выше лучше замените вот эту строку
Код
With ActiveSheet

на
Код
With Worksheets("название листа, где находятся эти КодЗаказа")
, например, такЖ With Worksheets("Лист2")

Так как я смотрю вы не очень в программировании и будете переходить на другие листы при вставке данных, то поиск следующей ячейки уже будет продолжаться на другом листе, так как активный лист у вас уже изменится. Лучше сразу укажите в коде на каком листе осуществлять поиск.

P.S. В следующий раз - делайте небольшой пример в Excel файле и прикладывайте его сразу к своему вопросу. Вам сразу напишут код, формулу и т.д. под ваш пример. Никто не хочет связываться с картинками. Это неудобно для нас, людей, которые помогают вам
 
Цитата
Артем Кузнецов написал:
я вот кстати правила форума то и забыл прочитать ))))))
И что здесь смешного? Прямо сейчас и почитайте.
 
спасибо большое, по вашем примеру сделал, на этот раз файл во вложении, вот только два маленьких момента: 1. loop заканчивается ошибкой, как бы от неё избавится? 2. хоть убей не понимаю почему find начинает искать справа - вниз, а потом уже возвращается на верх и влево? хотя везде написано что работать он должен именно слева - направо, из-за этого столбцы сводятся не по порядку ........  
Изменено: Артем Кузнецов - 23.07.2020 22:45:02
 
Цитата
Юрий М написал:
И что здесь смешного? Прямо сейчас и почитайте.
ну как что? что программированием занимается человек который терпеть не может читать )))))))
 
Понятно. Как всё же прочитаете, то напишите мне в личку и я  открою тему. Если буду на сайте.
 
Вот с файлом всё намного быстрее. Поправил ваш код из файла

Код
Sub Ссылка_на_Диапазон_v4()
   
    Dim shtList1 As Worksheet
    Dim shtList2 As Worksheet
    Dim rngRange1 As Range
    Dim firstAddress As String
    
    Set shtList1 = Worksheets("Бразилия")
    Set shtList2 = Worksheets("Бразилия2")
    
    shtList2.Cells.Clear 'ощичаем полностью лист Бразилия2

     With shtList1
        .Activate
        Set rngRange1 = .Cells.Find("КодЗаказа", .Cells(.Rows.Count, .Columns.Count), xlValues, xlWhole, xlByRows)
        If rngRange1 Is Nothing Then
            MsgBox "Такого значения нет!", vbInformation, "Внимание"
            Exit Sub
        End If
        firstAddress = rngRange1.Address  'запоминаем адрес первой найденной ячейки с "КодЗаказа"
        Do
            rngRange1.CurrentRegion.Copy shtList2.Cells(shtList2.Cells(shtList2.Rows.Count, 1).End(xlUp).Row + 1, 1) 'копируем диапазон на 2-й лист
            Set rngRange1 = shtList1.Cells.FindNext(rngRange1) 'продолжаем поиск второй ячейки с "КодЗаказа"
        Loop Until firstAddress = rngRange1.Address
    End With
    MsgBox "Все заказы скопированы на 2-й лист!", vbInformation, "Конец"
End Sub
Изменено: New - 23.07.2020 23:27:40
 
Код
Sub tt()
'Пример кода в хелпе почему не смотрели?
    Dim c As Range, x&: x = 1

    With Worksheets(1).UsedRange
        Set c = .Find("КодЗаказа", after:=.Cells(.Cells.Count), LookIn:=xlValues)
        If Not c Is Nothing Then
            firstAddress = c.Address
            Do
                c.CurrentRegion.Copy Sheets(2).Cells(x, 1): x = x + c.CurrentRegion.Rows.Count
                Set c = .FindNext(c)
            Loop While Not c Is Nothing And c.Address <> firstAddress
        End If
    End With
End Sub
 
Цитата
Hugo написал:
Пример кода в хелпе почему не смотрели?
Не любит человек читать (см. #11)  :)  
 
Цитата
Юрий М написал:
Пример кода в хелпе почему не смотрели?
честно говоря смотрел, но мне эти примеры из Helpa редко бывают понятными, например вот что это c.Address <> firstAddress? к чему? я такую запись вообще нигде никогда не встречал, или это x&: ??? меня эти примеры из Help 'а своядят с ума, мне порой кажется что их делали люди желающие всячески отбить желание у новичков программировать ....... ну это <> допустим - не равно, а что? чему?  


Цитата
Вот с файлом всё намного быстрее. Поправил ваш код из файла
спасибо большое
Изменено: Артем Кузнецов - 24.07.2020 00:01:36
 
Цитата
Артем Кузнецов написал:
что это c.Address <> firstAddress?
Адрес текущей ячейки не равен адресу первой (стартовой) ячейки  ))
 
Это уже не пример из хелпа, а рабочий код для этой задачи, я хелп чуть подправил.
Но и тут явно видно, что firstAddress  задаётся до цикла где крутится FindNext. И нигде не меняется!
А чтоб искало с первой ячейки - нужно начало поиска задать после последней! :(
Изменено: Hugo - 24.07.2020 00:12:21
 
ТС, Hugo вам дал готовый код под Ваш файл.  Про непонятные места - Вам просто надо спросить о непонятных строках у нас на форуме и мы Вам поможем (в меру наших возможностей)

в примере с - это переменная типа Range (то есть просто ячейка с найденным результатом).
c.address - адрес найденной ячейки
<> - знак "Не равно"
firstaddress - текстовая переменная, в которую мы запомнили адрес самой первой найденной ячейки.
то есть в цикле продолжаем искать заданный текст, пока не вернёмся на самую первую найденную ячейку.

& - тип Long, короткое описание (объявление переменной)
можно написать так
Dim i As Long
а можно коротко
Dim i&
это одно и тоже
тоже самое с String и $
Dim text as string
Dim text$
 
Цитата
vikttur написал:
А Вы не поняли. Что правила форума пишут о примере, который нужно к вопросу прикреплять?
ну кстати знаете, уж простите мне мою наглость, но может действительно стоит как-то чуть пересмотреть правила, потому что  с одной стороны я понимаю что, прикрепление файла сделано обязательным условием что бы избежать уж ну совсем шлаковых задач и облегчить жизнь тем, кто соберется помочь, однако вот в моем случае, ну прикрепил бы я файл с 4 строчками не рабочего кода и восьмью переменными и что? можно подумать что это сильно помогло бы, а так мне хотя бы скинули подсказку и сразу дело пошло, более того, всем кто зайдет на эту страницу сразу по картинке будет видно какая задача решается ....      
 
Цитата
Артем Кузнецов написал: ну прикрепил бы я файл с 4 строчками не рабочего кода и восьмью переменными и что?
А таблички для проверки кода помогающим самим рисовать?

Нет, прикреплять пример не обязательно. Но помогать проще, когда код в редакторе, когда можно его подправить и посмотреть. что получится...
Помощь нужна Вам и Вы сами должны пытаться максимально ее приблизить.
 
Готовый код нужно бы проверить на файле, а если нет файла - то и незачем начинать писать код.
А готовить файл исходя из описания или даже по картинке (да даже и по Вашей) -
1. зачем? Мне это надо?
2. скорее всего не совпадёт с реальным файлом и возможно придётся переписывать код.
 
Цитата
New: короткое описание (объявление переменной)
Полный разбор: Что такое переменная и как правильно её объявить?

P.S.: такие объяснения - это оффтоп, т.к. не относится к теме, поэтому лучше было бы объяснять в новой теме "Тип переменной одним знаком"
Изменено: Jack Famous - 24.07.2020 12:00:26
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Страницы: 1
Наверх