Mirki mam problem z #vba. Kumpel podesłał mi jakieś zadanie żebym pomógł mu rozwiązać w #excel. Mam komórkę do której chce przypisać ocene ucznia z kolumny. Jak iterować po kolumnie każdego ucznia? Chciałem to rozwiązać w taki sposób że numer w dzienniku ucznia z innego arkuszu z danymi będzie iteratorem. Checkboxem "aktywuje" wyświetlanie oceny". Byłym w swoim i jego imieniu wdzięczny za pomoc :) #programowanie #office
@Krukosz: dokładnie, jeden wiersz odpowiada za ucznia @brak_nicku: w tym momencie po naciśnięciu na każdego checkboxa pokazuje mi się ocena tylko pierwszej osoby na liście. Chcę żeby po każdym naciśnięciu checkboxa wyświetlała się osoba, do której nalezą te oceny. Czyli w tym przypadku jesli na liście jest osoba 3 w dzienniku po naciśnięciu checkboxa pokażą sie jej oceny. Chciałem iterować po numerz z dziennika który jest w komórce
@Kluska1337: Przy takim prostym zastosowaniu nie musisz używać dodatkowych numerów. Po wybraniu czegoś w checkboxie uruchamiasz pętle (for), która leci po kolumnie K z drugiego arkusza i porównuje czy dane są zgodne. Jeżeli znajdzie dopasowanie to wtedy odczytujesz wartość iteratora z pętli i odczytujesz pozostałe oceny w danym wierszu
@Krukosz: Czyli For i=pierwszywierszucznia to ostatniwierszucznia Jak znajdzie porównanie to możesz użyć Worksheets("dane").Cells(i,kolumnanazwisko).Offset(0,1).Value - przykład dla ekonomii.
@Kluska1337 po co pętla? To się matchem robi - szukasz w kolumnie ucznia, funkcja zwraca pozycje a oceny wpisujesz 1:1 z wskazanego wiersza do komórek w arkuszu.
w tym momencie po naciśnięciu na każdego checkboxa pokazuje mi się ocena tylko pierwszej osoby na liście. Chcę żeby po każdym naciśnięciu checkboxa wyświetlała się osoba, do której nalezą te oceny. Czyli w tym przypadku jesli na liście jest osoba 3 w dzienniku po naciśnięciu checkboxa pokażą sie jej oceny. Chciałem iterować po numerz z dziennika który jest w komórce C3
@Kluska1337: tu naprawdę nie ma czego iterować... wystarczy albo
w ten sposób w komórce A6 mam adres z ID z bazy danych. Jak teraz zrobić offset do tej komórki z tego drugiego arkusza aby pojawiało sie w A6 w pierwszym arkuszu?
@Kluska1337: Jak masz te ID to offset zrobisz funkcją... Offset:
Sheets("Baza danych").Range("L1").Offset(ID).Value Tylko to i tak wygląda zdecydowanie bardziej skomplikowanie niż powinno, ale ciężko pomóc, jak: - nie wiadomo w jaki sposób jest wypełniana komórka C3 - co jest w kolumnie J w Baza danych
- nie wiadomo w jaki sposób jest wypełniana komórka C3
- co jest w kolumnie J w Baza danych
@brak_nicku: Komórka C3 jest na tym pierwszym zdjęciu z numerem z dziennika osoby. a Kolumna J jest w drugim arkuszu z danymi i odpowiada za ID ucznia. Range("A6") = WorksheetFunction.Match(Range("C3").Value, Sheets("Baza danych").Range("J2:J13").Value, 0) W tej linijce poprostu szukam w kolumnie J (czyli z id ucznia) rekordu, gdzie pokrywa się z C3
Mam nadzieje że teraz jest bardziej zrozumiale wytłumaczone :D
@Kluska1337: Jak zrobić offset to już napisałem wyżej, mając ID. Tylko nadal nie wiem, co to za ID i czym się różni od tego co jest w komórce C3... Jeśli C3 to pozycja ucznia na liście, to w komórce A6 wystarczy wstawić:
Range("A6") = Sheets("Baza danych").Range("L1").Offset(Range("C3").value).Value Czyli mówiąc po chłopsku - w A6 wstaw wartość przesuniętą względem L1 z drugiego arkusza o
#programowanie #office
źródło: comment_96MmCXhsFZteSpmePPfsLWrElJsexDTW.jpg
Pobierz@brak_nicku: w tym momencie po naciśnięciu na każdego checkboxa pokazuje mi się ocena tylko pierwszej osoby na liście. Chcę żeby po każdym naciśnięciu checkboxa wyświetlała się osoba, do której nalezą te oceny. Czyli w tym przypadku jesli na liście jest osoba 3 w dzienniku po naciśnięciu checkboxa pokażą sie jej oceny. Chciałem iterować po numerz z dziennika który jest w komórce
źródło: comment_P4THWMhR8MqNuuWzUZUBktlOKNec4ALg.jpg
PobierzPo wybraniu czegoś w checkboxie uruchamiasz pętle (for), która leci po kolumnie K z drugiego arkusza i porównuje czy dane są zgodne. Jeżeli znajdzie dopasowanie to wtedy odczytujesz wartość iteratora z pętli i odczytujesz pozostałe oceny w danym wierszu
Jak znajdzie porównanie to możesz użyć Worksheets("dane").Cells(i,kolumnanazwisko).Offset(0,1).Value - przykład dla ekonomii.
@Kluska1337: tu naprawdę nie ma czego iterować... wystarczy albo
w ten sposób w komórce A6 mam adres z ID z bazy danych. Jak teraz zrobić offset do tej komórki z tego drugiego arkusza aby pojawiało sie w A6 w pierwszym arkuszu?
napewno to jest jakies banalne a ja błądze xD
Sheets("Baza danych").Range("L1").Offset(ID).ValueTylko to i tak wygląda zdecydowanie bardziej skomplikowanie niż powinno, ale ciężko pomóc, jak:
- nie wiadomo w jaki sposób jest wypełniana komórka C3
- co jest w kolumnie J w Baza danych
@brak_nicku: Komórka C3 jest na tym pierwszym zdjęciu z numerem z dziennika osoby. a Kolumna J jest w drugim arkuszu z danymi i odpowiada za ID ucznia.
Range("A6") = WorksheetFunction.Match(Range("C3").Value, Sheets("Baza danych").Range("J2:J13").Value, 0)
W tej linijce poprostu szukam w kolumnie J (czyli z id ucznia) rekordu, gdzie pokrywa się z C3
@Kluska1337: Jak zrobić offset to już napisałem wyżej, mając ID. Tylko nadal nie wiem, co to za ID i czym się różni od tego co jest w komórce C3... Jeśli C3 to pozycja ucznia na liście, to w komórce A6 wystarczy wstawić:
Range("A6") = Sheets("Baza danych").Range("L1").Offset(Range("C3").value).ValueCzyli mówiąc po chłopsku - w A6 wstaw wartość przesuniętą względem L1 z drugiego arkusza o