Mam bazę danych produktów w Excelu z kilkoma setkami wpisów, z których każdy zawiera od 1 do 3 „poziomów” wyceny: Standard, Deluxe i Premium. Każdy poziom ma własną jednostkę SKU (A, B lub C dodaną na końcu podstawowej jednostki SKU) i cenę. Moje dane są takie:
Name, Description, Price A, Price B, Price C, SKU A, SKU B, SKU C
name1, desc1, 14.95, 19.95, , sku1A, sku1B,
name2, desc2, 4.95, 9.95, 12.95, sku2A, sku2B, sku2C
name3, desc3, 49.95, , , sku3A, ,
Jak mógłbym zacząć wyglądać tak, aby dane:
Name, Description, SKU, Price
name1, desc1, sku1A, 14.95
name1, desc1, sku1B, 19.95
name2, desc2, sku2A, 4.95
name2, desc2, sku2B, 9.95
name2, desc2, sku2C, 12.95
name3, desc3, sku3A, 49.95
Jeśli to pomoże, zamierzam importować te produkty do instalacji Magento.
Dziękuję z góry.
microsoft-excel
microsoft-excel-2010
csv
GreysonD
źródło
źródło
name1
i majądesc1
różne ceny za cenę A, cenę B, cenę C itp.Odpowiedzi:
Te zadania są zwykle szybsze dzięki VBA. W rzeczywistości zajęło mi to około 10 minut.
Zakładam, że Twoje dane znajdują się w kolumnach od A do H.
Przejdź do
Excel » Developer » Visual Basic
»W lewym okienku otwórzsheet1
(lub) arkusz, w którym znajdują się dane» Wstaw kod w prawym oknie »Uruchom kodKod VBA
Wyjaśnienie
Moim zamiarem było, aby kod był jak najkrótszy, aby lepiej go wyjaśnić. Zasadniczo używamy dwóch pętli. Zewnętrzna pętla (
i
) dotyczy wierszy, a wewnętrzna pętla (j
) dla kolumn cenowych.Często używamy
cells(rowNumber,columnNumber)
do odczytu / zapisu komórek.Wiersz 2 | Rozpocznij pętlę od rzędu 2 do ostatniego rzędu. Iterujemy przez każdy używany wiersz
Wiersz 3 | Rozpocznij drugą pętlę od 0 do 2 (w rzeczywistości są to 3 pętle, jedna na każdą kolumnę Cena)
Wiersz 4 | Używamy tej wewnętrznej pętli do sprawdzania wartości w naszym bieżącym wierszu i kolumnie Cena A, a następnie Cena B i w ostatniej pętli Cena C. Jeśli znajdziemy wartość w kolumnie Cena, kontynuujemy i kopiujemy komórki. Jeśli nie zostanie wstawiona cena, nic nie robimy i przechodzimy do następnej kolumny Cena
Wiersz 5 | Policz licznik, aby dowiedzieć się, ile wierszy już skopiowaliśmy,
dzięki czemu wiemy, po którym wierszu możemy skopiować nasz bieżący wiersz
Wiersz 6 | Skopiuj kolumnę nazwy
Wiersz 7 | Skopiuj kolumnę opisu
Linia 8 | Skopiuj kolumnę Cena A, B lub C w zależności od tego, jaką obecnie jesteśmy pętlą wewnętrzną
Linia 9 | Skopiuj kolumnę SKU A lub B lub C w zależności od tego, jaką obecnie jesteśmy pętlą wewnętrzną
Zrzut ekranu wyniku
źródło
Oto rozwiązanie funkcji arkusza roboczego. Formuły są nieco gęste, więc ostrzegam, ale da to, co chcesz.
Kroki:
Name
polu wpisz bezpośrednie odniesienie do pierwszegoName
w danych. W twoim przykładzie wprowadziłbyś,=A2
gdzie A2 jest imieniem wymienionym w twoich danych. W przykładowym zrzucie ekranu, który przedstawiłem poniżej, ta formuła wchodzi w gręA8
. Wszystkie poniższe formuły będą zgodne z układem zastosowanym na zrzucie ekranu. Będziesz oczywiście musiał zaktualizować wszystkie odwołania do zakresu, aby pasowały do arkusza (arkuszy).A9
), a jeśli liczba wierszy już w nowej tabeli pasuje do tego, to przechodzi do następnej nazwy. Jeśli nie, zostanie dodany kolejny wiersz dla powyższej nazwy.Wypełnij tę formułę tak daleko, jak potrzebujesz (dopóki nie zwróci 0 zamiast nazwy).
Description
wpisz następującą formułę i wypełnij.SKU
wklej następującą formułę na pasku formuły i naciśnij Ctrl+ Shift+ Enter. To jest formuła tablicowa; jeśli zostanie wpisany poprawnie, formuła pojawi się na pasku formuły w nawiasach klamrowych. Wypełnij tę formułę w dół tabeli (każde wystąpienie powinno również pojawić się w nawiasach klamrowych).Price
wklej następującą formułę do paska formuły i wprowadź ją jako formułę tablicową (naciskając Ctrl+ Shift+ Enter). Wypełnij, a to powinno uzupełnić twój stół.źródło