Keresés

Részletes keresés

Fferi50 Creative Commons License 2014.04.25 0 0 24956

Szia!

 

Ha már ilyen nagy sikere van, ide írom az eredeti szerzőt: a PCfórumon igen aktív The Fool megoldását osztottam meg veletek.

 

Üdv.

Előzmény: Eredő Vektor (24954)
GyertyánM Creative Commons License 2014.04.25 0 0 24955

Kedves Hozzáértők!

 

Segítségre lenne szükségem, kérlek, szánjatok rám pár percet.

Az alábbiakban felvázolnám, mit is szeretnék.

- az „A” oszlopban értékek vannak;

- a „B” oszlopban az előbbi értékek megnevezései;

- egy tetszőleges cellában pedig egy változó szám;

- a cél az, hogy az „A” oszlopból olyan cellákat válogassunk ki, melyek értékeivel a lehető legjobban megközelítsük (alulról) a tetszőleges cellában levő értéket és egy felsorolásban láthassuk azon értékek megnevezéseit, melyekkel meg tudtuk ezt valósítani.

 

Egy példával talán még szemléletesebb lesz:

Van egy nagy zsákunk, melynek köbtartalma a tetszőleges cellában van megadva.

Hogyan lehet a lehető legjobban kitömni ezt a nagy zsákot az „A” oszlopban megadott köbtartalmú valamikkel úgy, hogy tudjuk, melyek voltak azok a valamik?

 

Feltöltöttem az alábbi fájlt, talán ez egyértelműbb:

http://data.hu/get/7640203/ValamiLista.xls

 

Segítségeteket előre is köszönöm.

Eredő Vektor Creative Commons License 2014.04.25 0 0 24954

Jó cucc, elrakom én is.

Előzmény: Fferi50 (24900)
Eredő Vektor Creative Commons License 2014.04.25 0 0 24953

Köszönöm. Egyébként én nem konkrétan erre emlékszem, de ebben van is van "olyan" amit írtam. Úgy emlékszem, hogy az egérkurzoros / füles módszer makró nélkül volt megvalósítva.

Előzmény: Delila10 (24944)
ypolito Creative Commons License 2014.04.25 0 0 24952

Még egy és befejeztem a hétre! :)

 

Private Sub Workbook_Open()
   Dim lap As Integer

   For lap = 1 To Worksheets.Count
      If Sheets(lap).Name <> "Main" Then Sheets(lap).Visible = xlVeryHidden
   Next

   Jelszo_bekeres
   
     
End Sub

 

Itt egy olyan opciót szeretnék, hogy ne csak a "Main" fület figyelje, hanem a "Mátrix" fület is.

 

köszi

P.

ypolito Creative Commons License 2014.04.25 0 0 24951

Köszönöm!!

Előzmény: Törölt nick (24950)
Törölt nick Creative Commons License 2014.04.25 0 0 24950

ja, ez hibás.

 

Sub test()
Dim x As Long
For x = 1 To Worksheets.Count

if Left(LCase(Worksheets(x).Name), 5)="munka" Then Cells(x, 1).Value = Worksheets(x).Name
Next x
End Sub

 

Előzmény: Törölt nick (24948)
Törölt nick Creative Commons License 2014.04.25 0 0 24949

vagy

 

Sub test()
Dim x As Long
For x = 1 To Worksheets.Count

If Left(LCase(Worksheets(x).Name), 5) = "munka" Then

    Range("A" & Rows.Count).End(xlUp).Offset(1) = Worksheets(x).Name
End If
Next x
End Sub

 

Előzmény: Törölt nick (24948)
Törölt nick Creative Commons License 2014.04.25 0 0 24948

Sub test()
Dim x As Long
For x = 1 To Worksheets.Count

if Left(LCase(Worksheets(x).Name))="munka" Then Cells(x, 1).Value = Worksheets(x).Name
Next x
End Sub

 

Előzmény: ypolito (24947)
ypolito Creative Commons License 2014.04.25 0 0 24947

Sziasztok!

 

Van egy ilyenem:

 

'munkalap neveinek listázása'
Sub test()
Dim x As Integer
For x = 1 To Worksheets.Count
Cells(x, 1).Value = Worksheets(x).Name
Next x
End Sub

Legyen szíves és egészítse ki valaki úgy, hogy csak a "munka" kezdetű munkalapokat listázza.

 

Előre is köszönöm

P.

Fferi50 Creative Commons License 2014.04.25 0 0 24946

Szia!

 

Nem az enyém az érdem, egy másik topikban (pcforum) tanultam.

 

Üdv.

Előzmény: Sánta Kutya (SK) (24945)
Sánta Kutya (SK) Creative Commons License 2014.04.25 0 0 24945

Most látom a benti gépemen, hogy ezt már én régebben megírtam magamnak, de a tied nemcsak rövidebb és frappánsabb, de rugalmasabb is.

Plusz eszembe juttatta, hogy van rá makró, mert a régit már elfelejtettem és nem használtam. :-)

Előzmény: Fferi50 (24900)
Delila10 Creative Commons License 2014.04.25 0 0 24944

Szívesen.

 

Azt a lapot, ami a "makróval", vagy valami hasonló névre hallgat, töröld ki, én már megtettem. Körülményes, sokkal jobb módszerekkel lehet létrehozni dinamikus diagramokat. A laphoz tartozó makrót is száműztem.

Előzmény: Eredő Vektor (24942)
tbando Creative Commons License 2014.04.25 0 0 24943

Szia!

 

A véletlenszám ismétlődésének elhanyagolható az esélye. Nálad 1/10^6, nálam 1/10^15. De azért előfordulhat mindkét módszernél. A hatásuk azonban eltérően fog megnyilvánulni. Nálad HIÁNYZIK hibaüzenettel, ami ezért pillanatok alatt kiderül, amit aztán manuálisan lehet korrigálni.  Nálam viszont nem lesz semmi jele, csak az egyik betűből több lesz mint kéne, a másikból meg kevesebb.  Ezért ha biztos akarok lenni, hogy pontos volt-e a kiosztás minden betűre kell csinálni egy darabtelit. És hiba esetén manuálisan javítani.

Előzmény: Fferi50 (24941)
Eredő Vektor Creative Commons License 2014.04.24 0 0 24942

Kedves Delila10!

Köszönöm a segítségedet, nagyon jó dolgok vannak benne.

Üdv.

Előzmény: Delila10 (24936)
Fferi50 Creative Commons License 2014.04.24 0 0 24941

Szia!

 

Köszi, persze a ha feltétel része "csak nagyzolásból (elnézést)" maradt így, az A1=1 helyett (de ha már tudjuk, miért ne terjesszük?).

Másrészt a véletlen számok generálásakor előfordulhat egy ilyen nagyobb halmazban is az ismétlődés, ami azonos sorszámot eredményezhet és azt már megint kezelni kell tudni.

 

Üdv.

Előzmény: tbando (24939)
tbando Creative Commons License 2014.04.24 0 0 24940

Na tessék! Azt hittem a szétválasztó jelzővel a megértést segítem, oszt csak megkevertelek vele.  Szóval semmi különös. Adatok/rendezés  majd az 1/0 oszlop kiválasztása. És kész. (Ha nem ismernéd a rendezést, nézd meg súgóban. Alapvető funkció)

 

Egyébként azért írtam, hogy szétválasztó, mert a sorbarendezés az 1 és 0-kat szétválasztja.

Előzmény: Esterka (24938)
tbando Creative Commons License 2014.04.24 0 0 24939

Szép megoldás!

 

Még ha a véletlenszámok 1 és 1 millió közé konvertálása feleslegesnek is tűnik. De véleményem szerint a megoldásod eleganciáját biztosító 3 plusz rafinéria nem kezdőknek való.  Mivel közülük az egyiket, a =HA(A1 feltétel értelmezését én is csak napokban tanultam meg, ha jól emlékszem épp tőled.  Tehát még nem épült be a napi rutinomba. Ezen kívül a sor()-t sem szeretem, mert nálam sor()-10 kéne használnom, mivel a táblázataim default a 11-ik sortól kezdődnek. Egyébiránt én is láttam sorbarendezés nélküli megoldást, csak én az 1/0 oszlop celláit számoztam volna be a G oszlopodban a

 

=HA(a1=0;0;vel()) képlet véletlenszámain keresztül, majd az alábbi függvénnyel osztottam volna ki a betüket:

 

=ha(a1=1;index($E:$E;g1-Darabteli($A:$A;0);1);"")

 

De ennek megoldásnak a magyarázása komplikáltabbnak tünt.  Így jobbnak láttam a sorbarendezős változat felrakását.

Előzmény: Fferi50 (24937)
Esterka Creative Commons License 2014.04.24 0 0 24938

Szétválaszó rendezés hol található? Vagy miként állítható az be?

Előzmény: tbando (24933)
Fferi50 Creative Commons License 2014.04.24 0 0 24937

Szia!

 

Szerintem nem kell szétválasztani a 0-1-eket.

 

1. egy oszlopba szépen sorban beírjuk a szükséges W,X,Y,Z értékeket

2. a mellette levő oszlopba generálunk véletlen számokat 1 és 1 millió között (azért, hogy minél kisebb legyen az esélye az azonos szám keletkezésének).

3. mellette levő oszlopba a sorszám függvénnyel meghatározzuk a véletlen számok sorrendjét.

4. Ha az A oszlopban vannak a 0-1-ek, az E oszlopba tettük a W,X,Y,Z értékeket, akkor a G oszlopba esik a sorszám,

a B1 cellában a következő a képlet:

=HA(A1;INDEX($E:$E;HOL.VAN(SOR()-DARABTELI($A$1:A1;0);G:G;0));"")

ezt a képletet kell végighúzni a B oszlopon addig, ameddig vannak értékek.

 

Ha ez megvolt, akkor a B oszlopot kijelöljük, másol, irányított beillesztés értékek.

Az E-G oszlopokat pedig "elegánsan" töröljük.

 

Találják ki, hogyan csináltuk meg.

 

Üdv.

Előzmény: tbando (24933)
Delila10 Creative Commons License 2014.04.24 0 0 24936
Előzmény: Eredő Vektor (24927)
ypolito Creative Commons License 2014.04.24 0 0 24935

Közben sikerült nekem is. Köszönöm mindenkinek!!

Előzmény: pippancs (24930)
Zoxo Whitney Creative Commons License 2014.04.24 0 0 24934

1-től 100-ig képzem a véletlen számokat

Ha 1-6 tartományba esik (6%), akkor  X, 

ha 7-18 tartományba esik (12%), akkor W,

ha 19-37 tartományba esik (19%), akkor Y

egyébként 38-100 között (63%) , akkor Z

 

Lehet, hogy a képletben a < helyett <= kellett volna, attól függ, hogy a véletlen számot 0-99 között vagy 1-100 között kértem...

Előzmény: Esterka (24931)
tbando Creative Commons License 2014.04.24 0 0 24933

Meg lehet ugyan csinálni egyszerűbben is, de így talán könnyebb lesz megértened az algoritmus elvét, amit aztán szabadon variálhatszt:

  1. Az 1 és 0 cellák szétválasztása sorbarendezéssel. Hogy vissza tudd majd állítani a kezdeti sorrendjüket számozd be a  cellákat a mellettük levő oszlopban, és ez az oszlop is rendeződjön a szétválasztó rendezéssel.
  2. Az 1-k mellé tegyél egy véletlenszámot  a vél() fgv.-nyel.
  3. A következő oszlopban határozd meg hogy hanyadikok a rangsorban a SORSZAM függvénnyel.
  4. A következő oszlopban jön a betűkiosztás:
  5. =ha(sorszam<=5760;”W”;ha(sorszam<=8640;”X”;ha(sorszam<=17760;”Y”;”Z”))). 
  6. Fixald  az összes oszlopot a másol értéket paranccsal, majd töröld a feleslegeseket, és végül állítsd vissza az eredeti cellasorrrendet.
Előzmény: Esterka (24923)
Zoxo Whitney Creative Commons License 2014.04.24 0 0 24932

100-s mintán teszteltem, pontosan annyit osztott szét, mint kellett...

Vigyázz, próbálkozások előtt a B oszlopot (ahova az WXYZ-t írja a program) ki kell üríteni

Function veletlen(p_ig) As Integer
veletlen = Int(Rnd() * p_ig) + 1
End Function


Sub proba(p_db As Long, p_szaz As Integer, p_kar As String)
Dim v_db As Long
Dim v_szaz As Integer
v_db = p_db
v_szaz = p_szaz
Randomize
Do While v_db > 0
For i = 1 To 48000 ' vagy amennyi elem van az oszlopban
If Cells(i, 1).Value = 1 And Cells(i, 2).Value = "" Then
If veletlen(100) < v_szaz Then
Cells(i, 2).Value = p_kar
v_db = v_db - 1
If v_db = 0 Then
Exit Sub
End If
End If
End If
Next i
v_szaz = 2 * v_szaz '' ha nem használtuk el az összes ilyen karaktert, akkor újra próbálkozunk nagyobb valószínűséggel
Loop

End Sub

Sub hivo()
Call proba(2880, 6, "X")
Call proba(5760, 12, "W")
Call proba(9120, 19, "Y")
Call proba(30240, 63, "Z")
End Sub

Előzmény: Esterka (24923)
Esterka Creative Commons License 2014.04.24 0 0 24931

Azt leírnád még neked, hogy a =HA(E1<6;"X";HA(E1<18;"W";HA(E1<37;"Y";"Z"))) képletben miként jött ki a 6,18,37 érték? Köszi

Előzmény: Zoxo Whitney (24922)
pippancs Creative Commons License 2014.04.24 0 0 24930

Működő gombokkal és kiegészítve Delila "mester" jelszavával (de a többi lap jelszavát is add meg):

http://data.hu/get/7637791/teszt_v2.xlsm

Előzmény: ypolito (24920)
Zoxo Whitney Creative Commons License 2014.04.24 0 0 24929

A futásidő lehet, hogy rossz lesz....

Előzmény: Zoxo Whitney (24926)
Delila10 Creative Commons License 2014.04.24 0 0 24928

Egy újabb Case utasításban a "mester" értékhez a lapok felfedését adod meg végrehajtandó utasításként.

Case "mester" 

   For lap = 1 To Worksheets.Count
        Sheets(lap).Visible = True
   Next

Előzmény: ypolito (24920)
Eredő Vektor Creative Commons License 2014.04.24 0 0 24927

Helló:)

Valamelyikőtök (Talán Delila) mutatott itt olyan dinamikus diagramot, aminek "fülei" voltak és a fülek felett tartva az egérkurzort, megjelent egy másik diagram.

Keresgélek, de eddig nem találtam, nincs valakinél lementve egy link esetleg? Már fentiekből kiderül mire gondolok... 

Ha kedveled azért, ha nem azért nyomj egy lájkot a Fórumért!