Makro Excel - Dynamiczny wybór kolumny
- Kwestia
- Rozwiązanie
- Uwaga
Kwestia
Właśnie zaczynam uczyć się makr Excela. Pracowałem nad arkuszem, w którym muszę wybrać kolumnę dynamicznie, na podstawie nazwy nagłówka kolumny. Pozwól mi wyjaśnić.
Powiedzmy, że jest arkusz Excela, który zawiera następujące kolumny (od A1 do D1):
RecNo Cust_ID Cust_Name Contact_Num
Poniżej znajdują się dane klienta. Teraz chcę wyodrębnić tylko Cust_ID (z kolumny B) i Cust_Name (z kolumny C) dla wszystkich rekordów.
Problem polega jednak na tym, że nie jest konieczne, aby identyfikator Cust_ID zawsze znajdował się w kolumnie B. Chociaż nagłówek będzie zawsze identyfikatorem Cust_ID, jego lokalizacja może zmienić się na kolumnę C w innym wygenerowanym arkuszu, a zamiast tego nazwa Cust_Name mogłaby być obecna w Kolumna B (dwie kolumny, które należy wyodrębnić zostały zamienione).
Korzystając z funkcji dopasowania, jestem w stanie określić pozycję kolumny, ale potem nie mogę wybrać tej kolumny.
Funkcja, której użyłem do określenia numeru kolumny, jest podana poniżej:
WorksheetFunction.Match („Cust_ID”, zakres („A1: D1”), 0)
Rozwiązanie
Po prostu użyj tych:
„Określanie zakresu arkusza danych. Dim lngLastRow As Long Dim lngLastCol As Long Dim varDataSelect As Variant 'Wybierz wiersze i kolumny dynamicznie. Selection.End (xlDown) .Wybierz lngLastRowNum = ActiveCell.Row Selection.End (xlToRight). Wybierz lngLastCol = ActiveCell.Column 'Nazwa arkusza roboczego' MonthlyReceivedClaims_Data 'zacznij od wiersza 1 Kolumna 1' i zakończ na ": R" & lngLastRowNum & "C" & lngLastCol varDataSelect = "MonthlyReceivedClaims_Data! R1C1: R" & lngLastRowNum & "C" & lngLastCol ActiveWorkbook.PivotCaches.Add (SourceType: = xlDatabase, SourceData: = _ varDataSelect) .CreatePivotTable _ TableDestination: = "", Nazwa tabeli: = "Tabela przestawna1", DefaultVersion: = _ xlPivotTableVersion10 ActiveSheet.PivotTableWizard TableDestination: = ActiveSheet.Cells (3, 1)
„Pomaga także użyć funkcji makro zapisu w menu Narzędzia.
„Kliknij rekord. Utwórz raport lub tabelę przestawną, jak chcesz.
Następnie kliknij przycisk Zatrzymaj nagrywanie i edytuj kod w razie potrzeby.
Uwaga
Podziękowania dla AM za tę poradę na forum.