Centrum skryptów - Microsoft office

Jak porównać listę nazwisk w jednej z kolumn programu Excela z listą nazwisk w drugiej kolumnie?

Udostępnij na: Facebook

Skrypciarze odpowiadają na Wasze pytania

Cześć Skrypciarze!

Witamy w rubryce TechNet, w której Skrypciarze z firmy Microsoft odpowiadają na częste pytania dotyczące używania skryptów w administracji systemu. Jeśli macie jakieś pytania z tej dziedziny, zachęcamy do wysłania e-maila na adres: scripter@microsoft.com. Nie możemy zagwarantować odpowiedzi na każde otrzymane pytanie, ale staramy się jak możemy.

Jak porównać listę nazwisk w jednej z kolumn programu Excela z listą nazwisk w drugiej kolumnie?

Cześć Skrypciarze! Pytanie

Cześć, Skrypciarze! Jak w programie Excel porównać listę nazwisk z jednej kolumny z listą nazwisk w drugiej kolumnie?

-- GS

Cześć Skrypciarze! Odpowiedź

Hej, GS. Jak wiesz, zasadniczo wymaga się od nas, Skrypciarzy, przedstawiania faktów. Podobnie, oczekuje się od nas, że nasze opinie zachowamy dla siebie. Jednak czasem trzeba o czymś powiedzieć, czy to się komuś będzie podobać, czy nie. I tu właśnie mamy taki przypadek.

Dziś rano, w drodze do pracy Skrypciarz, którzy pisze do tej rubryki, dowiedział się czegoś niesamowitego: w większości domostw (przynajmniej w USA) psy są zmuszone oglądać te same programy telewizyjne, co inni! Spokojnie, nie oskarżamy was o takie okrucieństwo. Ale, czy to się podoba, czy nie, gdy ktoś włącza telewizor, prawie zawsze wybiera program przeznaczony dla, no cóż, ludzi. Biedny pies ma po prostu pecha.

Oczywiście, my ludzie, zawsze mamy gotową wymówkę. "Oglądamy to co, akurat leci" - mówimy. "To nie nasza wina, że nie ma programów telewizyjnych dla psów". Trzeba przyznać, że to było kiedyś prawdą. Dawniej nie było żadnych programów dla psów. Ale teraz już są.

Albo jest przynajmniej jeden: Psie opowieści - Listonosz na DVD. (j.ang.). Cytując ich witrynę sieci Web: "Wasz pies już nigdy nie będzie się nudził po spotkaniu z Collinem, Whistlerem, McLendonem i resztą bandy. W tym odcinku sierść staje na grzbiecie, gdy przerażający Listonosz odwiedza Aleję Długiej Smyczy!" No i masz, GS. Jeśli - jak wielu z nas - martwi Cię, że Twój pies nie ogląda ostatnio wystarczająco wiele telewizji, to Twoje modły zostały wysłuchane.

Ciekawostka. Na witrynie Psich Opowieści można obejrzeć urywek Listonosza. Zaintrygował nas fakt, że w niektórych scenach, gdy coś się dzieje - powiedzmy, pies szczeka - na dole ekranu pojawiają się napisy, tłumaczące, co mówi pies. Zakładamy, że napisy są dla ludzi, ale nie mamy pewności. W końcu, DVD jest przeznaczone konkretnie dla psów - nawet sfilmowane w "Dog-E-Wizji". (Tak, tak to się nazywa: Dog-E-Wizja).

Oczywiście, istnieje możliwość, że psy potrafią czytać. Ponieważ jednak nie potrafią mówić, nie możemy się o tym przekonać.

Szczerze mówiąc, Skrypciarze nie mają również pojęcia, czy psy mają dostęp do właściwej ilości skryptów otwierających arkusze kalkulacyjne Excel i porównujących listy nazwisk w jednej kolumnie z listami nazwisk w drugiej kolumnie. Z tego powodu, będziemy wdzięczni, jeśli wszyscy pokażą dzisiejszą rubrykę Azorowi, jak tylko ją przeczytają:

Set objExcel = CreateObject("Excel.Application")

objExcel.Visible = True



Set objWorkbook = objExcel.Workbooks.Open("C:\Scripts\Test.xls")

Set objWorksheet = objWorkbook.Worksheets(1)



Set objRange = objWorksheet.Range("B1").EntireColumn

i = 1



Do Until objExcel.Cells(i, 1).Value = ""

    strName = objExcel.Cells(i, 1).Value

    Set objSearch = objRange.Find(strName)



    If objSearch Is Nothing Then

        Wscript.Echo strName & " was not found."

    Else

        Wscript.Echo strName & " was found."

    End If



    i = i + 1

Loop

Zanim zaczniemy, załóżmy, że mamy - lub nasz pies ma - arkusz kalkulacyjny, który wygląda następująco:

Naszym celem, jest wziąć każde nazwisko z kolumny A i sprawdzić, czy pojawia się ono w kolumnie B. Jak to zrobić? Zobaczmy.

Jak tylko skończymy szczekać na wiewiórkę.

OK. Jak widzicie, zaczynamy typowo, od stworzenia egzemplarza obiektu Excel.Application i nadania właściwości Visible wartości True. Uzyskujemy w ten sposób działający egzemplarz programu Excel, który możemy zobaczyć na ekranie. Następne dwa wiersze kodu otwierają plik C:\Scripts\Test.xls i tworzą powiązanie z pierwszym arkuszem w pliku:

Set objWorkbook = objExcel.Workbooks.Open("C:\Scripts\Test.xls") 

Set objWorksheet = objWorkbook.Worksheets(1)

Gdy już Excel działa, kolejny wiersz kodu tworzy obiekt Range, w skład którego wchodzą wszystkie komórki kolumny B:

Set objRange = objWorksheet.Range("B1").EntireColumn

Po co to robimy? Ponieważ Excel wymaga określenia zakresu przed wykonaniem przeszukiwania - szukanie odbywa się tylko w podanym zbiorze komórek. Ponieważ interesują nas tylko nazwy pojawiające się w kolumnie B, ograniczamy zakres poszukiwań do, no właśnie, kolumny B.

Po określeniu zakresu wyszukiwania, nadajemy wartość 1 pełniącej rolę licznik zmiennej o nazwie i. Dochodzimy w ten sposób do następującego wiersza:

Do Until objExcel.Cells(i, 1).Value = ""

Tworzymy tu pętlę, która pozwala nam systematycznie sprawdzić każdą wartość w kolumnie A. Zaczynamy pętlę od sprawdzenia wartości komórki 1, 1 (jak pamiętamy, licznikowi i nadaliśmy wartość 1). Będziemy kontynuować pętlę, aż do napotkania pustej komórki w kolumnie 1.

Wewnątrz pętli zaczynamy od pobrania wartości pierwszej komórki w kolumnie 1 i przypisania jej zmiennej strName. Następnie szukamy w zakresie wyszukiwania pierwszego wystąpienia tego nazwiska:

Set objSearch = objRange.Find(strName)

Jak widać, wywołujemy po prostu metodę Find, przekazując jej nazwisko pobrane z kolumny 1. Jeśli nazwisko zostanie znalezione, dostaniemy referencję do komórki w której je znaleziono. Jeśli nazwisko nie zostanie znalezione, nie trzeba chyba mówić, że nie dostaniemy referencji. Oznacza to, że możemy skorzystać z następującego kodu bloku, by sprawdzić, czy dostaliśmy poprawną referencję:

If objSearch Is Nothing Then 

    Wscript.Echo strName & " - nie znaleziono." 

Else 

    Wscript.Echo strName & " - znaleziono." 

End If

W każdym przypadku wypisujemy nazwisko pobrane z kolumny, wraz z komunikatem wskazującym, czy nazwisko pojawia się również w kolumnie 2.

W ten sposób mamy z głowy pierwszą komórkę w kolumnie 1. Zwiększamy wartość i o 1 (żeby pracować z drugim wierszem danych), przechodzimy na początek pętli i rozpoczynamy proces raz jeszcze. Gdy skończymy, powinniśmy dostać coś następującego:

Jesper Aaberg - nie znaleziono. 

Jonathan Haas - znaleziono. 

Ken Myer - znaleziono. 

Lene Aalling - znaleziono. 

Pilar Ackerman - znaleziono. 

Syed Abbas - nie znaleziono.

Proszę bardzo, GS: mamy nadzieję, że ten skrypt przyda się Tobie i Twojemu psu. Może Cię również zainteresuje coś takiego: za kilka dodatkowych dolarów można nagrać osobistą wiadomość na kupowanym Burkowi DVD. Cytując witrynę Psich Opowieści:

“Pociesz swojego psa. Pochwal swojego psa. Albo nawet przypomnij swojemu psu, żeby trzymał się z dala od Twoich ulubionych butów."

Żarty na bok, to DVD jest prawdopodobnie całkiem dobrą sprawą dla psów. Bez wątpienia jest lepsze od... no, cokolwiek psy robią cały dzień, gdy nikogo nie ma w domu. Skądinąd, gdyby spersonalizowane DVD mogło zachęcić Reksia do ugotowania obiadu albo skoszenia trawnika, nawet piszący tę rubrykę Skrypciarz by je kupił.

Ciekawostka. Szacuje się, że w te święta Amerykanie wydadzą 5 miliardów dolarów na prezenty dla swoich zwierzaków. A te skąpe zwierzaki nie wydadzą pewno nawet połowy tego na nas ludzi!
 Do początku strony Do początku strony

Centrum skryptów - Microsoft office