Keresés

Részletes keresés

Törölt nick Creative Commons License 2011.06.14 0 0 15156

Megvárom, míg SQL publikálja kutatási eredményeit, aztán ha még van kérdésed, szívesen válaszolok (ha tudok), csak azt kérem, kérdezz konkrétan.

Például mit értesz az alatt, hogy sorbarendezni a tömb elemeit egy olyan esetben, amikor a tömb elemei range típusú objektumok.

Ilyesmit?

Előtte:

R(1) = Range("A1") = 12
R(2) = Range("C2") = 24
R(3) = Range("F3") = 786
R(4) = Range("B9") = 33
R(5) = Range("A2") = 2

 

Utána:

R(1) = Range("A2") = 2
R(2) = Range("A1") = 12
R(3) = Range("C2") = 24
R(4) = Range("B9") = 33
R(5) = Range("F3") = 786

 

Előzmény: Or Kán (15153)
Törölt nick Creative Commons License 2011.06.14 0 0 15155

Tényleg, mi a szarra fenére jók azok a class-ok?

Nem kellet még használnom. Pedig sok mindent használtam már...

Előzmény: SQLkerdes (15154)
SQLkerdes Creative Commons License 2011.06.14 0 0 15154

Oh, erről már volt itt szó és pont én másoltam be egy nagyon érdekes (asszem Class-ok használatán alapuló) megoldást.

Majd megpróbálom előásni, de tuti hogy itt van kb 2000 hozzászóláson belül :-)

Előzmény: Or Kán (15153)
Or Kán Creative Commons License 2011.06.14 0 0 15153

Bocs, ez engem is érdekelne (mármint az a kérdés, hogy hogyan lehet pl. műveleteket végrehajtani a tömbbe rendezett értékekkel).

 

Pl. egy tömb elemeit (miután megadtad neki a cellaértékeket) lehet-e sorba rendezni anélkül, hogy bemásolnád a tömbértékeket egy egybefüggő excel-tartományba?

Előzmény: Törölt nick (15133)
Törölt nick Creative Commons License 2011.06.14 0 0 15151

A változó kezdeti értéke automatikusan "empty" és az első értékadáskor kap értéket.

Előzmény: Gavriel (15149)
Delila10 Creative Commons License 2011.06.14 0 0 15150

Nálam az FKERES tartományát kijelölve, majd F9-et nyomva ílyen lett a képlet:

 

=FKERES(F2;{0.80;1000.63;6000.48};2;1)

 

Szerintem is zseniális, tuljadonképpen azzal egyenlő, mintha a tartományt fixen adtam volna meg, de a képletben látszanak is a tartomány értékei. Az F9-es képlet bevitele után az FKERES tartománya kitörölhető.

Előzmény: SQLkerdes (15146)
Törölt nick Creative Commons License 2011.06.13 0 0 15148

szerintem "úgy" nem.

Csak így, ha a futás elején megadod.

dim valtozo as integer

valtozo  =  1

de lényeg ugyanaz, nem?

 

illetve egy for ciklus számlálóját be lehet állítani, h honnan induljon.

 

 

 

 

Előzmény: Gavriel (15147)
SQLkerdes Creative Commons License 2011.06.13 0 0 15146

Ja, értem, a fórummotor levette az oszloptörést jelképező perjeleket.  

Mert akkor műxik.

 

Fórummotor mongyon le!

Előzmény: Törölt nick (15142)
SQLkerdes Creative Commons License 2011.06.13 0 0 15145

És hogy ne csak a szám járjon:

 

Az G2-be a következőt tenném:

=SUM(((F2<1000)*80)+((F2>1000)*(F2<6000)*60)+((F2>6000)*48))

 

Így lehet egy jól olvasható FKERES-ből egy durva kinézetű számolás-szörnyet csinálni :-)

Előzmény: Törölt nick (15141)
SQLkerdes Creative Commons License 2011.06.13 0 0 15144

Vagy az FKERES-sel történt valami azóta, hogy utoljára használtam (nem most volt), vagy a lenti módszer nem működik.

 

Én - a rendszeres olvasók nem fognak meglepdőni - SUM/SZUM-nal csináltam volna.

 

Most lemegyek alfába és elkezdem még egyszer emészteni a lenti FKERES-t.  Mert ha műxik akkor viszont jó eséllyel zseniális megoldás.

Előzmény: Törölt nick (15142)
Törölt nick Creative Commons License 2011.06.13 0 0 15143

Köszönöm! :)

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

1.

egyszerű fkeres:

 

=FKERES(F2;{080;100063;600048};2;1)

 

a kapcsos zárójelben lévő adat lehet egy adattartomány is - amiben az értékek vannak. (;= sor \= oszlop)

 

2.

 

HA() fgv tökéletes. ( <=> operátorok használatával.) Ha(önktsgi ár > nagykerár; veszteség mértékét itt kiszámolod;"nyereséges")

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

Sziasztok!

 

Van egy feladat, amit nem tudok megoldani..

 

              A             B                           C                         D                        E                  F                        G                        H                  I

 

1    Vállalat      I. negyedév        II. negyedév     II. negyedév    IV. negyedév    Éves összesen   Önköltségi ár    Nagyker. ár    Veszteség

2    AB Bt.          16 db                18 db                21 db                25 db                 81 db                                          97 Ft

3    CD Kft.       1300 db              1495 db           1719 db            2063 db            6577 db                                        47 Ft

4    EF Rt.         231 db                266 db             305 db              367 db             1169 db                                         103 Ft

 

A táblázatom nem teljes, de nem volt türelmem több adatot beírni..

 

Feladat:  Az Önköltségi ár oszlop tartalma: 0-999 db-ig 80 Ft, 1000-5999 db-ig 63 Ft, 6000 db éves termelés felett pedig 48 Ft.

A Veszteség oszlop tartalma a következők szerint alakul: a veszteség esetén (az önköltségi ár nagyobb, mint a nagyker ár) számítsa ki a veszteség mértékét, nyereségnél a nyereséges szó szerepeljen!

 

Próbáltam HA függvénnyel, de valamiért nem sikerül.

Örülnék, ha tudnátok segíteni!

SQLkerdes Creative Commons License 2011.06.13 0 0 15139

Azt lehet csinálni, hogy az adott range címét (as string) létrehozod, mint Public Const és akkor az egész modulon belül "látható".

 

Előzmény: Gavriel (15138)
Törölt nick Creative Commons License 2011.06.12 0 0 15136

Nem tudom biztosan, de szerintem nem. Egy makró lefutása után az Excel nem őrizget a memóriában semmit, vagy ha igen, nem tudom, meddig, és milyen feltételek mellett. Ezzel már elég sokat szívtam korábban.

 

Inkább azt lehet csinálni, hogy írni külön egy Public Sub-ot arra, hogy ezeket a Set hozzárendeléseket megcsinálja, és minden makró első műveleteként ezt a Sub-ot meghívni.

Előzmény: Gavriel (15135)
Törölt nick Creative Commons License 2011.06.12 0 0 15133

Cellákat ugyanúgy fogsz tömbbe, mint bármi mást. Megcsinálod az 5 elemű tömböt, aztán egyesével értéket adsz nekik.

 

Sub teszt_3()
    Dim R(1 To 5) As Range
    Set R(1) = Range("A1")
    Set R(2) = Range("C2")
    Set R(3) = Range("F3")
    Set R(4) = Range("B9")
    Set R(5) = Range("A2")
End Sub

 

A fenti kód lefutása után az R(1) változó az A1 cellára fog hivatkozni. A cellát felülírni tehát így kell :

 

R(1) = 123

 

értékét kiolvasni pedig:

 

x = R(1)

 

Ha az öt cellát együtt is tudni akarod kezelni, akkor esetleg érdemes az alábbi módon csavarintani rajta egyet:

Sub teszt_4()
    Dim R(0 To 5) As Range
    Set R(1) = Range("A1")
    Set R(2) = Range("C2")
    Set R(3) = Range("F3")
    Set R(4) = Range("B9")
    Set R(5) = Range("A2")
    Set R(0) = Union(R(1), R(2), R(3), R(4), R(5))
End Sub

 

Ekkor R(0) az 5 cella uniója.

 

Alternatív lehetőség, hogy nem Range, hanem String típusú tömböt hozol létre, amelyben a tartományok nevét tárolod el.

Sub teszt_5()
    Dim RN(1 To 5) As String

    RN(1) = "első tartomány neve"

    Range(RN(1)) = 123

    x = Range(RN(1))
End Sub

 

De szerintem ez macerásabb és kevésbé áttekinthető. És mindenképpen szükséged lesz plusz egy Range típusú változóra, ha együtt akarod kezelni az öt cellát.

Előzmény: Gavriel (15125)
mixtura_pectoralis Creative Commons License 2011.06.11 0 0 15132

igen, angol nyelvüben megy, illetve 2003-as verziónál már magyarnál is.

Előzmény: SQLkerdes (15081)
mixtura_pectoralis Creative Commons License 2011.06.11 0 0 15131

Excel2000-ben nem, 2003-ban már működik. 2000-ben azért nem, mert a lista szegényes, a hónapok szöveges kiírása csak dátummal lehetséges, idővel együtt nem, tehát előbb szét kell választani dátumra és időre, 2003-ban már működik, nyelv váltást azonnal felismeri.

(amint kiderült, amerikai stilusban volt elmentve a dátum és idö)

Előzmény: SQLkerdes (15080)
Delila10 Creative Commons License 2011.06.11 0 0 15129

Set tartomány = Range("A:A")

kritérium = Cells(1, 1)

Set összeg_tartomány = Range("B:B")

v = Application.WorksheetFunction.SumIf(tartomány, kritérium, összeg_tartomány)

MsgBox v

Előzmény: Gavriel (15128)
Delila10 Creative Commons License 2011.06.11 0 0 15126

Te jó Isten! Ezt ilyen bagoly-időben ide beírni!

Nagyon szívesen. :)

Előzmény: morr53 (15123)
Törölt nick Creative Commons License 2011.06.11 0 0 15124

Tudom, hogy nem szeretsz sokat beszélni, de most kivételesen megtennéd, hogy leírsz pár részletet arról, mire akarod használni?

Ezzel ugyanis segítenél nekünk a megértésben. Én például elsőre azt gondoltam, hogy a "könnyebb kezelhetőség" azt jelenti, egy lépésben akarnád törölni vagy értékkel felülírni mind az öt cellát. Erre a célra alkalmas az, amit írtam. Ha azonban egyesével akarod őket elérni, arra nem alkalmas. Akkor viszont nem értem, hogy miért nem jó a cellák saját neve, és miért kell tömbbe szervezni. Találgathatnék még, meg futhatnánk itt a köröket feleslegesen, de talán egyszerűbb lenne, ha leírnád.

 

Előzmény: Gavriel (15122)
morr53 Creative Commons License 2011.06.11 0 0 15123

Ezúton is szeretnék köszönetet mondani

 

Delila10-nek

 

a sok-sok segítségért, mellyel sikerült megoldani a feladatot.

 

SQLkerdes Creative Commons License 2011.06.10 0 0 15121

Létrehozol egy hatodik nevet (mondjuk azt, hogy "Mind") és a Name manager-ben mint az a terület amire hivatkoznak, az egyes már létező neveket viszed be vesszővel elválasztva.

Előzmény: Gavriel (15119)
Törölt nick Creative Commons License 2011.06.10 0 0 15120

Sub teszt_1()
    Dim Rng As Range
    Set Rng = Range("A1,F2,C3,H4,E9")
    Rng = 3
End Sub

Sub teszt_2()
    Dim Rng As Range
    Set Rng = Union(Range("első"), Range("második"), Range("harmadik"))
    Rng = 12
End Sub

Előzmény: Gavriel (15119)
mixtura_pectoralis Creative Commons License 2011.06.10 0 0 15118

Nagy nehezen kiderült, acces2000 és excel2000 hiba, 2003-asban működik, illetve ott az aposztrófokat ki kell venni, mert arra figyelmeztetést ad cellánként.;)

Előzmény: mixtura_pectoralis (15047)
Delila10 Creative Commons License 2011.06.10 0 0 15117

Igazad van, két lépésben módosíthatod a két sorszámot, utána még az oszlopot is megváltoztathatod.

Előzmény: Xooo (15116)
Xooo Creative Commons License 2011.06.10 0 0 15116

Nem kell. Az összesítő táblázatban megkeresem az A oszlopban lévő kezdő és befejező dátum celláinak sorszámát, majd ezt a két értéket adom meg amikor csere van. meg. Pl 2011.04.01-2011.04.20-ig: 93-112-es. Ha más intervallumot szeretnék akkor szimplán csak ezt a két számot cseréltetem ki a makróval.

 

Az adott grafikon összes adatsorában kicseréli az összes számot, tehát: =ADATSOR(Összesítő!$V$1;Összesítő!$A$43:$A$67;Összesítő!$V$43:$V$67;4)

 

Ezt mind a 7-8 adatsoromban kicseréli.

 

Szóval beírom hogy a 43-at és a 67-et cserélje ki teszem azt 33-ra és 57-re és már újra is rajzolta nekem az egész grafikonomat, alá pedig kiírja hogy melyik dátumtól melyik dátumig van.

 

Ahhoz, hogy ne 93-at és 112-t, hanem 2011.04-01-et és 2011.04-20-at kelljen megadnom én balfék vagyok, de így is nagyon egyszerűen és gyorsan működik a dolog. :)

 

Előzmény: Delila10 (15115)
Delila10 Creative Commons License 2011.06.10 0 0 15115

Valóban jó a megoldás, viszont kényelmetlen, hogy a teljes címeket kell beírni a munkalap nevével, és a $ jelekkel együtt. :(

Előzmény: Xooo (15114)
Xooo Creative Commons License 2011.06.10 0 0 15114

Sziasztok ! Köszönöm szépen a fáradozásodat, végülis másképp sikerült megoldanom....

 

Sub ChangeSeriesFormula()
    ''' Just do active chart
    If ActiveChart Is Nothing Then
        '' There is no active chart
        MsgBox "Klikkelj a grafikonra és próbáld újra.", vbExclamation, _
            "No Chart Selected"
        Exit Sub
    End If

    Dim OldString As String, NewString As String, strTemp As String
    Dim mySrs As Series

    OldString = InputBox("Add meg a változtatni kívánt értéket:", "Régi érték")

    If Len(OldString) > 1 Then
        NewString = InputBox("Ez lesz megváltoztatva: " & """" _
            & OldString & """:", "Új cella")
        '' Loop through all series
        For Each mySrs In ActiveChart.SeriesCollection
            strTemp = WorksheetFunction.Substitute(mySrs.Formula, OldString, NewString)
            mySrs.Formula = strTemp
        Next
    Else
        MsgBox "Nincs semmi amit meg tudok változtatni.", vbInformation, "Adj meg valamilyen értéket :)"
    End If
End Sub

 

Ezzel a makróval ( amit egy kicsit átvariáltam az én buta szintemen ) meg tudom adni, hogy melyik cellától melyik celláig rajzolja ki a grafikont. A series-t változtatja meg. Amiben pl A oszlophoz adom meg a V oszlopot, tehát A14-V30-at ki tudom cserélni pl A 20 és V50-re. Raktam ki egy gombot a munkafüzetre amivel futtatom a makrót, szépen működik...

 

Előzmény: Delila10 (15112)
Delila10 Creative Commons License 2011.06.10 0 0 15113

Szerencsémre elnézted, így rátaláltam a "Köztes értékkel" beállítási lehetőségre. :)

Előzmény: Törölt nick (15111)

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