W programie Excel mam arkusz kalkulacyjny, który pobiera dane z bazy danych SQL do tabeli, a następnie generuje raport na podstawie tych danych. Niestety dane w tej bazie danych SQL są niekompletne i chcę uwzględnić dodatkowe wiersze w zestawie wyników, które są wprowadzane ręcznie do arkusza kalkulacyjnego.
Tak bardzo, jak chciałbym, nie mogę po prostu ręcznie wstawić tych dodatkowych wierszy do tabeli, ponieważ zostaną one usunięte, gdy Excel pobierze nowe dane z bazy danych SQL. Zamiast tego rozważam utworzenie osobnej tabeli z tymi samymi nagłówkami kolumn na nowym arkuszu i wprowadzenie tam danych, a następnie utworzenie trzeciej tabeli na innym arkuszu, który w jakiś sposób łączy wiersze z tabeli pobierającej dane z SQL i tabela, w której ręcznie wprowadzam dane. Jak mogę to osiągnąć? (Lub na przemian, czy istnieje lepszy sposób na zrobienie tego, którego w jakiś sposób brakuje?)
Przykład:
Table 1 (From Database):
| Person | Week Of | Task | Hours |
| Bob | 1/6/13 | Foo | 12 |
| Mary | 1/6/13 | Foo | 7 |
| Mary | 1/6/13 | Bar | 5 |
| John | 1/6/13 | Foo | 5 |
| John | 1/13/13 | Foo | 13 |
-
Table 2 (Entered Manually):
| Person | Week Of | Task | Hours |
| Bob | 1/6/13 | Baz | 3 |
| Mary | 1/6/13 | Baz | 2 |
| John | 1/13/13 | Baz | 5 |
-
Result:
| Person | Week Of | Task | Hours |
| Bob | 1/6/13 | Foo | 12 |
| Mary | 1/6/13 | Foo | 7 |
| Mary | 1/6/13 | Bar | 5 |
| John | 1/6/13 | Foo | 5 |
| John | 1/13/13 | Foo | 13 |
| Bob | 1/6/13 | Baz | 3 |
| Mary | 1/6/13 | Baz | 2 |
| John | 1/13/13 | Baz | 5 |
Odpowiedzi:
Oto czyste rozwiązanie Excel bez VBA. Działa przy użyciu funkcji INDEKS, aby obniżyć wiersze i kolumny kolumn danych SQL, aż wartości zostaną wyczerpane i wystąpi warunek błędu. Funkcja IFERROR wychwytuje błąd i wykorzystuje drugą funkcję INDEKS, aby obniżyć wiersze i kolumny kolumn ręcznie wprowadzonych danych, aż do wyczerpania tych wartości i pojawienia się błędu. Druga funkcja IFERROR wychwytuje błąd i zwraca myślnik („-”). (Dane SQL muszą zostać odświeżone za pomocą Wstążki, aby formuły mogły uzyskać poprawny wynik).
Utwórz dynamiczny nazwany zakres SQLDB dla danych SQL w Arkuszu 1, korzystając ze wzoru:
Utwórz drugi dynamiczny nazwany zakres EXCELRNG dla ręcznie wprowadzonych danych w arkuszu 2, korzystając ze wzoru:
Oba te nazwane zakresy zakładają, że nazwy zmiennych są wprowadzane w wierszu 1 każdego z dwóch arkuszy.
Wprowadź nazwy zmiennych w wierszu 1 arkusza 3 (zaczynając od komórki A1).
Wprowadź następującą formułę w komórce A2 arkusza3:
Skopiuj formułę do kolumn z nazwami zmiennych, a następnie w dół wierszy, aż wszystkie wyniki formuł staną się myślnikami („-”).
Następnym krokiem jest utworzenie tabeli przestawnej w innym arkuszu do analizy i organizacji.
Ponownie pierwszym krokiem byłoby utworzenie dynamicznego nazwanego zakresu, powiedzmy RESULTRNG, wstawienie następującej formuły w polu wejściowym Menedżera nazw dla nazwanego zakresu:
Następnie utwórz tabelę przestawną w nowym arkuszu, ustawiając RESULTRNG jako tabelę, którą chcesz analizować. Spowoduje to odfiltrowanie końcowych myślników z tabeli formuł w Arkuszu3.
Działa to, ponieważ formuła RESULTRNG zlicza całkowitą liczbę wierszy w Arkuszu 1 i Arkuszu 2 (z wyłączeniem nagłówka w Arkuszu 2) i całkowitą liczbę kolumn w Arkuszu 1 i ustawia swój zasięg na podstawie tych liczb, z wyłączeniem myślników w dowolnych końcowych wierszach ( lub kolumny) w tabeli z formułą Sheet3.
źródło
Znalazłem sposób na zrobienie tego. To rozwiązanie jest trochę trudne i wymaga, aby obie tabele miały własne oddzielne arkusze (bez żadnych innych elementów), ale poza tym robi prawie dokładnie to, czego chcę. (Wydaje się również, że istnieje tutaj duży potencjał do wykonywania bardziej złożonych operacji, takich jak przyłączenia.)
Przejdź do karty danych na wstążce, kliknij „Z innych źródeł” i „Z zapytania Microsoft”. Następnie kliknij Pliki Excel, wybierz plik, w którym obecnie pracujesz i kliknij OK. Następnie kliknij przycisk Anuluj, a kiedy pojawi się informacja, czy chcesz kontynuować edycję w Microsoft Query, kliknij „Tak”. Stąd możesz kliknąć przycisk SQL i napisać niestandardowe zapytanie SQL na dowolnym arkuszu w arkuszu kalkulacyjnym. W moim przypadku:
Uwaga: dla mnie ta metoda przestaje działać po zamknięciu pliku i ponownym otwarciu. W każdym razie zamieszczam go tutaj, na wypadek gdyby był to tylko problem z moim komputerem lub ktoś inny może go uruchomić.
źródło
Jeśli jesteś zainteresowany rozwiązaniem VBA, udało mi się uzyskać następujące działania:
Ustaw dynamiczny nazwany zakres dla danych, które pobierasz z SQL Server. Otwórz Menedżera nazw, wprowadź nową nazwę (powiedz „SQLDB”) i skopiuj następującą formułę w polu wejściowym Odnosi się do. Zakładam, że twoje pobrane dane są w Arkuszu1:
Ustaw inny nazwany zakres dla zakresu, w którym wprowadzane są dane ręczne. Użyłem nazwy EXCELRNG i założyłem, że była w Arkuszu 2. Nazwany zakres rozpoczyna się w wierszu 2, aby wykluczyć wiersz nagłówka. Wzór tutaj jest identyczny z pierwszym, z wyjątkiem arkusza, do którego się odnosi:
Oto pierwszy zestaw ustawień, których użyłem do połączenia z tabelą SQL. Dostęp do okna dialogowego można uzyskać, wybierając Połączenia na karcie Dane na Wstążce. Wyłączenie odświeżania w tle powoduje, że makro VBA zatrzymuje się do czasu zakończenia odświeżania danych w arkuszu Excel. Odświeżenie połączenia po otwarciu arkusza roboczego może nie być potrzebne, ale chciałem się upewnić, że uwierzytelnienie zostanie wykonane przed uruchomieniem makra.
Wreszcie jest to kod VBA. Aby wstawić, wybierz Visual Basic na karcie Deweloper. Podświetl nazwę arkusza na liście po lewej stronie. Będzie on oznaczony jako „Projekt VBA (nazwa arkusza). Następnie wybierz Wstaw moduł na pasku menu u góry ekranu i wklej kod w nowym module. Pamiętaj, że umieściłem skonsolidowaną tabelę w arkuszu 3. Jak napisano, makro nie sortuje nowej tabeli, choć nie byłoby to trudne do dodania.
źródło
Oto wersja rozwiązania „Pure Excel” @ chuff zaprojektowanego specjalnie do pracy z tabelami. (IE Dwa źródła danych, które chcesz scalić, to tabele).
Główną różnicą między tą metodą a tym, co napisano w jego odpowiedzi, jest to, że nie trzeba definiować nazwanych zakresów dla dwóch zestawów danych, które scalasz, ponieważ są to tabele i mają już swój własny nazwany zakres. Więc idź naprzód i nazwij swój pierwszy stół
Table1
i drugi stółTable2
.Teraz utwórz nową tabelę w lewym górnym rogu nowego arkusza i nadaj jej takie same nazwy kolumn, jak pozostałe dwie tabele. Następnie wprowadź następującą formułę w komórce A2 właśnie utworzonego arkusza:
Następnie skopiuj tę formułę we wszystkich kolumnach tabeli, a następnie w dół wierszy, aż wszystkie wyniki formuł staną się myślnikami („-”). Uwaga: Sortowanie tej nowej tabeli nic nie da, ponieważ zawartość każdej komórki jest w rzeczywistości identyczna (wszystkie zawierają tę samą formułę).
Jeśli kolumny w scalonej tabeli wyświetlają 0, kiedy powinny wyświetlać pustą komórkę, możesz owinąć formułę w tej kolumnie za pomocą funkcji zastępczej, jak poniżej:
Jeśli chcesz utworzyć tabelę przestawną, która wykorzystuje dane z tej nowej tabeli, musisz utworzyć nazwany zakres. Najpierw nazwij tabelę
Table3
. Teraz przejdź do karty formuł i kliknij „Zdefiniuj nazwę”. Nadaj referencji nazwę, wprowadź następujące równanie jej wartości („Odnosi się do”):Następnie można użyć tego nazwanego odwołania jako zakresu dla tabeli przestawnej.
źródło
Jeśli chcesz otrzymać wynik jednorazowo, istnieje strona internetowa, która połączy dwie tabele: https://office-tools.online/table/merge/
Wklej tabele do strony internetowej i wybierz odpowiednie parametry. Oto zrzut ekranu z wbudowanego przykładu, który wskazuje, jak go używać:
źródło