Wpis z mikrobloga

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
Kluska1337 - Mirki mam problem z #VBA. Kumpel podesłał mi jakieś zadanie żebym pomógł...

źródło: comment_96MmCXhsFZteSpmePPfsLWrElJsexDTW.jpg

Pobierz
  • 13
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@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 - @Krukosz: dokładnie, jeden wiersz odpowiada za ucznia
@brak_nicku: w ty...

źródło: comment_P4THWMhR8MqNuuWzUZUBktlOKNec4ALg.jpg

Pobierz
  • Odpowiedz
@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
  • Odpowiedz
@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.
  • Odpowiedz
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
  • Odpowiedz
@brak_nicku:

Range("A6") = WorksheetFunction.Match(Range("C3").Value, Sheets("Baza danych").Range("J2:J13").Value, 0)


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
  • Odpowiedz
@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
  • Odpowiedz
- 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
  • Odpowiedz
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
  • Odpowiedz