ID tematu: 75249
|
Kopiowanie danych z dwóch kolumn do drugiego arkusza |
Autor |
Wiadomość |
nina1
Exceloholic
Wersja: Win Office 2016
Posty: 120
|
Wysłany: 21-11-2023, 19:47 Kopiowanie danych z dwóch kolumn do drugiego arkusza
|
|
|
Witajcie, mam kod, który po znalezieniu określonego tekstu w kolumnie C, kopiuje zawartość z kolumny A z tego samego wiersza. Proszę o pomoc w modyfikacji poniższego kodu, aby kopiował też dane dodatkowo z kolumny B. Dodatkowo, jeśli nie znajdzie w ogóle wyszukiwanego tekstu, to aby informował przy pomocy Msgbox
Kod: | Sub kopiuj()
lastZ = Sheets("dane").Cells(65536, 1).End(xlUp).Row
lastW = Sheets("wynik").Cells(65536, 1).End(xlUp).Row
If lastW < 2 Then lastW = 2
Sheets("wynik").Range("A2:A" & lastW).ClearContents
x = 2
For Each kom In Sheets("dane").Range("C1:C" & lastZ)
If kom = "szukany tekst" Then
Sheets("wynik").Range("A" & x) = kom.Offset(0, -2)
x = x + 1
End If
Next kom
End Sub |
|
|
| ID posta:
431413
|
|
|
|
|
|
|
hurgadion
ExcelSpec
Wersja: Win Office 2021
Pomógł: 1214 razy Posty: 2803
|
Wysłany: 21-11-2023, 20:00
|
|
|
Hej,
zamiast kodu
Kod: |
Sheets("wynik").Range("A2:A" & lastW).ClearContents
x = 2
For Each kom In Sheets("dane").Range("C1:C" & lastZ)
If kom = "szukany tekst" Then
Sheets("wynik").Range("A" & x) = kom.Offset(0, -2)
x = x + 1
End If
Next kom
|
wklej kod
Kod: |
Sheets("wynik").Range("A2:B" & lastW).ClearContents
x = 2
For Each kom In Sheets("dane").Range("C1:C" & lastZ)
If kom = "szukany tekst" Then
Sheets("wynik").Range("A" & x) = kom.Offset(0, -2)
Sheets("wynik").Range("B" & x) = kom.Offset(0, -1)
x = x + 1
End If
Next kom
If x=2 Then MsgBox "Nie znaleziono"
|
W kodzie masz niezadeklarowane zmienne, przetestuj kod (pisałem z palca) i napisz jak to działa, pozdrawiam |
|
| ID posta:
431414
|
|
|
|
|
|
nina1
Exceloholic
Wersja: Win Office 2016
Posty: 120
|
Wysłany: 22-11-2023, 09:54
|
|
|
Działa super. Mam jeszcze jedną prośbę. Jeśli arkuszu "dane" w kolumnie C jest "szukany tekst", ale w kolumnie B jest pusto, to aby zwracał msgbox "brak danych w kolumnie B" |
|
| ID posta:
431428
|
|
|
|
|
|
hurgadion
ExcelSpec
Wersja: Win Office 2021
Pomógł: 1214 razy Posty: 2803
|
Wysłany: 22-11-2023, 10:11
|
|
|
Spróbuj może po linijce:
Kod: |
If x=2 Then MsgBox "Nie znaleziono"
|
dodać następujący kod:
Kod: |
If Sheets("dane").Cells(Rows.Count, 2).End(xlUp).Row < 2 Then MsgBox "Brak danych w kolumnie B"
|
Pozdrawiam |
|
| ID posta:
431430
|
|
|
|
|
|
nina1
Exceloholic
Wersja: Win Office 2016
Posty: 120
|
Wysłany: 22-11-2023, 11:58
|
|
|
Ok, tylko teraz wyświetla oba msgbox'y, jeśli dodatkowo pierwszy warunek jest spełniony MsgBox "Nie znaleziono", a jest on w takim przypadku zbędny |
|
| ID posta:
431436
|
|
|
|
|
|
Tajan
Pomógł: 5573 razy Posty: 12088
|
Wysłany: 22-11-2023, 12:13
|
|
|
Komunikat wstaw na początku makra.
Na przykład tak:
Kod: | Sub kopiuj()
If Sheets("dane").Cells(Rows.Count, 2).End(xlUp).Row < 2 Then
MsgBox "Brak danych w kolumnie B"
Exit Sub
End If
lastZ = Sheets("dane").Cells(65536, 1).End(xlUp).Row
lastW = Sheets("wynik").Cells(65536, 1).End(xlUp).Row
If lastW < 2 Then lastW = 2
Sheets("wynik").Range("A2:A" & lastW).ClearContents
x = 2
For Each kom In Sheets("dane").Range("C1:C" & lastZ)
If kom = "szukany tekst" Then
Sheets("wynik").Range("A" & x) = kom.Offset(0, -2)
Sheets("wynik").Range("B" & x) = kom.Offset(0, -1)
x = x + 1
End If
Next kom
If x=2 Then MsgBox "Nie znaleziono"
End Sub |
|
|
| ID posta:
431438
|
|
|
|
|
|
nina1
Exceloholic
Wersja: Win Office 2016
Posty: 120
|
Wysłany: 22-11-2023, 12:46
|
|
|
Teraz w obu przypadkach wyświetla tylko ten msgbox "Brak danych w kolumnie B", gdyż spełnia ten sam warunek dla obu msgbox'ów.
Poprawnie powinno tak wyświetlać:
"Brak danych w kolumnie B" powinno wyświetlać wtedy, gdy w kolumnie C jest "szukany tekst", a w kolumnie B jest pusto
"szukany tekst" powinno wyświetlać wtedy, gdy w B i C jest pusto |
|
| ID posta:
431440
|
|
|
|
|
|
Tajan
Pomógł: 5573 razy Posty: 12088
|
Wysłany: 22-11-2023, 13:16
|
|
|
No, to może tak:
Kod: | Sub kopiuj()
lastZ = Sheets("dane").Cells(65536, 1).End(xlUp).Row
lastW = Sheets("wynik").Cells(65536, 1).End(xlUp).Row
lastB = Sheets("dane").Cells(Rows.Count, 2).End(xlUp).Row
If lastW < 2 Then lastW = 2
Sheets("wynik").Range("A2:A" & lastW).ClearContents
x = 2
For Each kom In Sheets("dane").Range("C1:C" & lastZ)
If kom = "szukany tekst" Then
Sheets("wynik").Range("A" & x) = kom.Offset(0, -2)
Sheets("wynik").Range("B" & x) = kom.Offset(0, -1)
x = x + 1
End If
Next kom
If x > 2 And lastB < 2 Then
MsgBox "Brak danych w kolumnie B"
ElseIf x = 2 Then
MsgBox "Nie znaleziono"
End If
End Sub
|
|
|
| ID posta:
431444
|
|
|
|
|
|
nina1
Exceloholic
Wersja: Win Office 2016
Posty: 120
|
Wysłany: 26-11-2023, 21:42
|
|
|
dziękuję Panowie za pomoc |
|
| ID posta:
431609
|
|
|
|
|
|
|
Nie możesz pisać nowych tematów Nie możesz odpowiadać w tematach Nie możesz zmieniać swoich postów Nie możesz usuwać swoich postów Nie możesz głosować w ankietach Nie możesz załączać plików na tym forum Możesz ściągać załączniki na tym forum
|
Dodaj temat do Ulubionych Wersja do druku
|
|
Strona uĹźywa plikĂłw cookies.
Kliknij tutaj, Ĺźeby dowiedzieÄ siÄ jaki jest cel uĹźywania cookies oraz jak zmieniÄ ustawienia cookie w przeglďż˝darce.
KorzystajÄ
c ze strony uĹźytkownik wyraĹźa zgodÄ na uĹźywanie plikĂłw cookies, zgodnie z bieĹźÄ
cymi ustawieniami przeglÄ
darki.
SprawdĹş, w jaki sposĂłb przetwarzamy dane osobowe
|