Excel kérdés

Jelentkezz be a hozzászóláshoz.

#1064
Sziasztok!



Elõre is elnézést kérek a fogalmazásért de nem vagyok egy nagy excell szakértõ.

Van két különálló excell tábla, az "A" oszlopban a megnevezés mind a kettõben megegyezik.

A másodikban viszont nincs meg minden megnevezés ( az elsõ excellben van 5000 sor a ásodikban 4325)

Hogy tudom megoldani, hogy az ugyanolyan megnevezésûek egymás mellé kerüljenek miután a második tábla adatait a "B" oszlopba másolom.
Delila1
#1063
Itt figyelembe kell venni, hogy az A és B oszlopokban milyen mértékegységben adod meg a hosszat és a szélességet. Ha cm-ben, akkor a D1 képlete:
=HA(C1=0;0;HA(C1<=10000;5200;C1/10000*5200))

Program az, ami az adatokat hibaüzenetté konvertálja. Lassú munkához idő kell.

Yan
#1062
=HA(c1=0;0;HA(c1<=1;5200;c1*5200))

&#165; xfire: kistekila

tigerbácsi
#1061
1 m2 ig ha 5200 HUfot írjon ki, akkor a D1be ez a képlet:
=HA(A1=$Y$1;0;HA(C1<=1;5200;C1*5200))

ha 1 m2 ig 0 írjon ki akkor meg ez:
=HA(A1=$Y$1;0;HA(C1<=1;0;C1*5200))

nem igen értettem meg melyik kell! :-)
lényeg az hogy az Y1 cella mindig üres legyen :-)

Az Élet nem más mint egy hosszú Halál! \"Belül én már rég meg haltam csak a maszkom él.\" - Junkies Nyúljon meg a nyaka bogyokának, s legyen kék a nyelve!

#1060
Jó az elképzelés, csak az a baj, hogy az egységár már megvan adva. Ezért alapból ki lesz töltve. A lényeg az lenne, hogy megadják a szélességet(A1) és magasságot(B1), kiszámolja a m2-t(C1=(A1*B1) és megkapják, hogy mennyibe kerül(D1). Az egységár 5200 Ft/m2, tehát C1 -et kéne 5200-al szorozni. A probléma az, hogy 1m2 alatt is 5200 Ft-ot kéne, hogy kiírjon, de alapból 0-t írjon ki. És ha 1m2 fölé esik az érték, akkor számoljon C1*5200 -at.

Elõre is köszi.
Delila1
#1059
Vegyük, hogy az egységár az A2 cellában van, a B2-ben pedig a m2.
A C2 képlete: =HA(B2<1;A2;A2*B2)

Program az, ami az adatokat hibaüzenetté konvertálja. Lassú munkához idő kell.

#1058
Szép Napot!

Egy olyan kérdésem lenne, hogy excelben szeretnék számolni m2-t, viszont nem tudom megadni, hogy 1m2 alatt adott egységárral számoljon. tehát pl ha 1 m2 5200 Ft akkor 0,7 m2 is 5200 Ft legyen stb.
Tudna valaki segíteni?
Delila1
#1057
Tedd már fel valahova a két fájlt, hogy lássuk, mirõl is van szó!

Program az, ami az adatokat hibaüzenetté konvertálja. Lassú munkához idő kell.

#1056
Üdvözletem!
Örülök, h. végre rátaláltam erre a fórumra, mert bizony gyakran elakadok. Írtam egy kis progit excell2003-ban, ami megkönnyíti egy nyugdíjas orvosnak a gyógyszerekhez írni a recepteket, amiket eddig kézzel (és sok hibával) írt. Adódott egy újabb recept, amihez egy jpg.fájlt kellene kinyomtatni, de attól függõen, h. egy bizonyos cellában milyen szám van. Most ha erre kerül a sor, mindig egérrel odaillesztem. Nem lehetne ezt függvénnyel csinálni?
#1055
Jó estét!
Remélem, most már eljut a kérdésem egy hozzáértõ emberhez!
Az "A" oszlopban gyûjtöm egy játékhoz tartozó nickeket, amikhez tartozik egy-egy hyperhivatkozás is. Ha a nickre klikkelek, akkor ugrás történik arra a nickre, akivel utoljára játszott. Ctrl+C majd Ctrl+V-vel át tudom másolni a hyperhivatkozást a "B" oszlop egy cellájába, de szeretném ezt egy függvényre bízni, mert több ezer ilyen adat van. Nem találok ilyen függvényt. Lehet, h. nincs is? Ha makrót kell írni hozzá, az nekem kínai.
Delila1
#1054
Az Eszközök/Bõvítménykezelõben kapcsold be a két Analysis kezdetût, attól valószínûleg helyrejön.
Ez a két bõvítmény egy halom hasznos új függvényt ad, érdemes tanulmányozni.

Program az, ami az adatokat hibaüzenetté konvertálja. Lassú munkához idő kell.

Silius
#1053
Dede a program tökéletes, egészen addig amíg elmentem, és kilépek.
Ha megnyitom utána, akkor a kijelölés az eredeti helyén marad, és hibába kattintok máshova, már csak a normál keret mûködik, mintha nem is lett volna benne makró, viszont ahol volt, ott úgy marad, mintha formázva lennének a cellák.

Delila1
#1052
Nem ez volt az eredeti kérés?
"ha én rákattintok egy cellára, akkor az adott sort kiemelje? A jobb átláthatóság érdekében..."

Akkor mit is akarsz? Írd le pontosabban.

Program az, ami az adatokat hibaüzenetté konvertálja. Lassú munkához idő kell.

Silius
#1051
Szia
Mûködik, egészen addig, míg mentek, majd kilépek, és belépéskor ott marad a kijelölés, és minden marad a régiben.

Delila1
#1050
Ezt a makrót (sajnos) nem én írtam. Ahhoz a laphoz kell rendelned, amelyiken ki akarod emelni a sort: lapfülön jobb klikk, Kód megjelenítése. Bejutottál a makrószerkesztõbe, a jobb oldalon kapott üres területre másold be.


Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Cells.FormatConditions.Delete
With Target
With .EntireRow
.FormatConditions.Add Type:=xlExpression, Formula1:="1"
With .FormatConditions(1)
With .Borders(xlTop)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = 5
End With
With .Borders(xlBottom)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = 5
End With
.Interior.ColorIndex = 20
End With
End With
With .EntireColumn
.FormatConditions.Delete
.FormatConditions.Add Type:=xlExpression, Formula1:="1"
With .FormatConditions(1)
With .Borders(xlLeft)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = 5
End With
With .Borders(xlRight)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = 5
End With
.Interior.ColorIndex = 20
End With
End With

.FormatConditions.Delete
.FormatConditions.Add Type:=xlExpression, Formula1:="1"
.FormatConditions(1).Interior.ColorIndex = 36
End With
End Sub

Program az, ami az adatokat hibaüzenetté konvertálja. Lassú munkához idő kell.

Silius
#1049
Sziasztok
Excelben be lehet azt állítani, hogy ha én rákattintok egy cellára, akkor az adott sort kiemelje? A jobb átláthatóság érdekében...

Delila1
#1048
Kis hozzáértéssel meg lehet adni a cellák méretét mm-ben.

Az Excellel hihetetlen sok feladatot meg lehet oldani, de ahhoz ismerni kell a mûködését. Nulla ismerettel nem megy!

Program az, ami az adatokat hibaüzenetté konvertálja. Lassú munkához idő kell.

Yan
#1047
mert számolásra van 😊
amire neked kell arra tényleg a word

&#165; xfire: kistekila

takitibi
#1046
Hali!
Köszönöm!Igen, ez a legegyszerûbb fatengelyes elv, csak az a gond, hogy ha mindent ami sallang hó fehérre tolok, akkor van a bibi, ugyanis nem látom hova meg mit is írok be fekete színnel. 😊 Érted?!
Azért köszönöm!Mivel rájöttem h az excel fos úgy ahogy van, mivel nem lehet megadni egy cella méretét mm-ben, vagy cm-ben, így word-ben szerkesztem tovább a mai nap ezt a munkalap szerû táblázatot. Nem egyszerû eset. Na majd kitalálom.

..::http://takrisz.fw.hu::..

tigerbácsi
#1045
hello!
azon cellák amelyek nem kellenek (sallang) azoknak a betûszíneit változtasd a háttér színére. gondolom fehérre. s akkor csak azokat fogod látni mik kellenek s azt is fogja kinyomtatni. szerintem más megoldás nincs, de ha türelmesebb vagy s van akkor majd kapsz választ.

Az Élet nem más mint egy hosszú Halál! \"Belül én már rég meg haltam csak a maszkom él.\" - Junkies Nyúljon meg a nyaka bogyokának, s legyen kék a nyelve!

takitibi
#1044
Kedves Fórumtársak!
Olyan kérdésem lenne, hogy ha excelben akarok nyomtatni egy nyomtatványt mátrix nyomtatóval úgy, hogy csak az értékek nyomtatódjanak a megfelelõ részen a papírra, és a többi sallang ne (megszerkesztett keret, címek, stb..) , akkor azt hogyan tudom megcsinálni?
Valahogy egybe kellene fagyasztani az alap táblázatot, és csak az utólagosan beírt értékeket szeretném kinyomtatni.
Köszönöm!

..::http://takrisz.fw.hu::..

Higany
#1043
Sziasztok! Egy olyan kérdésem lenne, hogy valahogy sikerült eltüntetni azt, hoyg ha belekattintok egy cellába, akkor megjelenjen a fekete keret. Nem tudjátok, hol lehetne visszaállítani? Köszi!

Delila1
#1042
Az elsõ makró (#1007) még a laphoz volt rendelve, és a B12 cella változását figyelte. Utána írtad, hogy választéklistából kerül be az adat, amit már nem lehet eseményvezérléssel figyeltetni. Ahhoz írtam a "szortiroz" makrót, ezt már nem a laphoz kell rendelni. Bemész a VB szerkesztõbe (Alt+F11), kiválasztod bal oldalon a füzetedet, Insert menü, Module. A jobb oldalon kapott üres lapra kell bemásolnod.
Visszatérsz az Excelbe. Alt+F8-ra bejönnek a makrók, a kiválasztott "szortiroz"-hoz az Egyebek gomb segítségével gyorsbillentyût rendelhetsz. Amikor kiválasztasz az A1-ben egy számot, a Ctrl+a megadott billentyû a helyére teszi.
Bemásoltam a mostani változatot, elég sajátságos az elrendezés, nem látok benne rendszert, de te tudod, mit akarsz.
Az elsõ adatot mindegyik oszlopban a 6. sorba írja, a következõt alá, az jó. Nem értem, mi a gondod.

Program az, ami az adatokat hibaüzenetté konvertálja. Lassú munkához idő kell.

#1041
Ezzel a makróval milehet a baj? Csak egy-két dolgot írtam át rajta, de azok csak az oszlopok elhelyezését módosította, szerintem. Csak a 6. sorokba ír, és nem megy tovább..

Sub szortiroz()
Dim a As Variant, oszlop As Integer, usor As Integer
Dim k As Integer, sz As String

a = Left(Cells(1), 5)
Select Case a
Case 10000
oszlop = 11: k = 5: GoTo Szort
Case 20000
oszlop = 12: k = 5: GoTo Szort
Case 30000
oszlop = 15: k = 5: GoTo Szort
Case 40000
oszlop = 20: k = 5: GoTo Szort
Case 50000
oszlop = 25: k = 5: GoTo Szort
End Select

a = Left(Cells(1), 4)
Select Case a
Case 1000
oszlop = 8: k = 4: GoTo Szort
Case 2000
oszlop = 9: k = 4: GoTo Szort
Case 3000
oszlop = 14: k = 4: GoTo Szort
Case 4000
oszlop = 19: k = 4: GoTo Szort
Case 5000
oszlop = 10: k = 4: GoTo Szort
End Select

a = Left(Cells(1), 3)
Select Case a
Case 100
oszlop = 5: k = 3: GoTo Szort
Case 200
oszlop = 6: k = 3: GoTo Szort
Case 300
oszlop = 13: k = 3: GoTo Szort
Case 400
oszlop = 18: k = 3: GoTo Szort
Case 500
oszlop = 7: k = 3: GoTo Szort
End Select

a = Left(Cells(1), 2)
Select Case a
Case 10
oszlop = 2: k = 2: GoTo Szort
Case 20
oszlop = 3: k = 2: GoTo Szort
Case 30
oszlop = 24: k = 2: GoTo Szort
Case 40
oszlop = 17: k = 2: GoTo Szort
Case 50
oszlop = 4: k = 2: GoTo Szort
End Select

a = Left(Cells(1), 1)
Select Case a
Case 1
oszlop = 21: k = 1: GoTo Szort
Case 2
oszlop = 22: k = 1: GoTo Szort
Case 3
oszlop = 23: k = 1: GoTo Szort
Case 4
oszlop = 16: k = 1: GoTo Szort
Case 5
oszlop = 1: k = 1: GoTo Szort
End Select

Szort:
sz = Trim(Cells(1) & "")

If Cells(6, oszlop) > "" Then
usor = Cells(65536, oszlop).End(xlUp).Row
Cells(usor + 1, oszlop) = Right(sz, Len(sz) - k)
Else
Cells(6, oszlop) = Right(sz, Len(sz) - k)
End If
End Sub
Delila1
#1040
Ha az ezres és tízezres nagyságrendet azonos oszlopba írta, akkor te írtál el valamit a makróban. Most innen (#1036) másoltam be a VB-be, és hibátlan. Mielõtt kitettem ide, leellenõriztem mindenféle számmal.

Megírtam az újabb óhajodnak megfelelõen. Innen másold be, hogy ne legyen elírás.


Sub szortiroz()
Dim a As Variant, oszlop As Integer, usor As Integer
Dim k As Integer, sz As String

a = Left(Cells(1), 5)
Select Case a
Case 10000
oszlop = 5: k = 5: GoTo Szort
Case 20000
oszlop = 10: k = 5: GoTo Szort
Case 30000
oszlop = 15: k = 5: GoTo Szort
Case 40000
oszlop = 20: k = 5: GoTo Szort
Case 50000
oszlop = 25: k = 5: GoTo Szort
End Select

a = Left(Cells(1), 4)
Select Case a
Case 1000
oszlop = 4: k = 4: GoTo Szort
Case 2000
oszlop = 9: k = 4: GoTo Szort
Case 3000
oszlop = 14: k = 4: GoTo Szort
Case 4000
oszlop = 19: k = 4: GoTo Szort
Case 5000
oszlop = 24: k = 4: GoTo Szort
End Select

a = Left(Cells(1), 3)
Select Case a
Case 100
oszlop = 3: k = 3: GoTo Szort
Case 200
oszlop = 8: k = 3: GoTo Szort
Case 300
oszlop = 13: k = 3: GoTo Szort
Case 400
oszlop = 18: k = 3: GoTo Szort
Case 500
oszlop = 23: k = 3: GoTo Szort
End Select

a = Left(Cells(1), 2)
Select Case a
Case 10
oszlop = 2: k = 2: GoTo Szort
Case 20
oszlop = 7: k = 2: GoTo Szort
Case 30
oszlop = 12: k = 2: GoTo Szort
Case 40
oszlop = 17: k = 2: GoTo Szort
Case 50
oszlop = 22: k = 2: GoTo Szort
End Select

a = Left(Cells(1), 1)
Select Case a
Case 1
oszlop = 1: k = 1: GoTo Szort
Case 2
oszlop = 6: k = 1: GoTo Szort
Case 3
oszlop = 11: k = 1: GoTo Szort
Case 4
oszlop = 16: k = 1: GoTo Szort
Case 5
oszlop = 21: k = 1: GoTo Szort
End Select

Szort:
sz = Trim(Cells(1) & "")

If Cells(10, oszlop) > "" Then
usor = Cells(65536, oszlop).End(xlUp).Row
Cells(usor + 1, oszlop) = Right(sz, Len(sz) - k)
Else
Cells(10, oszlop) = Right(sz, Len(sz) - k)
End If
End Sub

Program az, ami az adatokat hibaüzenetté konvertálja. Lassú munkához idő kell.

Delila1
#1039
A SZUMHA függvény lesz a barátod.

Program az, ami az adatokat hibaüzenetté konvertálja. Lassú munkához idő kell.

#1038
Hellósztok!

Lenne 1 kérdésem excelben, remélem tudtok segíteni!
Szóval az lenne h van egy táblázatom, ahol nevek és fizetendõ összegek vannak. S ezt kellene átírnom egy másik táblázatba, úgy hogy ha változik a név, akkor az összeg is. Ez meg is van egy szûrõ illetve FKERES függvénnyel, ami rákeres az adott névre. Viszont a gond akkor van ha a név kétszer szerepel, akkor csak az elsõt írja ki, a második összeget nem. Erre tudtok valami h azt is kírja? (úgy mint az elsõ összeget, hogyha változik a név akkor ez is)

Pl:

Kovács János 3245
Nagy Béla 1457
Kovács János 1241

Így kellene: (egymás mellé, külön)
Kovács János
Fizetendõ:
3245 1241

Lvl 54 - 7:3 Hybrid Str Archer - Fire+Cold Lvl 30 - Full Str Glavie - Fire+Light (InAct) Lvl 52 - Full Int Warlock/Wizard

#1037
Ez nagyon jó! 😊 Köszönöm, annyi gond van még, hogy valamiért az 1000201006282010 és a 10000201006282010-et egy oszlopba írja... ugyanez a 2000 és a 20000-el kezdõdõeknél is. Egyébként azt még meg lehet oldani, hogy az oszlopba már csak az elsõ számjegyek utáni számokat írja be? Tehát ne azt írja h 1000201006282010, hanem azt h 201006282010.
Delila1
#1036
Ha úgy értetted,ahogy az elõbbi hozzászólásban leírtam, itt a makró.
Ha az elõbbi hozzászólásomban leírtak szerint szeretnéd szétválogatni az adataidat, itt van hozzá a makró:

Sub szortiroz()
Dim a As Variant, oszlop As Integer, usor As Integer

a = Left(Cells(1), 5)
Select Case a
Case 10000
oszlop = 5: GoTo Szort
Case 20000
oszlop = 10: GoTo Szort
Case 30000
oszlop = 15: GoTo Szort
Case 40000
oszlop = 20: GoTo Szort
Case 50000
oszlop = 25: GoTo Szort
End Select

a = Left(Cells(1), 4)
Select Case a
Case 1000
oszlop = 4: GoTo Szort
Case 2000
oszlop = 9: GoTo Szort
Case 3000
oszlop = 14: GoTo Szort
Case 4000
oszlop = 19: GoTo Szort
Case 5000
oszlop = 24: GoTo Szort
End Select

a = Left(Cells(1), 3)
Select Case a
Case 100
oszlop = 3: GoTo Szort
Case 200
oszlop = 8: GoTo Szort
Case 300
oszlop = 13: GoTo Szort
Case 400
oszlop = 18: GoTo Szort
Case 500
oszlop = 23: GoTo Szort
End Select

a = Left(Cells(1), 2)
Select Case a
Case 10
oszlop = 2: GoTo Szort
Case 20
oszlop = 7: GoTo Szort
Case 30
oszlop = 12: GoTo Szort
Case 40
oszlop = 17: GoTo Szort
Case 50
oszlop = 22: GoTo Szort
End Select

a = Left(Cells(1), 1)
Select Case a
Case 1
oszlop = 1: GoTo Szort
Case 2
oszlop = 6: GoTo Szort
Case 3
oszlop = 11: GoTo Szort
Case 4
oszlop = 16: GoTo Szort
Case 5
oszlop = 21: GoTo Szort
End Select

Szort:
usor = Cells(65536, oszlop).End(xlUp).Row
If Cells(10, oszlop) > "" Then
Cells(usor + 1, oszlop) = Cells(1)
Else
Cells(10, oszlop) = Cells(1)
End If
End Sub


Rendelhetsz hozzá gyorsbillentyût: Alt+F8 -ra bejönnek a makrók. Kijelölöd a szortiroz nevût, az Egyebek gombra kapsz egy párbeszéd ablakot, ahol a Ctrl+ mellé beírod a betût, amelyikkel a billentyûzetrõl indíthatod.
Gombhoz is rendelheted.

Program az, ami az adatokat hibaüzenetté konvertálja. Lassú munkához idő kell.

Delila1
#1035
A 3 termékkódod három féle hosszúságú.
Hány külön oszlop kell?

A10-tõl 1; B10-tõl 10; C10-tõl 100; D10-tõl 1000; E10-tõl 10000
F10-tõl 2; G10-tõl 20; H10-tõl 200; I10-tõl 2000; J10-tõl 20000
.
.
U10-tõl 5; V10-tõl 50; W10-tõl 500; X10-tõl 5000; Y10-tõl 50000 kezdetûek?

Program az, ami az adatokat hibaüzenetté konvertálja. Lassú munkához idő kell.

#1034
Erre miért kell makró? Egy szabad oszlopban megjelenited A1 elsõ karakterét left fg-el. Majd pivottábla, amit úgy alakitasz ki ahogy akarsz.
#1033
Ja és a lényeget megint kifelejtettem, hogy nem kézzel van beírva az A1-be, hanem egy legördülõ választék listábol lehet kiválasztani ezeket a kódokat, és a kiválasztott szám megy az A1-be.
#1032
Tehát az lenne a lényeg, hogy beírok egy értéket egy cellába, legyen ez az "A1". Az ide beírt érték elsõ számjegyeit kell figyelnie a makrónak. Ezek termék kódok, pl ílyenek lehetnek: 5201006272010, 10201006272010, 100201006272010. Az elsõ számjegyek lehetnek 1, 2, 3, 4, és 5 számjegyûek. És ezeket szortírozni kellene, 5201006272010-ezt pl az 5-el kezdõdõek oszlopába kellene írnia, az A10-be, és ha még egy 5-el kezdõdõ elõfordul, akkor azt az A11-be. 10201006272010-ezt a 10-el kezdõdõekhez kellene írnia a B10-be. 100201006272010-ezt a 100-al kezdõdõekhez, és így tovább...
Delila1
#1031
Ha jól értem, akkor az A1-be írsz közvetlenül, tehát ennek a változását kell figyeltetni.
Az eredeti makró nem figyeli, hogy a B2-be bevitt érték hány számjegybõl áll. Akkor ezt kérted: "...beírok egy értéket mondjuk B2-be és ha az 10-el kezdõdik akkor azt tegye a B10-be ha még egy 10-el kezdõdõt írok akkor azt a B11-be írja. És ha 20al kezdõdõt írok akkor azt a C10-be tegye és így tovább..?". A 10-zel kezdõdõ szám minimum 2, maximun akárhány számjegyû lehet.
Arra tippelek, hogy beviszel egy értéket az A1 cellába. Attól függõen, hogy ez hány számjegybõl áll, a B2, C2, és D2 cellákba kell szortírozni, illetve ha már van ezekben érték, a B, C és D oszlop következõ sorába kell másolni az A1-be beírt értéket.
Kérlek, ugorj neki újra, és próbáld meg pontosan leírni, mire van szükséged. Ha lehet, kicsit bõkezûbben bánj a mondatrészeket elválasztó vesszõkkel, mert ezek nélkül kicsit nehezen lehet követni a mondanivalódat.

Program az, ami az adatokat hibaüzenetté konvertálja. Lassú munkához idő kell.

#1030
Még annyit változtattam az elõzõ makrón hogy nem mindíg 2 számjegyû az érték, és átírtam "a = Left(Target, 2)" -ezt 3-ra, 4-re. És ahol más a számjegy ott változott "If Target.Address = "$B$2" Then" -ez is. C2-re D2-re. És ezért kellett egy képlet. Az A1-be beírt érteket egy HA fügvény dönti el hogy hány számjegyû és, hogy a B2, C2 vagy D2-be kell-e írnia. Csak ha ezekbe a cellákba beírja, nem mûködik a makró :S és nem írja be az oszlopokba.
Delila1
#1029
Írd meg a B2 képletét.
Az érdekel, hogy melyik cella (cellák) értékének változása módosítja a B2-t.

Program az, ami az adatokat hibaüzenetté konvertálja. Lassú munkához idő kell.

#1028
Szia Delina! Emlékszel még arra a makróra amit nekem írtál?

Private Sub Worksheet_Change(ByVal Target As Range)
Dim a As String
If Target.Address = "$B$2" Then
a = Left(Target, 2)
If a = "10" And Cells(11, 2) = "" Then
Cells(11, 2) = Target
Exit Sub
End If
If a = "10" And Cells(11, 2) > "" Then _
Cells(Range("B65536").End(xlUp).Row + 1, 2) = Target
If a = "20" And Cells(11, 3) = "" Then
Cells(11, 3) = Target
Exit Sub
End If
If a = "20" And Cells(11, 3) > "" Then _
Cells(Range("C65536").End(xlUp).Row + 1, 3) = Target
End If
End Sub

Valahogy így nézett ki.. Olyan probléma merült fel, hogy a "B2"-be beírt érték, nem kézzel van beírva, hanem egy képlettel kerül oda. És így nem akar mûködni :S erre van valamilyen megoldás? Esetleg egy gombbal mûködne?
Delila1
#1027
A szimulációs miben van írva? Ha Excelben, akkor nem a laphoz, hanem a ThisWorkbook-hoz kell rendelni. A végére tegyél a Msgbox-ot, ami szól, hogy végzett.
Egyébként, ha a ThisWorkbook-hoz rendeled, a laphoz rendelt Worksheet_Change érzékeli a beírást.

Program az, ami az adatokat hibaüzenetté konvertálja. Lassú munkához idő kell.

#1026
Köszönöm a változós beíró dolgot!

A másik problémát meg még mindig nem tudtam megoldani. Amikor elõször próbáltam megoldani azt a problémát én is a "change" utasítást használtam. De sajnos a ez a parancs nem érzi ha a szimulációs program frissíti a táblát, tehát beírja a cellákba az értékeket meg kiírja hogy "Results Availablet", olyan mintha nem történne változás. :S

Az is megoldás lehetne ha idõnként (mondjuk 2 másodpercenként) lefutna
egy makró ami ellenõrzi hogy kiírta-e hogy kész. De sajnos a "Wait" parancsot nem használhatom mert ha fut egy makró akkor nem adja át az adatokat csak ha paranccsal kérem. Viszont ha elõbb kérem az adatot mint ahogy a szimuláció végez akkor hibaüzenetet kapok amit le kell okézni, így megáll a ciklus.(ja a szimuláció lefutási ideje sztochasztikus (ha használhatom ezt a durva kifejezést😄) 10 másodperctõl 5 percig is tarthat)

Lehetne még egy megoldás is, ha lehetne egy makrót írni ami a felugró ablakot felugrás után 2 perccel leokézi vagy eltörli. Van erre parancs? Nem találtam rá semmit...

De gondoltam egy olyan megoldásra is, hogy veszek egy majmot és betanítom, hogy amikor egy cellába megjelenik egy bizonyos szám akkor lenyom egy gombot. 😄 De ez állatkínzás lenne 24 órán keresztül 😄
#1025
Szia Delila!

Ez lett a vége. A makró szépen beilleszti a vágólapra tett adatot, ha nem teljes a kijelölés akkor figyelmeztet. Ráadásul bolondbiztos is egy kicsit mert ha nem a Munka1-en áll a munkafüzet akkor sem rombolja szét az aktív lapot.

Köszi!

Sub beilleszt_vr()
Sheets("Munka1").Select
Range("A1😮1").Select
Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select
Selection.ClearContents
ActiveSheet.Paste

sz = "This message has been sent by System Guard, please do not reply."
Columns("A:A").Select
On Error GoTo hiba
Selection.Find(What:=sz, After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:= _
xlNext, MatchCase:=False, SearchFormat:=False).Select
MsgBox "Sikeres beillesztés. Összesen " & Selection.Row - 24 & " sor."

Exit Sub

hiba:
Range("A1😮1").Select
Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select
Selection.ClearContents
MsgBox "Hibás beillesztés, ismételd meg új kijelöléssel!"

End Sub
Delila1
#1024
Tehát egy másik makró beírja valahova a szöveget. A laphoz rendelj egy makrót, ami ezt az eseményt (változást a lapon) lekezeli.

Sub ResA()
Cells(5, 1) = "Results available"
End Sub

Ez a makró beírja a lapra (jelen esetben az A5-be) a vizsgált szöveget. Mivel változás történt a lapon, beindul a hozzá rendelt makró:

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Value = "Results available" Then
Cells(2, 1) = Cells(1, 1) + 1
End If
End Sub

Ez az A2-be írja az A1+1 értéket abban az esetben, ha a lapon megjelent a "Results available" szöveg.

Nem akarod elhinni, de a function NEM TUD MÁS CELLÁBA ÍRNI.

Az itt közölt makród Else ága felesleges, hiszen a fu változó csak akkor kap értéket, ha a range("a1")=2 feltétel igaz. Amíg nem adsz értéket, a változó nulla, vagy üres string.

Példa a memória változóra:

Sub változó()
Dim v As Variant
v = 26
MsgBox v
beír v
End Sub

A Dim utasítással helyet foglalsz a v nevû változónak a memóriában, ebben az esetben variant típusút, vagyis mindegy, hogy a késõbbiek folyamán egész számot, tizedest, logikai értéket, vagy éppen dátumot töltesz bele.
A második sorral értéket adsz neki. A harmadikkal kiíratod egy üzenetbe, végül a negyedik sorrral meghívod a beír makrót, és átadod neki a változó értékét.

Sub beír(v)
Cells(2, 3) = v
End Sub

A címsorban zárójelek között szereplõ változó értékével kezd valamit ez a makró, jelen esetben beírja a C2 cellába.

Program az, ami az adatokat hibaüzenetté konvertálja. Lassú munkához idő kell.

#1023
Helló!

Tegnap este kipróbáltam. Az a baj hogy azt a függvényt nem én írom ami kiíratja a "Results available"-t. (Le van jelszavazva, bárcsak bele piszkálhatnék...) :S Viszont megpróbáltam úgy hogy arra írok függvényt, hogy amikor megjelenik a felirat akkor oda-vissza lép két lap között, de nem lépkedett :S. A "Worksheet_Activate" parancsot viszont kipróbáltam azzal nem volt gond az tette a dolgát. Szóval még mindig ott állok ahol a part szakad :S. Hol lehet annak utánanézni, hogy mik a korlátai a "function" parancsnak??
Ja úgy tervezem a második fele a ciklusnak úgy fog indulni ha két feltétel teljesül:1, lefutott az elsõ fél 2, kész a szimuláció (ez hiányzik már csak :S)
Azért mellékelek egy egyszerûsített példát hátha én rontottam el valamit:

Public Function fu(cell As Range, _
Optional default_value As Variant)

If cell.Range("a1") = 2 Then
fu = default_value
Sheets("Munka2").Activate
Sheets("Munka1").Activate

Else
fu = 0
End If
End Function

Sub Worksheet_Activate()

Cells(1, 1) = Cells(1, 1) + 1


End Sub

Lenne viszont még egy kérdésem de ez csak aprócska. Hogy definiálok változókat úgy hogy azok a memóriába maradjanak és ne keljen mindig egy cellába menteni õket? (Egyébként kezdõ vagyok még a makro programozásból, de jól bele csaptam a lecsóba... 😊)
Delila1
#1022
Függvénybõl ezt nem tudod megoldani.
Mit szólsz ahhoz a megoldáshoz, hogy mikor beíratod a "Results available"-t, átlépsz egy másik lapra, majd vissza? A lapra történõ visszalépést lekezelheted egy eseménykezelõ eljárással (Worksheet_Activate), ez lenne a "jel", amire indul a ciklus második fele.
A "második fél"-be tegyél egy változót, ami az általa újraindított "elsõ fél"-nek jelzi, hogy egyszer már eljutott a másodikba, és ettõl függjön, hogy indítja-e megint a másodikat. Egyébként végtelen ciklusba szaladsz. 😊 De ezt biztosan tudod.

Program az, ami az adatokat hibaüzenetté konvertálja. Lassú munkához idő kell.

#1021
A példám csak egy leegyszerûsített példa. Nekem az lenne a fontos hogy elindítsak egy sub-ot egy adott értéknél. Hiszen az excelt egy szimulációs program interfészeként használom. Egy ciklussal adnám meg a program input értékeit, amit makróban írok. Csak az a baj hogy nem szabad semmilyen makrónak futnia, amíg a külsõ progi dolgozik, hiszen addig nem adja vissza az adatokat. Így a "Wait" parancs kilõve (vagyis most azt használom de így 10 órás egy vizsgálat, és mellette kell ülnöm, mert néha megakad :S). Így azt gondoltam, hogy for ciklust kettészedem két if ciklusra. Az elsõ elindítja a szimulációt. A szimuláció lefut, visszaadja az adatokat a táblának (change ezt nem érzékeli :S), az egyik cellában megjelenik a "Results available" felirat. És erre a "jelre" indulna a ciklus második fele, ami megadja a megfelelõ cellákba következõ paramétereket, és újra indítja az elsõ programot. Huhhh no ezzel nem akartalak terhelni titeket, és ezért írtam leegyszerûsített példát. 😊 Remélem van megoldás az ilyen problémára, vagy nekem az is elég lenne ha egy függvénybõl bármilyen sub-ot el tudja indítani.

iscasC

Delila1
#1020
Függvénnyel nem lehet más cellába íratni, nem arra való. Csakis abba a cellába ír értéket, amelyikben szerepel. Amit szeretnél, olyan, mintha pl. a SZUM függvénytõl várnád el, hogy ha a kapott érték megfelel egy kritériumnak, akkor egy másik cellában jelenítsen meg egy értéket.
Az E5-be tegyél egy HA függvényt, ami ezt elintézi.

Program az, ami az adatokat hibaüzenetté konvertálja. Lassú munkához idő kell.

Delila1
#1019
A szöveg keresésénél a Columns("A:A").Select biztosítja, hogy csak az A oszlopban keresse a makró az sz szöveget.
Hibakezeléssel:



Törli az eddig bemásolt adatokat, üzenet küld, és kilép.

Program az, ami az adatokat hibaüzenetté konvertálja. Lassú munkához idő kell.

#1018
Sziasztok!

Szeretnék írni egy olyan függvényt, ami meghív egy sub-ot ami ír a tábla egyes celláiba.

Valahogy így:

Public Function MyFu(cell As Range, _
Optional default_value As Variant)

If cell.Range("a1") = 2 Then
MyFu = default_value
Application.Run ("viz")
Else
MyFu = 0
End If
End Function

Public Sub viz()
Worksheets("Munka1").Cells(5, 5) = 1
End Sub

Szerintem ennek mûködnie kéne, de ha a beadott érték 2-re vált akkor csak az „#ÉRTÉK!” visszajelzést kapom. Ha olyan sub-ot futtatok, ami mondjuk egy szövegdobozt dob eredményül, de nem avatkozik be akkor viszont fut. Mi lehet az ok? Hogy kell megoldani?
Ez a függvény egy agyon makrózott táblába megy, amibe egy külsõ program is nyúlkál. (A problémám akkor is fenn áll, ha csak egy üres táblába próbálkozok.) Már próbáltam más paranccsal (change) is megoldani a problémát, de az összeakadást okoz, a függvény látszik megoldásnak, csak ez se fut.

Köszönöm elõre is a választ:

iscasC
#1017
A törlés>beillesztés>ellenõrzés megoldást választottam. Jó kijelöléssel szépen mûködik is. A hibakezelésben kellene még ötlet.

Jól gondolom-e, hogy hibás kijelölés esetén (ha nincs a beillesztésben a zárósor) akkor valamilyen hibával ki fog lépni Debug módba? Mert ezt nagyon el szeretném kerülni.

Az lenne a legjobb, ha hiba esetén csinálna egy Undo-t és figyelmeztetne, hogy ismételd meg a beillesztést új kijelöléssel.
#1016
Köszönöm a gyors választ, ma tudtam kipróbálni a megoldást, szépen mûködik a makró és kiírja, hogy hol találja meg a záró szöveget.

Az a gondom vele, hogy mivel mindig az elõzõ napi adattáblát írom felül ezért ha egy hibás kijelöléssel írom felül a munkalapomat a keresett szövegem akkor is ott lesz valahol az 1500. sor környékén csak éppen az elsõ 700 sor az adott napi adatokat tartalmazza, a következõ 7-800 pedig az elõzõ napit.

Azért gondoltam, hogy a kijelölés méretében van benne a megoldás mert a beillesztés után mindig csak beillesztett tartomány van kijelölve a munkalapon, a többi nem.

Vagy az is megoldás lenne, ha a makró nem az egész munkalapon keresné a zárószöveget csak a kijelölésben, esetleg ha minden beillesztés elõtt törölném a munkalap tartalmát és utána kerestetném a szöveget (ha megtaláltam=jó, ha nem=hiba), vagy ha egy makróba tenném a törlés>beillesztés>ellenõrzés-t és csak akkor van MsgBox ha hiba van.

Nem tudom, még alszom rá egyet.
Delila1
#1015

Talán most jobban sikerül a kép beszúrása.

Program az, ami az adatokat hibaüzenetté konvertálja. Lassú munkához idő kell.