Jak skopiować dane z jednego arkusza programu Excel do innego za pomocą formuły
To FAQ przeprowadzi Cię przez proces kwalifikowania i przenoszenia danych.
Kopiowanie danych z jednego arkusza programu Excel do innego za pomocą wzoru
Rozpocznij od otwarcia karty programisty w programie Excel.Następnie musisz skonstruować UserForm Sheet Controller UserForm. Ten UserForm pozwala wybrać miejsce, z którego dane są przenoszone, gdzie dane są przenoszone, jaką kolumnę sprawdzić dane kwalifikujące, aby określić, czy się porusza, i jaka powinna być wartość wpisu kolumny, aby go przenieść.
Podczas tworzenia formularza UserForm należy wykonać kopię lustrzaną następującego przykładu, zwracając uwagę na poprawne nazywanie każdego kontrolki:
Teraz, gdy skonstruowałeś Userform, musisz dołączyć kod do każdej kontrolki. W formularzu użytkownika kliknij dwukrotnie formant o nazwie CommandButton2 . Schemat formularza użytkownika nie powinien być już widoczny, a teraz powinien zostać wyświetlony eksplorator kodu z domyślnym blokiem kodu. Ten konkretny blok kodu zaczyna się od Private Sub ComandButton2_Click () . Umieść kursor pod pierwszą linią, ale przed linią, która mówi End Sub . Teraz wprowadź następujący kod, aby skonfigurować zmienne publiczne do zastosowania w pozostałej części kodu:
Wróć do Eksploratora UserForm i kliknij dwukrotnie kontrolkę oznaczoną CommandButton3 . Po raz kolejny UserForm zostaje odłożony na przeglądarkę kodów. Umieść kursor na nowo utworzonym bloku kodu i wprowadź następujący kod:
W sekcji Eksplorator Eksploratora projektu kliknij prawym przyciskiem myszy Obiekty Microsoft Excel . Wybierz Wstaw > Moduł .
Kliknij dwukrotnie moduł o nazwie Module1 i wpisz następujące zmienne publiczne:
Teraz idź dalej i włóż trzy dodatkowe arkusze do skoroszytu. Powinieneś mieć teraz cztery arkusze o nazwie Arkusz1, Arkusz2, Arkusz3 i Arkusz4 .
Na Sheet1 umieść elementy w około 10-15 liniach, używając poniższego obrazu jako przykładu danych testowych:
Następnie na karcie Deweloper (nad skoroszytem) kliknij opcję Elementy sterujące > Wstaw > ikonę przycisku :
Teraz umieść przycisk w dowolnym miejscu na arkuszu. Gdy pyta o makra, wybierz Nowy .
Zauważysz, że umieścił nowe makro w Module2 projektu. Zaznacz blok kodu w Module2, odetnij go od Module2 . Teraz kliknij dwukrotnie Module1 . Po otwarciu Eksploratora kodu kliknij prawym przyciskiem myszy i wybierz Wklej . Powinieneś teraz mieć pusty blok kodu, który brzmi:
Umieść kursor wewnątrz bloku kodu i dodaj następujący kod:
Zauważysz, że istnieje funkcja o nazwie Buildform . Powoduje to utworzenie UserForm dla odpowiedniej liczby arkuszy po ich spisaniu. Aby to zastosować, umieść następujący kod w Eksploratorze kodu, poniżej procedury Button1_Click () :
W funkcji buildform znajduje się inna funkcja o nazwie Counttabs . Powinieneś umieścić ten kod powyżej kodu Buildform, ale poniżej podprogramu Button1_click :
Jeśli ustawione są zarówno zmienne TabFrom, jak i TabTo, należy uruchomić funkcję createNew () . Umieść poniższy kod w Eksploratorze kodu, powyżej podprogramów Button1_click :
Jeśli wybrałeś utworzenie nowego arkusza, zmień zmienną TabTo na nową nazwę arkusza. Następnie musisz uruchomić procedurę LoopForMove (TabFrom, TabTo) . W Eksploratorze kodu wprowadź następujący kod:
Aby znaleźć ostatni wiersz arkusza, wprowadź poniższy kod do Eksploratora kodu, powyżej LoopForMove (ZWhatSheet, ToWhatSheet) :
Teraz będziesz mógł przenieść rzeczywisty kod za pomocą funkcji Moveit (FromWhatSheet, CellLoc, ToWhatSheet, CutVal) . Pomiędzy funkcjami LooForMove () i createNew () umieść następujący kod:
Kontynuuj pętlę w każdej linii na arkuszu Z, szukając zakwalifikowanych wpisów, używając funkcji Do pętli .
Podsumowując działania UserForm, zobacz następującą ilustrację:
Oto ta sama ilustracja, tym razem z większą liczbą elementów branych pod uwagę:
Wreszcie, tutaj jest wspomniany kod w całości:
Opcja WyraźnaKarta publiczna Od
Public TabTo
Public Qualif As String
Public WhatCol
Public WhatLogic
Public CutVal
Public FormXcel
Funkcja FindLastRow (OnWhatsheet)
FindLastRow = Komórki (ThisWorkbook.Worksheets (OnWhatsheet) .Rows.Count, 1) .End (xlUp) .Row
Zakończ funkcję
Funkcja LoopForMove (FromWhatSheet, ToWhatSheet)
Dim LastRow, Cnt
Dim CellValue As String
Dim CellLoc
Dim nret
If WhatCol = "" Następnie
WhatCol = „A”
Zakończ jeśli
Jeśli Qualif = "" Następnie
Qualif = „X”
Zakończ jeśli
ThisWorkbook.Worksheets (FromWhatSheet) .Wybierz
LastRow = FindLastRow (FromWhatSheet)
Dla Cnt = LastRow Do 1 kroku -1
CellLoc = WhatCol & Cnt
CellValue = ThisWorkbook.Worksheets (FromWhatSheet) .Range (CellLoc) .Value
Jeśli CellValue = Kwalifikuj się wtedy
nret = Moveit (FromWhatSheet, CellLoc, ToWhatSheet, CutVal)
Zakończ jeśli
Kolejny
Zakończ funkcję
Funkcja Moveit (FromSheet, WhatRange, ToWhere, CutVal)
Dim MoveSheetLastRow
Z ThisWorkbook.Worksheets (FromSheet)
.Wybierz
.Range (WhatRange) .EntireRow.Select
Kończyć z
Wybór. Kopiuj
Jeśli CutVal = True Then
Selection.Cut
Zakończ jeśli
MoveSheetLastRow = FindLastRow (ToWhere)
ThisWorkbook.Worksheets (ToWhere) .Wybierz
ThisWorkbook.Worksheets (ToWhere) .Cells (MoveSheetLastRow + 1, 1) .EntireRow.Select
Selection.Insert
ThisWorkbook.Worksheets (FromSheet) .Wybierz
Application.CutCopyMode = False
Zakończ funkcję
Funkcja createNew ()
Dim NewSheet
If TabTo = "Nowy arkusz" Następnie
ThisWorkbook.Sheets.Add After: = Sheets (Sheets.Count)
NewSheet = ThisWorkbook.ActiveSheet.Name
TabTo = NewSheet
Zakończ jeśli
Zakończ funkcję
Sub Button1_Click ()
Dim nret
buildform
Jeśli FormXcel = False Then
Jeśli TabFrom "" I TabTo "" Następnie
tworzyć nowe
nret = LoopForMove (TabFrom, TabTo)
Jeszcze
MsgBox („Proszę ustawić arkusz„ Od ”i„ Do ”!”)
Zakończ jeśli
Zakończ jeśli
Napis końcowy
Funkcje Counttabs ()
Liczniki = ThisWorkbook.Worksheets.Count
Zakończ funkcję
Funkcja buildform ()
Dim TabCount
Controller.ComboBox2.AddItem „Nowy arkusz”
Dla TabCount = 1 Do Counttabs
Controller.ComboBox1.AddItem ThisWorkbook.Worksheets (TabCount) .Name
Controller.ComboBox2.AddItem ThisWorkbook.Worksheets (TabCount) .Name
Kolejny
Controller.Show
Zakończ funkcję
Dziękujemy ace3mark za tę wskazówkę.
Obraz: © Microsoft.