Извличане на данни от един лист в друг при определено условие

2 одобрения 0 неодобрения
попитан 2017 март 29 в VBA от nikisf начинаещ (14 точки)
Здравейте,

Трябва ми формула чрез, която да се извлича информация от един sheet в друг по следния метод:

В лист 1 имаме таблица в която са подредени номера на фактури, фирми, телефони, адреси

Искам в лист 2 да излиза всичката информация на определена фирма, като информацията съответно да се взима от лист1. Дали е възможно това?

2 отговори

2 одобрения 0 неодобрения
отговорени 2017 март 31 от vbafreak експерт (157 точки)
редактиран 2017 април 3 от vbafreak

Да, може да пробваш със следния vba код:

    Sub CopyTexttoAnotherSheet()
    'Clear contents
    Sheets("Sheet2").UsedRange.ClearContents
    
    Dim i As Integer
    'Set the range
    Dim lastRow As Integer
    lastRow = Sheets("Sheet1").Range("C10000").End(xlUp).Row
    For i = 2 To lastRow
        If Sheets("Sheet1").Cells(i, 3).Value = "quarter 1" Then
            'Activate the destination worksheet
            Sheets("Sheet2").Activate
            'Copy the text
            Cells(i, 1).EntireRow.Value = Sheets("Sheet1").Cells(i, 1).EntireRow.Value
        End If
    Next
    End Sub

Корекция: кодът засича дали има стойност "quarter 1" в колона "C" от шийт 1 и ако тази стойност съществува, копира стойността на целия ред в същия ред от шийт 2. За да включиш и другите квартали (quarter 2, quarter 3), можеш да добавиш още цикли към кода.

Ако искаш да копира резултатите от колона "А" едно под-друго, трябва да замениш:

Cells(i, 1).EntireRow.Value = Sheets("Sheet1").Cells(i, 1).EntireRow.Value

Със следното:

Range("A10000").End(xlUp).Offset(1, 0).Value = Sheets("Sheet1").Cells(i, 1)

Проучи и възможността да използваш филтър, както предлага Badan, далеч по-лесно е, стига да ти върши работа.

2 коментари

коментиран 2017 март 31 от nikisf начинаещ (14 точки)
Филтъра забива поради големия брой фирми предполагам, затова търсим такова решение.
Кода ви върши перфектна работа, но ако може да помогнете да го променим малко.
Значи дали е възможно когато намери quarter 1 да копира целия ред на шийт2. Също така дали е възможно в шийт2 да ги реди 1 2 3 4 5, а не по съвпадение от шийт1?
коментиран 2017 април 3 от vbafreak експерт (157 точки)
редактиран 2017 април 3 от vbafreak
Коригирах си отговора, вече се копират целите редове. За втория ти въпрос, единственият вариант да подрежда данните на следващ ред, за който се сещам, работи само при копиране на една колона. Като алтернативен вариант, след като извлечеш всички фирми от колона "А", може да използваш vlookup за да изкараш и другите колони, които ти трябват.
0 одобрения 0 неодобрения
отговорени 2017 март 30 от Badan експерт (216 точки)

Здравей и добре дошъл във форума.

Да, възможно е, трябва да използваш функцията vlookup.

Ако приемем, че в шийт 1 е таблицата ти с всички данни, фирмите са в колона "А", тел. в колона "Б" и т.н.):

фирми

тел

адрес

фирма "А"

0882222345

 

фирма "Б"

0883456123

 

фирма "C"

0884235122

 

 А в шийт 2, клетка А2 си написал името на фирма "Б":

 

телефон

адрес

фирма "Б"

  

За да намериш телефона на фирма "Б" използвай следната формула:

=VLOOKUP(Sheet2!A2,Sheet1!$A$1:$D$240,2,0)

Формулата търси за стойността в клетка А2 от шийт 2 (фирма "Б") в шийт 1 и изкарва данните от 2рата колона от ляво на дясно срещу намерената стойност.

По същия начин, за да намериш адресите, използвай:

=VLOOKUP(Sheet2!A2,Sheet1!$A$1:$D$240,3,0)

Тази формула ще ти изкара стойността от 3тата колона и т.н.

За да работят формулите е необходимо да форматираш колоната с фирмите като текст и на двата шийта и името на фирмата трябва да е написано по абсолютно аналогичен начин.

Повече информация за vlookup можеш да прочетеш тук.

Успех!

4 коментари

коментиран 2017 март 30 от nikisf начинаещ (14 точки)
Май не съм обяснил както трябва въпроси си. Ще пробвам отново да опиша ситуацията - става въпрос за списък на фирми, като искаме в шийт1 да попълваме данните, а те автоматично да се разпределят по други шийтове. Нашето желание е да се разпределят по квартали, за да можем по-лесно да ги намираме чрез шийтове. Ще дам следния пример:
шийт1:
Фирма1   улица1 квартал1
Фирма2   улица2 квартал5
Фирма3   улица4 квартал6
и примерно квартал 1 отива в шийт1, квартал5 в шийт5, квартал6 в шийт6.  Като искаме това да става автоматично, а не постоянно да попълваме кодове или да иползваме копи/пейст. Нямаме представа дали го обясних като хората и дали изобщо е възможно това, но ще Ви бъдем благодарни, ако помогнете.
коментиран 2017 март 30 от Badan експерт (216 точки)
Това, за което се сещам е да пробваш реферираш към дадени клетки от шийт едно в другите шийтове. Например формулата =Sheet1!A1 ще ти дава стойността в A1 от шийт 1. Може би ще ти свърши работа. Повече инфо как се правят референции: https://support.office.com/en-us/article/Create-or-change-a-cell-reference-c7b8b95d-c594-4488-947e-c835903cebaa
коментиран 2017 март 30 от nikisf начинаещ (14 точки)
Не и това не върши работа. Целта не е във всеки шийт ние да въвеждаме формула, а чрез едно въвеждане то да си ги разпределя. След доста ровене научих, че това май трябва да стане през VBA с някакъв код. Ние имаме голяма база данни и просто искаме ексела да ги сортира по квартали фирмите, като при въвеждане на нова фирма пак да я праща в съотвения шийт за квартала
коментиран 2017 март 31 от Badan експерт (216 точки)
Здравей, не може ли просто да използваш филтър? Колоната с кварталите избираш data -> filter и филтрираш фирмите според кварталите?
Добре дошли в българския форум за Ексел и Майкрософт офис! Тук можете да питате хора със знания и опит, както и да споделите знанията и опита си с другите.
...