Fórum pro uživatele kancelářského balíku OpenOffice | LibreOffice
 

#1 23. 1. 2018 16:14:32

peekaa
Člen
Registrace: 10. 6. 2010
Příspěvků: 111

Generování náhodných dat

Pro účely výuky bych potřeboval vzorové tabulky, na kterých bychom mohli pracovat. Cca 10 sloupců, 1000 řádek. Potřeboval bych nějaký script nebo makro. Představuji si to tak, že v makru zadám hodnoty, které se mají ve sloupci objevit /např muž, žena nebo junior, pracující, senior nebo leden, únor, březen, duben, .../ Pak se postavím na místo v tabulce, pustím makro a vygenerujeme si pod aktivním políčkem 1000 náhodných napřeskáčku hodnot. Lze něco takového?

Našel jsem na webu generátor podobných celých hotových tabulek, např. https://www.mockaroo.com/, ale trochu mi tam vadí, že všechna data jsou anglicky, a já bych chtěl alespon něco částečně i česky,

Děkuji.

Editoval peekaa (23. 1. 2018 16:15:05)

Offline

#2 23. 1. 2018 17:33:19

neutr
Člen
Registrace: 8. 3. 2007
Příspěvků: 2,612

Re: Generování náhodných dat

To je docela složitá záležitost, ale dá se zvládnout jenomže :
Terms of Use

These terms of use are effective as of February 7, 2015.

Data generated by Mockaroo may be used for any purpose except providing a derivative application (such as another data generator). The data provided by Mockaroo is done so without warranty.

If you have a question regarding these terms, please contact support.

     Já osobně ani nevím k čemu by to mohlo být dobré, ale je to systém těžby dat který může mít mnoho funkcí. Problém je s přístupem na internet kde se musí předpřipravit oblasti termínů. Celkem je jasné že dávají na výběr na příklad nejen adresář, ale také například matematické operace, smajlíky a vše možné - 144 oblastí.
     Pracuje to ve dvou módech a 3 verzích. Nejspíš by to bylo dobré ke generování nějakých reklam, spamů, nebo k testování telefonních čísel. Lze tam spojit například GIS + telefonní čísla a nebo testovat emailové adresy zda bude někdo reagovat na výzvu - pomozte mi nemám žádné údy a potřebuji auto značky Dodge a píšu nosem.


     Samozřejmě lze udělat něco takového ale určitě pro konkrétní účely. Já často potřebuji fiktivní jména a příjmení. Musí se párovat podle gender a snadno vygeneruji existující adresy. Ale jinak jen někdy například čísla která znamenají alfabetické výrazy - náhodné věci, hesla a podobně.
     Ovšem když by šlo jen o výsledky do češtiny, tak stačí googlr překladač, nebo načtení a náhradu v Calcu. K podobné práci bez těžby z netu postačuje jen několik stovek výrazů od každého a provádět variace, ale když by to mělo být ve verzi "Gold" tak by to muselo být lepší zázemí - nebo spíš souběžná těžba.
     Ale vůbec bych se nedivil když by čekali jen na to, aby je někdo napodobil jakýmkoliv způsobem aby si vydělali. Možná stačí jen napodobit účel - generování náhodných sestav.


Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte tak orientaci na fóru při vyhledávání řešení problémů
JAK OZNAČIT TÉMA ZA VYŘEŠENÉ

Offline

#3 23. 1. 2018 17:43:07

peekaa
Člen
Registrace: 10. 6. 2010
Příspěvků: 111

Re: Generování náhodných dat

Jsem to vzal trochu ze špatného konce. Prosím zapomeňte na mockaroo.com. Zde je můj nový dotaz, bez mockaroo (o ten totiž vlastně vůbec nejde, vůbec jsem to se neměl dávat):

Pro účely výuky bych potřeboval vzorové tabulky, na kterých bychom mohli pracovat. Cca 10 sloupců, 1000 řádek. Potřeboval bych nějaký script nebo makro. Představuji si to tak, že v makru zadám hodnoty, které se mají ve sloupci objevit /např muž, žena nebo junior, pracující, senior nebo leden, únor, březen, duben, .../ Pak se postavím na místo v tabulce, pustím makro a vygenerujeme si pod aktivním políčkem 1000 náhodných napřeskáčku hodnot. Lze něco takového?

Offline

#4 23. 1. 2018 18:01:59

neutr
Člen
Registrace: 8. 3. 2007
Příspěvků: 2,612

Re: Generování náhodných dat

To ano není problém, ale musíte zadat zdroje a jestli musí mít vazby. V podstatě si představte variace s náhodným opakováním. Když jsou zdroje A, B....J - nebo i více a každý má určitý i nestejný počet výrazů.
     Pak platí například A*B*...*J při tom každý zdroj má jiný počet prvků. Generátor se točí stále dokola a náhodně vybeneruje počet příštích kroků. Skončí podle nastaveného počtu


     Je otázkou zda se má zachovat pořadí A > B > > J, nebo zda i to má podléhat generátoru náhodných čísel. Potom bych to viděl například na jedinou smíšenou databázi (array) kde jsou zastoupeny naprosto různé výrazy které se pořídí kombinacemi a Vy zadáte jen třídu nebo rozsah tříd.


Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte tak orientaci na fóru při vyhledávání řešení problémů
JAK OZNAČIT TÉMA ZA VYŘEŠENÉ

Offline

#5 23. 1. 2018 18:26:29

neutr
Člen
Registrace: 8. 3. 2007
Příspěvků: 2,612

Re: Generování náhodných dat

Ještě mne napadlo, že stačí vytvořit v listu sloupce s výrazy které mohou být v relaci, ale nemusí. Já mám generátory které si s takovým úkolem snadno poradí a navíc je možné výrazy přidávat, ubírat nebo měnit dle libosti. Já nad tím postavím generátory a Vy zadáte zda mají být vazby mezi daty ve sloupcích, či nikoliv plus které sloupce se mají zpracovávat.
     Vysype se to kde budete stát, ale tak aby se to do sešitu vešlo, nebo aby toho nebyly miliony buněk - to pak sešit neuveze. Co se bude hodit nahrajeme do makra a můžete to použít jako rozšíření.


Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte tak orientaci na fóru při vyhledávání řešení problémů
JAK OZNAČIT TÉMA ZA VYŘEŠENÉ

Offline

#6 24. 1. 2018 22:45:16

kabi
Člen
Registrace: 1. 6. 2017
Příspěvků: 95

Re: Generování náhodných dat

podle vašeho dotazu jsem napsal následující zdroják. Je to narychlo, nejsou tam ošetřené chyby, ale při standardním zadání to funguje. Připravil jsem i možnost generování datumů, potřebuji se ale ještě chvíli věnovat něčemu jinému, tak dejte vědět, jestli to má smysl dodělat.

Option VBASupport 1
Sub Generuj_Data

Dim PocetGenerovanychHodnot As Integer
Dim c_Min, c_Max as Double
Dim Zaokrouhlit, textt as String
ReDim seznam_textu()

TypDat = InputBox("Vyber typ generovaných dat : " & vbCrLf _
						&"" & vbCrLf _
                        &" 1 => Čísla              2 => Text               3 => Datum" & vbCrLf _
                        &" " & vbCrLf)
radek = ActiveCell.Row
sloupec = ActiveCell.Column

Select Case TypDat
  Case Is = 1
	PocetGenerovanychHodnot = InputBox("Zadej počet generovaných řádků : ")
	c_Min = InputBox("Zadej minimální hodnotu čísla : ")
	c_Max = InputBox("Zadej maximální hodnotu čísla : ")
	Zaokrouhlit = Inputbox("Zaokrouhlit (A/N)? : ")
	MsgBox "Vygeneruji " & PocetGenerovanychHodnot & " řádků s čísly od " & c_Min & " do " & c_Max
	For i = 1 To PocetGenerovanychHodnot
	    NahodneCislo = (c_Max - c_Min) * Rnd() + c_Min
	     if Zaokrouhlit="A" then NahodneCislo = round(NahodneCislo)
	    ActiveSheet.Cells(radek + i, sloupec) = NahodneCislo
	Next i

  Case Is = 2
	PocetGenerovanychHodnot = InputBox("Zadej počet generovaných řádků : ")
	textt = InputBox("Zadej seznam textů oddělených čárkou : ")
	MsgBox "Vygeneruji " & PocetGenerovanychHodnot & " řádků textů z množiny (" & textt &") "
	j = len(textt) - len(replace(textt, ",", ""))
ReDim seznam_textu(j)	
	for k = 0 to j-1
	  hodnota = mid(textt, 1, instr(1, textt, ",")-1)
	  seznam_textu(k) = hodnota
	  hodnota = hodnota & ","
	  textt = replace(textt, hodnota, "")
	Next k
	  seznam_textu(j) = textt
	For i = 1 To PocetGenerovanychHodnot
	    NahodneCislo = int ((j + 1) * Rnd())
	    ActiveSheet.Cells(radek + i, sloupec) = seznam_textu(NahodneCislo)
	Next i    

  Case Is = 3
	MsgBox "Vygeneruji datumy - dodělat"

End Select  	

End Sub

Offline

#7 25. 1. 2018 09:20:21

peekaa
Člen
Registrace: 10. 6. 2010
Příspěvků: 111

Re: Generování náhodných dat

Děkuji!!

Píše mi to chybu hned u
radek = ActiveCell.Row
sloupec = ActiveCell.Column

BASIC - chyba při běhu.
'91'
Proměnná objektu není nastavena.

Zkoušel jsem to hledat na netu, ale nebyl jsem ztoho moc moudrý. Nemám s makry moc zkušenost. Obecně s programováním ale ano, hlavně tedy Python. Za mě by bylo lepší, a snad i programátorsky, abych věci nezadával interaktivně, ale přímo někde na začátku ve skriptu.

Mám w7 a Libre 5.4.2.2

Offline

#8 25. 1. 2018 11:25:17

kabi
Člen
Registrace: 1. 6. 2017
Příspěvků: 95

Re: Generování náhodných dat

předpokládám ,že jste ho vložil do knihovny Moje makra. Zkuste ho vložit přímo do sešitu (šablony). To vkládání již připravených údajů by se dalo vyřešit. Stačilo by Vám zapsat ty parametry hodnot přímo do makra, tzn. generoval by se stále stejný (v rámci Rnd()) seznam dat?

Zápis by mohl být např. takto:

Sloupec#Typ_N#Nazev_Sloupce_Na_Prvnim_Radku#Min..Max#Zaokrouhlit_Na_Cele_Cislo
Sloupec#Typ_S#Nazev_Sloupce_Na_Prvnim_Radku#Seznam_Hodnot_Oddelenych_Carkou
Sloupec#Typ_D#Nazev_Sloupce_Na_Prvnim_Radku#Min_Date..Max_Date#Zaokrouhlit_Na_Cele_Cislo
Sloupec#Typ_F#Nazev_Sloupce_Na_Prvnim_Radku#=TEXT(%3;"DD.MMM.YYYY")

Sloupec - číslo sloupce, do kterého se bude generovat
Typ_x - N (číslo), S (text), D (datum), F (vzorec)
Nazev_Sloupce_Na_Prvnim_Radku - hlavička sloupce
zadané parametry (u vzorce je nutná správný zápis a možný odkaz na sloupec, ze kterého je počítán (např. %3))
Zaokrouhlit_Na_Cele_Cislo - možno tímto parametrem řešit i generování pouze času)

Editoval kabi (25. 1. 2018 13:48:47)

Offline

#9 25. 1. 2018 12:00:58

neutr
Člen
Registrace: 8. 3. 2007
Příspěvků: 2,612

Re: Generování náhodných dat

Tohle by mělo jít spustit i z nadřazené knihovny "Mojemakra Standard". Mělo by to vypadat nějak takto :

Public Sub Generuj_Data

ale nevím jestli se tak musí také tak deklarovat ten hnus VBAsupport.


Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte tak orientaci na fóru při vyhledávání řešení problémů
JAK OZNAČIT TÉMA ZA VYŘEŠENÉ

Offline

#10 25. 1. 2018 14:53:43

peekaa
Člen
Registrace: 10. 6. 2010
Příspěvků: 111

Re: Generování náhodných dat

Ano, vložil jsem to do knihovny Moje makra. Omlouvám se, ale nevím jak vložit makro do sešitu jako šablonu. Dal jsem soubor - šablony - spravovat a Importovat, ale to bych musel ten kod uložit do nějakého souboru a dát mu nějakou příponu. ?

@neutr - když jsem tam dal to Public Sub Generuj_Data, tak to nepomohlo, dělá to úplně stejnou chybu.

Editoval peekaa (25. 1. 2018 15:04:47)

Offline

#11 25. 1. 2018 16:02:37

kabi
Člen
Registrace: 1. 6. 2017
Příspěvků: 95

Re: Generování náhodných dat

popíši postup, ale je to stejné, jako když jste ho ho vkládal do knihovny Moje makra, pouze místo této knihovny vyberete ten konkrétní sešit (ta šablona byla myšlena jinak a zmátla Vás). Otevřete si správce maker (Nástroje -> Makra -> Správce maker -> OO/LO Basic). Vlevo vidíte knihovnu Moje makra a někde pod ní (možná poslední) bude ten konkrétní sešit, ze kterého jste nyní spustil toho správce maker. Klikněte na ten sešit a dále na tlačítko Nový, vytvoří se modul. Můžete nechat přednastavený název, klikněte na Ok. Nyní již můžete vložit makro a musíte ho spouštět z tohoto sešitu. Příp. bych se ho pokusil upravit, aby to fungovalo i z knihovny Moje makra, pokud to pro makra napsaná ve VBA lze.

Offline

#12 25. 1. 2018 16:19:26

peekaa
Člen
Registrace: 10. 6. 2010
Příspěvků: 111

Re: Generování náhodných dat

Díky! Funguje geniálně :-) Můžu to udělat tak, že ten jeden sešit si uložím někam do složky a když budu generovat, tak zásadně přes něj, protože makro bude v něm. A pak budu mít ještě jeden textový soubor, kde budu mít na každém řádku nějaký seznam, třeba:

Motorola,Samsung, LG, Sony
leden, únor, březen, duben
...

no a budu vždy kopírovat příslušný řádek do dialogu při zvolené 2.

Offline

#13 26. 1. 2018 18:54:55

lp.
Člen
Registrace: 24. 9. 2009
Příspěvků: 775

Re: Generování náhodných dat

Trochu jiný přístup: v Calcu je funkce vyplnit buňky (buď v menu Úpravy nebo List.) Jedna z možností je vyplnit náhodnými čísly. Lze vybírat z různých rozdělení.

Vyplnění datumem je také možné - stačí si uvědomit, 1.1.2018 = 43101.

texty - vygeneruji indexy a pomocí funkce INDEX vyberu ze seznamu.

Offline

#14 26. 1. 2018 22:11:18

kabi
Člen
Registrace: 1. 6. 2017
Příspěvků: 95

Re: Generování náhodných dat

určitě těch možností je víc. Nenabízí ale tolik možností, jako makro. Dodělal jsem to generování datumů, příp. by bylo možné řešit i čas.
Do makra jsem přidal nějaké implicitní hodnoty, které se nabízejí v jednotlivých inputboxech a předdefinoval několik seznamů, aby se nemusely vždy ručně vkládat (tato možnost je tam ale zachovaná). Datum se dá generovat v libovolném formátu a buď jako číslo nebo jako text. Dalo by se to dále rozvíjet a příp. dodělat tak, aby bylo možné nadefinovat libovolné varianty o více sloupcích např. do txt souboru a makrem najednou vygenerovat libovolný počet sloupců a řádků = celou požadovanou tabulku. Takto se generuje vždy pouze jeden sloupec pod aktivní buňku, je tedy makro nutné volat opakovaně a měnit pozici aktivní buňky. Pokud je makru přiřazená klávesová zkratka, jde to pouštět relativně rychle za sebou.Většímu rozšíření možností generování v tomto případě asi brání "ukecanost" dotazů, lepší by bylo to udělat přes formulář, takhle na to ale stačí cca 80 řádků textu. Je pravda, že nejsou ošetřené chybové stavy, ale pro účel generování náhodných pracovních dat to asi postačuje.

Option VBASupport 1
Sub Generuj_Data

Dim PocetGenerovanychHodnot As Integer
Dim c_Min, c_Max as Double
Dim Zaokrouhlit, textt, d_format, Textove as String
ReDim seznam_textu()
Dim mn(8)
mn(1) = "leden,únor,březen,duben,květen,červen,červenec,srpen,září,říjen,listopad,prosinec"
mn(2) = "jaro,léto,podzim,zima"
mn(3) = "Apple,LG,Nokia,Samsung,Sony"
mn(4) = "žena,muž,ostatní"
mn(5) = "Adamec,Kopecký,Novák,Novotný,Nový,Šťastný"
mn(6) = "hokej,fotbal,atletika,házená,biatlon,kuželky,šipky"
mn(7) = ""
mn(8) = ""

nabidka = "1 - " & mid(mn(1), 1, 12) & "   " & "2 - " & mid(mn(2), 1, 12) & "   " & "3 - " & mid(mn(3), 1, 12) & "   " & "4 - " & mid(mn(4), 1, 12) & vbCrLf _
        & "5 - " & mid(mn(5), 1, 12) & "   " & "6 - " & mid(mn(6), 1, 12) & "   " & "7 - " & mid(mn(7), 1, 12) & "   " & "8 - " & mid(mn(8), 1, 12)

TypDat = InputBox("Vyber typ generovaných dat : " & vbCrLf _
		&"" & vbCrLf _
        &" 1 => Čísla              2 => Text               3 => Datum" & vbCrLf _
        &" " & vbCrLf)
radek = ActiveCell.Row
sloupec = ActiveCell.Column
Application.ScreenUpdating = False

Select Case TypDat
  Case Is = 1
	PocetGenerovanychHodnot = InputBox("Zadej počet generovaných řádků : ")
	c_Min = InputBox("Zadej minimální hodnotu čísla : ",,0)
	c_Max = InputBox("Zadej maximální hodnotu čísla : ",,500)
	Zaokrouhlit = Inputbox("Zaokrouhlit na celá čísla  (A/N)? : ",,"N")
	MsgBox "Vygeneruji " & PocetGenerovanychHodnot & " řádků s čísly od " & c_Min & " do " & c_Max
	For i = 1 To PocetGenerovanychHodnot
	    NahodneCislo = (c_Max - c_Min) * Rnd() + c_Min
	     if Zaokrouhlit = "A" then NahodneCislo = round(NahodneCislo)
	    ActiveSheet.Cells(radek + i, sloupec) = NahodneCislo
	Next i

  Case Is = 2
	PocetGenerovanychHodnot = InputBox("Zadej počet generovaných řádků : ")
	textt = InputBox("Zadej vlastní seznam slov oddělených čárkou nebo číslo seznamu níže : " & vbCrLf _
	&nabidka )
	if len(textt) = 1 then 
	  volba = textt  
	  textt = mn(volba)
	end if
	MsgBox "Vygeneruji " & PocetGenerovanychHodnot & " řádků textů z množiny ("& textt &") "
	j = len(textt) - len(replace(textt, ",", ""))
ReDim seznam_textu(j)	
	for k = 0 to j-1
	  hodnota = mid(textt, 1, instr(1, textt, ",")-1)
	  seznam_textu(k) = hodnota
	  hodnota = hodnota & ","
	  textt = replace(textt, hodnota, "")
	Next k
	  seznam_textu(j) = textt
	For i = 1 To PocetGenerovanychHodnot
	    NahodneCislo = int ((j + 1) * Rnd())
	    ActiveSheet.Cells(radek + i, sloupec) = seznam_textu(NahodneCislo)
	Next i    

  Case Is = 3
  	PocetGenerovanychHodnot = InputBox("Zadej počet generovaných řádků : ")
	d_Min = InputBox("Zadej datum od : ",,format(now()-100, "D.M.YYYY"))
	d_Max = InputBox("Zadej datum do : ",,format(now(), "D.M.YYYY"))
	d_format = Inputbox("Zadej generovaný formát datumu (masku) : ",,"D.M.YYYY")
	Textove = Inputbox("Vygenerovat jako číslo nebo text (C/T)? : ",,"C")
	date_min = datevalue(d_Min)
	date_max = datevalue(d_Max)
	MsgBox "Vygeneruji " & PocetGenerovanychHodnot & " řádků s datumy od " & d_Min & " do " & d_Max
	For i = 1 To PocetGenerovanychHodnot
	    NahodneDatum = (date_max - date_min) * Rnd() + date_min
		if Textove = "T" then 
		ActiveSheet.Cells(radek + i, sloupec) = Format(nahodnedatum,d_format)
		else
	    ActiveSheet.Cells(radek + i, sloupec) = NahodneDatum
	    ActiveSheet.Cells(radek + i, sloupec).NumberFormat = d_format
	    end if
	Next i
	
End Select  	
Application.ScreenUpdating = True
End Sub

Editoval kabi (27. 1. 2018 13:47:33)

Offline

#15 5. 2. 2018 13:19:59

peekaa
Člen
Registrace: 10. 6. 2010
Příspěvků: 111

Re: Generování náhodných dat

Díky!

Offline

Zápatí