vbamania.pl
login:
hasło:
 
  *Rejestracja *Zapomniane hasło
 Dziś jest sobota, 18 maja 2024 roku.
Ustaw jako stronę startową Ulubione Napisz
PowrótPowrót do serwisu  RegulaminRegulamin rssRSS

  tytuł wątku:
Wątki dyskusji

Losowa tablica, dynamiczne przypisanie formuł tablicy, zmiana wielkości serii danych w wykresie zależnie od wielkości tablicy


otwartyotwarty rozpoczął: Bitels82 postów: 4



napisał: Rycho
postów: 291


umieszczony:
30 maja 2007
22:43

  
Hej.
Fakt, nie zrozumiałem Sorry.
W basicu od zawsze (czyli od ZX Spectrum) przed użyciem Rnd inicjowałem generator liczb losowych aktualnym czasem systemowym przy pomocy Randomize, że nawet o tym nie pomyślałem.

Rycho
napisał: Bitels82
postów: 2


umieszczony:
30 maja 2007
20:43

  
Z tym rnd nie zrozumiałeś mnie do końca wiec zrobilem maly test zeby Ci pokazać o co mi chodzi :P
uzylem prostego kodu w postaci:

For i = 1 To 5
Cells(i, 1) = Rnd
Next i



po jego 1 wykonaniu skopiowałem wartości do kolumny B, a nastepnie zapisałem exela i odpaliłem go ponownie. Wykonałem ponownie ten kod i w kolumnie A zostały wylosowane identyczne wartości co w kolumnie B
wiem ze tak sie dzieje tylko po restarcie excela, a mi zależy zeby wartości te były zawsze losowe.
z problemem tym juz sie kiedys spotkalem, gdy zrobiłem mini test gdzie miały się pojawiać losowe pytania, ale po każdym uruchomieniu excela, a tego testu pytania pojawiały się w tej samej kolejności :P

hehe wlasnie sprawdziłem Twoj kod i po kazdym uruchomieniu losuje inaczej nie rozumiem tego, ale działa więc wykorzystam twoj sposob

co do odp2 to wszystko działa bez zarzutów :)

co do odp3 to az mi wstyd, że wystarczyło w google coś takiego wpisać :P , nie wiedziałem że można to rozwiązać w samych opcjach wykresu i szukałem rozwiązań z poziomu VBA.

heh chyba coś powinienem w końcu poczytać o VBA bo narazie moja wiedza bazuje tylko na podglądaniu innych kodów... a to za mało

pozdrawiam i

WIELKIE DZIĘKI RYCHO
napisał: Rycho
postów: 291


umieszczony:
30 maja 2007
18:54

edytowany:
30 maja 2007
18:55

  
Hej.

1. Nieprawda. Funkcja Rnd losuje różne liczby.
Sub test1()
  Dim i As Integer
  Randomize
  For i = 1 To 30
    Cells(i, "A") = RndDblBetween(5, 6)
    Cells(i, "B") = RndIntBetween(5, 6)
  Next i
End Sub

Function RndDblBetween(Min As Double, Max As Double) As Double
  RndDblBetween = Rnd * (Max - Min) + Min
End Function

Function RndIntBetween(Min As Integer, Max As Integer) As Integer
  RndIntBetween = CInt(Rnd * (Max - Min) + Min)
End Function



2. Możesz to zrobić np. tak:
Sub Test2()
  Dim lnw As Long   'liczba nowych wierszy
  Dim rg As Range
  
  lnw = 5
  Set rg = Range("G8:I8")
  rg.Copy
  rg.Resize(lnw + 1).PasteSpecial xlPasteFormulas
  Application.CutCopyMode = False
  rg.Cells(1, 1).Select
End Sub



3. Rozwiązanie problemu jest ogólnie znane.
http://www.google.pl/search?hl=pl&q=excel+wykres+dynamiczny&btnG=Szukaj+w+Google&lr=lang_pl

powodzenia
Rycho
napisał: Bitels82
postów: 2


umieszczony:
30 maja 2007
17:33

  
witam wszystkich
bawie się trochę w excelu vba na poziomie niżej niż podstawowym i napotkałem na pare problemów których sam nie jestem w stanie przeskoczyć :(
stworzyłem userform w którym znajduje się między innymi przycisk generowania tablicy w którym część kodu to:

For ia = 2 To 6
For i = 4 To TextBox5.Value + 3
Worksheets("Tablica").Cells(4, "x").Calculate
Worksheets("Tablica").Cells(i, ia) = Worksheets("Tablica").Cells(4, "x")
Next i
Next ia

liczba wierszy tablicy jest określana przez wartość podaną w TextBox5
w Worksheets("Tablica").Cells(4, "x") jest wpisana funkcja randbetwen

działa to poprawnie ale chciałbym zastąpić samo losowanie wyłącznie kodem wpisanym w VBA.
niestety niby Rnd losuje wartości ale są one zawsze takie same i nie chodzi tu o przedział losowania bo można go regulować
także prosze o podanie funkcji pochodnej od rnd która losuje za każdym razem inne wartości w danym przedziale

innym problemem jest przypisywanie formuł danym wierszom
przy założeniu że liczba wierszy nie będzie mniejsza niż 5 przypisałem pierwszym 5 wierszom formuły na sztywno
więc zarejestrowałem makro:

Range("G8:I8").Select
Selection.AutoFill Destination:=Range("G8:I9"), Type:=xlFillDefault
Range("G8:I9").Select

Range("G8:I8") - zawiera formuły przypisane do wierasza 8
chcąc je zmodyfikować znalazłem że np. Range("G8:I8") można również zapisać w postaci Range(Cells(8 , 7), Cells(8 , 9)), więc wrzuciłem do przycisku kod:

Range(Cells(8 , 7), Cells(8 , 9)).Select
Selection.AutoFill Destination:=Range(Cells(8 , 7), Cells(TextBox5.Value + 3 , 9)), Type:=xlFillDefault
Range(Cells(8 , 7), Cells(TextBox5.Value + 3 , 9)).Select

niestety to nie działa i nie wiem dlaczego bo lama jestem
można by ten problem rozwiązać również prostą pętlą for lub nawet while wend przypisując kolejnym komórkom formuły ale znowu nie wiem jak zrobić żeby przypisana formuła pobierała dane z odpowiednich wierszy
proszę o prosty przykład rozwiązania tego problemu a dalej juz se chyba sam poradze

ostatni problem tyczy się wykresów, gdzie potrzebuje żeby obszar obejmowania danej serii zmieniał się w zależności od umiejscowienia ostatniej wartości
i tu proszę o przykład który np. w wykres1 w arkuszu1 będzie zmieniał zakres wartości osi x w danej serii na Range("G4:Gx") gdzie x będzie w moim przypadku wartością TextBox5.Value + 3

przeglądałem to forum i nie znalazłem powyższych problemów, choc możliwe że się pojawiły, a ja nie potrafiłem zrozumieć kodu...

tak czy siak pozdrawiam i z góry dziękuje za wszelką pomoc


<-wstecz  1  dalej->
wszystkich stron: 1


Sortuj posty: z