logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[Excel 2003 VBA] Jak w Excel 2003 VBA wypełnić zakres liczbami i obliczyć sumę kwadratów?

bbxb 15 Kwi 2008 09:58 7975 12
REKLAMA
  • #1 5032152
    bbxb
    Poziom 31  
    Posty: 2271
    Pomógł: 147
    Ocena: 94
    Witam!
    Mam wykonać takie coś:
    Wypełnić zaznaczony prostokątny zakres komórek arkusza liczbami losowymi z przedziału <100,1000>. Napisać makro, które nadaje zakresowi nazwę wprowadzaną przez użytkownika w oknie InputBox, oblicza sumę kwadratów liczb z tego zakresu i wyświetla wynik w oknie dialogowym MsgBox. Przypisać makro do obiektu w arkuszu.

    W załączniku znajduję się skromny plik tego co wykonałem. Czy możecie mi jakoś podpowiedzieć jak wykonać resztę rzeczy?? Chociaż jakieś wskazówki, sugestie....


    Pozdrawiam serdecznie
  • REKLAMA
  • Pomocny post
    #2 5032521
    Zbych034
    Poziom 39  
    Posty: 4698
    Pomógł: 550
    Ocena: 1418
    Na załączniku mam tylko wstawiony obrazek (może dlatego iż mam openoffica).
  • #3 5032717
    bbxb
    Poziom 31  
    Posty: 2271
    Pomógł: 147
    Ocena: 94
    Tak to pewnie dlatego....
    A jak klikniesz w ten obrazek?

    Mam kilka pytań:
    1) Jak wypełnić zaznaczony zakres liczbami? Mogą być nawet same 111...
    2) Jak sprawdzić czy zaznaczony zakres jest prostokątem??


    Pozdrawiam.
    Dołączam nowy programik jaki ulepiłem:
  • Pomocny post
    #4 5033709
    jakubw
    Poziom 18  
    Posty: 134
    Pomógł: 35
    Ocena: 6
    No ja myślę, że wypadało by pobierany zakres podstawić gdzieś i rozebrać na czynniki.
    Czyli ilość wierszy, i ilość kolumn odkąd dokąd.
    Później już z górki.
    W pętli machasz generatorkiem liczb pseudolosowych
    czyli ....
    ( co więcej od razu możesz w momencie wstawiania liczby liczyć już sumę kwadratów, żeby skrócić kod )
    ...
    Przykladowo zaznaczyles C5:F10
    
    sumakwadratow=0
    
    for wiersz=5 to 10
         for kolumna=3 to 6
              cells(wiersz.kolumna).select
              liczba=wylosuj liczbe z zakresu<100,1000>
              Activecell.value=liczba       
              sumakwadratow=sumakwadratow+liczba*liczba
         next kolumna
    next wiersz
    


    Dzieki temu masz wypełnione i już obliczone
    Wyświetlenie sumy już proste bez liczenia

    Nie podaje dokladnego kodu bo nie znam na pamięć poleceń

    Ale za to bardzo podoba mi się Twoja forma :D
  • REKLAMA
  • #5 5034166
    bbxb
    Poziom 31  
    Posty: 2271
    Pomógł: 147
    Ocena: 94
    Dzięki za odpowiedź.
    Trochę już dorobiłem. W załączniku zamieszczam najnowszą wersję :)
    Mam kilka pytań:

    1. Jak sprawdzić czy zaznaczony obszar jest prostokątem [tzn. jest inny niż kwadrat] ??
    2. Jak obliczyć sumę kwadratów liczb z tego zakresu ?? [ta liczba wyjdzie chyba bardzo duża!]

    Proszę o ogólną ocenę kodu i jakieś sugestie. Mam też zrobić prostą obsługę błędu.


    Pozdrawiam.
    P.S Wszyscy dostają punkty bez wyjątku!
  • REKLAMA
  • Pomocny post
    #6 5034250
    jakubw
    Poziom 18  
    Posty: 134
    Pomógł: 35
    Ocena: 6
    Odpowiadam więc ponownie :)

    1. Obszar jest kwadratem jeśli liczba wierszy nie równa się liczbie kolumn.
    Aczkolwiek nie wiem po co Ci to.

    2. Sumę kwadratów masz w poprzedniej odpowiedzi wiec tylko dodaj to do obecnego swojego kodu.

    tylko , że zmienna "sumakwadratów" w tym przypadku powinna być globalnie zadefiniowana

    Pozdrawiam

    P.S. A po co definiujesz nazwę obszaru skoro nigdzie jej nie wprowadzasz ani nie wyświetlasz ?
  • #7 5034597
    bbxb
    Poziom 31  
    Posty: 2271
    Pomógł: 147
    Ocena: 94
    Cytat:
    1. Obszar jest kwadratem jeśli liczba wierszy nie równa się liczbie kolumn.
    Aczkolwiek nie wiem po co Ci to.


    Treść zadania podana przeze mnie w pierwszym poście:
    Wypełnić zaznaczony prostokątny zakres komórek...


    Cytat:
    P.S. A po co definiujesz nazwę obszaru skoro nigdzie jej nie wprowadzasz ani nie wyświetlasz ?

    To jest zadanie domowe z uczelni. Będę bronił kodu na oczach całej sali :) Musi być kod czytelny.
  • Pomocny post
    #8 5034724
    jakubw
    Poziom 18  
    Posty: 134
    Pomógł: 35
    Ocena: 6
    No to troszkę się zdziwiłem, bo ....
    każdy kwadrat jest prostokątem, czyli jeśli ktoś zaznaczy
    3x3 to też będzie dobre zaznaczenie.
    ( a... nie każdy prostokąt kwadratem )
    Sądzę ( ale mogę się oczywiście mylić - jak każdy :D ), że to tylko tak sformułowane zadanie.
    Czyli nie musisz robić warunku na wiersze<>kolumny,
    bo Cię facet może pogonić za to że nie wiesz powyższego z matmy.

    A jak udowodnisz , że nazwałeś obszar ?
    Lepiej żeby ta nawza jednak gdzieś się pokazała.
    Możesz to wpisac do komórki albo chociaż wywalić MsgBoxa.
    Wtedy będzie każdy widział, że obszar został nazwany.

    A...jakaż to uczelnia tak stresuje studentów ( aczkolwiek dobra to forma, bo nawet jak ktoś komuś napisze to musi go nauczyć wytłumaczyć czyli tym samym i tak się gośc nauczy )

    Pozdrawiam
  • #9 5036165
    bbxb
    Poziom 31  
    Posty: 2271
    Pomógł: 147
    Ocena: 94
    Ok, poprawiłem co umiałem :)
    Ale za ch*** nie wiem jak wyliczyć tą sumę kwadratów.... czy możesz rzucić okiem w kod źródłowy i mi coś podpowiedzieć??

    Załączam najnowszą wersję.


    Pozdrawiam.
    P.S A uczelnia to www.wit.edu.pl. Bardzo wysoki poziom.
  • #10 5036212
    bbxb
    Poziom 31  
    Posty: 2271
    Pomógł: 147
    Ocena: 94
    Już mam!!!

    Teraz walczę nad drugiem - ostatnim - zadaniem.

    Czy możesz mi powiedzieć jak to ugryźć??

    Napisać funkcję użytkownika, która oblicza iloczyn k pierwszych cyfr zadanej liczby. Argumentami funkcji są: wielocyfrowa całkowita liczba dodatnia oraz liczba całkowita k, k < liczba cyfr zadanej liczby. Zastosować funkcję w arkuszu.
    Następnie przypisać do obiektu w arkuszu procedurę, która wywołuje funkcję i wyświetla wynik w oknie MsgBox. Umieścić w arkuszu kontrolki lub okna InputBox do wprowadzania argumentów funkcji.
    Wskazówka.
    Można zastosować funkcje VBA Len(string), Mid(String, Start As Long, [Length]).



    Pozdrawiam!!
  • Pomocny post
    #11 5036653
    jakubw
    Poziom 18  
    Posty: 134
    Pomógł: 35
    Ocena: 6
    Fajna Szkoła

    może by pójść tam na uzupełniające ...hmmm ...

    wracając do tematu

    
    Sub iloczyn()
    Dim iloczyn As Integer
    
    liczba = InputBox("podaj liczbę")
    ilosc = Len(liczba)
    iloczyn = 1
    For i = 1 To ilosc
    cyfra = Mid(liczba, i, 1)
    iloczyn = iloczyn * cyfra
    Next i
    MsgBox iloczyn
    End Sub
    


    a po co jest to k ?
    żeby przez nie mnożyć ?
    wylosować z przedzialu 0-ilosc ?
  • REKLAMA
  • #12 5040193
    bbxb
    Poziom 31  
    Posty: 2271
    Pomógł: 147
    Ocena: 94
    Zamieszczam programy jakie napisałem. Proszę o przetestowanie i o ocenę kodu.
    Wszelkie uwagi i sugestie bardzo mile widzianie :)


    Pozdrawiam.
  • Pomocny post
    #13 5040366
    jakubw
    Poziom 18  
    Posty: 134
    Pomógł: 35
    Ocena: 6
    A cóż tu więcej pisać
    Działa - to najwazniejsze
    A w związku z tym, że stopień skomplikowania
    nie jest jakiś tam wielki więc spaparać się tego
    nie dało.
    Oczywiście kązdy ma swoje koncepcje.
    Stosowanie funkcji, obiektowości i tym podobne cyrki.
    Tylko po co ?
    Proste zadania rozwiązujmy prostymi metodami.
    Tak trzymać.

    Pozdrawiam

    P.S. Jak zwykle strona wizualna w pytę :)

Podsumowanie tematu

LABEL_AI_GENERATED
Dyskusja dotyczy zadania domowego w Excel 2003 VBA polegającego na napisaniu makra, które wypełnia zaznaczony prostokątny zakres komórek losowymi liczbami z przedziału 100–1000, nadaje temu zakresowi nazwę podaną przez użytkownika w InputBox, oblicza sumę kwadratów liczb z zakresu i wyświetla wynik w MsgBox. Wskazano, że zakres można iterować po wierszach i kolumnach, generując liczby pseudolosowe i jednocześnie sumując ich kwadraty. Omówiono sposób sprawdzenia, czy zaznaczony obszar jest prostokątem (liczba wierszy i kolumn) oraz kwadratem (równość liczby wierszy i kolumn). Podkreślono, że nazwa zakresu powinna być widoczna, np. poprzez wpisanie jej do komórki lub wyświetlenie w MsgBox. Autor otrzymał sugestie dotyczące czytelności kodu, obsługi błędów oraz prostoty rozwiązań. W dalszej części dyskusji poruszono temat funkcji VBA obliczającej iloczyn pierwszych k cyfr liczby całkowitej, z wykorzystaniem funkcji Len i Mid, oraz przypisania tej funkcji do obiektu arkusza z interfejsem InputBox i MsgBox. Ostatecznie kod został przetestowany i oceniony jako działający i prosty, co jest zalecane dla tego typu zadań.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA