-
IT café
A Microsoft Excel topic célja segítséget kérni és nyújtani Excellel kapcsolatos problémákra.
Kérdés felvetése előtt olvasd el, ha még nem tetted.
Új hozzászólás Aktív témák
-
Fferi50
őstag
válasz scott_free #27616 üzenetére
Szia!
Ha csak ez az egy sor van, akkor szerintem nem érdemes vele foglalkozni, mert copy-paste módszerrel gyorsan át tudod írni.
Ha több sor is van, csinálni kell egy külön makrót és azt kell minden egyes textboxnál meghívni.
Üdv.
-
Fferi50
őstag
válasz sedyke #27622 üzenetére
Szia!
Bocs, rosszul fogalmaztam - az egyedi értékekre gondoltam, amikor a sorokról/oszlopokról beszéltem:
pl. van 1,9,21,30,100 érték. Akkor itt elvileg 100 sornak kellene lennie, amiből 5 sorban van érték. Igazából az a kérdés, hogy hány olyan tétel van, amihez nem tartozik a táblában érték, de meg kellene jeleníteni, mint lehetséges értéket.
Milyen típusú az a tételsor, amihez a teljes megjelenítést szeretnéd hozzárendelni?Üdv.
-
Fferi50
őstag
Szia!
Ez a jelenség az Excel számtárolási sajátosságaiból adódik, a lebegőpontos tárolás miatt a "sokadik" tizedesjegyekben eltérés lehetséges.
Bővebben is olvashatsz erről több helyen is (bocsi, de most nem tudok linket csatolni).
Egyébként gondolom tudod, hogy az Excel 15 értékes számjegyet tud tárolni, ha ezen túlnyúlik a szám, akkor a többi mind 0 lesz, függetlenül attól, hogy éppen mennyit írtál arra a helyre (természetesen szöveg formátummal ez nem így van).Üdv.
-
Fferi50
őstag
válasz Kal-El #27676 üzenetére
Szia!
Azért tisztázni kellene még egy-két dolgot:
A több cella azonos sorban vagy azonos oszlopban van, esetleg "összevissza"?
A különbség minden esetben +1 a cellaszínezés feltételében?
Az A1 (azaz az induló cella) is szineződjön?Ha egy sorban vannak, kijelölöd a cellákat A2-től végig, a feltétel képlet pedig így néz ki: B1>A1+1 és ez érvényes a kijelölés egészére. Ha az A1 cellát is szeretnéd színezni, arra külön feltétel kell, A1>1 ezt lehet képlettel, vagy adott tartalmú cellák formázása pontból.
Üdv.
-
Fferi50
őstag
válasz Hege1234 #27675 üzenetére
Szia!
Pár kérdés:
A mintában a profit oszlop milyen számítással jön ki? Az árfolyam különbségen kívül mit kell még levonni? Milyen devizában van a profit?
A comission mindig $5, akármiben van az üzlet kötve? Ha igen, milyen árfolyamon számoljuk át a profit devizanemére?Az első sort rögzítheted a nézet - ablaktábla rögzítése menüpontban, előzetesen állj rá az A2 cellára.
Üdv.
-
Fferi50
őstag
válasz Kal-El #27683 üzenetére
Szia!
Ha B5 cellában van az érték és a 8. sorban van a "státuszjelző", a 10.sorban pedig a "skála", akkor a feltételes formázás képlete a 8. sorra (érvényesség =$A$8:$DF$8)
=A$10<=$B$5
Ebben az esetben a feles értékeket is be kell írnod a 10.sorban levő skálába.Ha nem az első oszlopban kezdődik a jelző, akkor A$10 helyett a megfelelő oszlop betűjelét írd be és attól az oszloptól indul a feltételes formázás érvényessége is.
Üdv.
[ Szerkesztve ]
-
Fferi50
őstag
válasz Hege1234 #27681 üzenetére
Szia!
A K oszlopban képlet =HA(HA(C2="long";F2-E2;E2-F2)>0;HA(C2="long";F2-E2;E2-F2)*10000;"")
Az L oszlopban képlet =HA(HA(C2="long";F2-E2;E2-F2)<0;HA(C2="long";F2-E2;E2-F2)*-10000;"")A K oszlopban a feltételes formázás - adott tartalmú cellák formázása, ha a cellaérték nagyobb mint 0 - kitöltés világoszöld - betűszín sötétzöld.
Az L oszlopban a feltételes formázás - adott tartalmú cellák formázása, ha a cellaérték kisebb mint 0 - kitöltés rózsaszín - betűszín piros.Üdv.
-
Fferi50
őstag
válasz Kal-El #27688 üzenetére
Szia!
Bocs, de a csatolt képen azt láttam, hogy a 10. sorban ott vannak az értékek, azok a számok, amiket világoszöldre váltasz. Lehet rosszul gondolom, de azok nem cellákban vannak?
Másrészt, lehet a skálázást az oszlopok értékéhez is viszonyítani, akkor két képlet kell.
10-ig =OSZLOP()/2<=$B$5
10-től=OSZLOP()-10<=$B$5Ha nem az A oszloptól indul a skála, akkor annyi oszlopot még ki kell belőle vonni, hogy helyes eredményt kapj (ezt ki tudod kísérletezni).
Üdv.
[ Szerkesztve ]
-
Fferi50
őstag
válasz poffsoft #27711 üzenetére
Szia!
Bocs, de én úgy gondolom, hogy a B1:B3 selection az nem egyenlő összevont cellákból álló tartománnyal, hanem csak 3 cellával. Ez igaz a C1:C3 tartományra is, Illetve, mindkét tartományban ettől függetlenül lehetnek összevont cellák!!
Ezért mindenképpen meg kell nézni a MergeCells tulajdonságot.
Ez úgy viselkedik, ha a kijelölt tartomány összevont, akkor True, ha vegyes, akkor Null, ha nincs benne összevont cella, akkor False az értéke.Azt, hogy összefüggő-e a kijelölés, az Areas tulajdonsággal tudod megnézni. Ha Selection.Areas.Count<>1, akkor a kijelölés nem összefüggő. A Count megmondja, hány részből áll a kijelölés, ezeken külön-külön kell végigmenni.
Az Activecell.Mergearea.Cells.Count pedig csak azt az egy cellát nézi, amit éppen kijelöltél - többszörös kijelölésnél is! - tehát félrevezető eredményt ad.
Üdv.
[ Szerkesztve ]
-
Fferi50
őstag
válasz poffsoft #27720 üzenetére
Szia!
Szerintem ezt több lépésben tudod csak megnézni.
1. Selection.Cells.Count=1 akkor biztosan nincs összevonva, mert az összevont cellákat nem tudod egyedüliként kijelölni.
2. Selection.Cells.Count>1, akkor meg kell nézni a Selection.MergeCells tulajdonságot (értékeit írtam korábban).Üdv.
-
Fferi50
őstag
válasz sedyke #27729 üzenetére
Szia!
Egy tartományba beírod a termék munkalapok nevét.
Fkeressel megkeresed az adott termékhez kapcsolódó munkalapot egy munkacellába.
Majd az indirekt függvényt használva megkapod az adott táblából az adatot.
A munkacella (S1) tartalma Termék1Az A5 cellában a képlet =indirekt(S1 & "!A5")
Üdv.
-
Fferi50
őstag
válasz sedyke #27731 üzenetére
Szia!
Igen, hiszen csak úgy tudod az adatokat átvenni az adott terméklapról.
Viszont ha ügyesen írod be, akkor lehet húzni a függvényt.
A "munkacella" (amit S1-nek adtam meg) az mindig ugyanaz, tehát annak $S$1 módon kell megadni a címét. A tartalmát pedig Fkeres képlettel adod meg. (=Fkeres(temék;terméklapoklistája;1;0)).Az oldalrovatokat és a fejrovatokat természetesen nem kell képlettel megadni.
Üdv.
-
Fferi50
őstag
válasz sedyke #27740 üzenetére
Szia!
A sheetlistát ki kell egészíteni a termék kódokkal, beszúrsz még egy oszlopot az N elé és oda beírod azt a temékkódot, amelyik a mellette levő sheet-en van. Tehát a sheetlistád az N:O oszlopokban lesz.
A Q1 cellát kinevezhetjük "munkacellának". Ebben a képlet: =Fkeres($B$1;$N$1:$O$21;2;0) Természetesen a sorok száma a ténylegesen kitöltött soroké legyen.B3 cella képlete: =INDIREKT($Q$1 & "!B" & SOR())
A C3 - F3 - H3 - J3 cellák képlete ugyanaz, csak a B helyére a megfelelő oszlopot írod.A B11 cellánál gondolom érvényesítéssel listából lehet választani.
Ezután már tudod másolni a képletet lefelé irányba.
Remélem, sikerül.
Üdv.
[ Szerkesztve ]
-
Fferi50
őstag
-
Fferi50
őstag
válasz sedyke #27746 üzenetére
Szia!
Ha jól emlékszem, azt írtad a legelején, hogy minden terméknek külön terméklapja van. Ez azt jelenti, hogy már 800-nál több munkalapot tartalmaz a munkafüzeted.
Nincs mese, egyszer végig kell menni rajta és megnézni, melyik termék melyik lapon van - különben nem tudod ezt a "behívósdit" megcsinálni.
Erre itt egy makró:
Sub vegigkeres()
Dim sh As Worksheet, ws As Worksheet, xx As Integer
Set ws = Sheets("Főlap") ' ide a Főlap helyére annak a munkalapnak a nevét írod, amelyre a kigyűjtést szeretnéd.
xx = 2
For Each sh In Worksheets
If sh.Name <> ws.Name Then
ws.Cells(xx, "N").Value = sh.Cells(1, "B").Value
ws.Cells(xx, "O").Value = sh.Name
xx = xx + 1
End If
Next
End SubEzt akár egy általános modulba, akár a "Főlap" kódlapjára bemásolhatod - ez utóbbi: jobb egérgomb a lapnéven alul, kód megjelenítése, bemásolás.
Egyszer lefuttatod, akkor az N-O oszlopba beírja a munkafüzetben talált termékkódokat (a munkalapok B1 cellájában levő értéket, mellé pedig annak a munkalapnak a nevét, amelyen találta). Vigyázat, nem ellenőrzi, ha esetleg duplikált termékkód fordul elő.
Ezután a Főlapod B1 cellájának érvényesítésére megadhatod az N oszlopban levő értékeket.Ha mindez megvan, a makróra már nincs is szükséged, mentheted makrómentesen a füzetet.
Üdv.
-
Fferi50
őstag
válasz sedyke #27756 üzenetére
Szia!
A Q1 cellában a képlet: =Fkeres($B$1;$N$1:$O$21;2;0) Természetesen a sorok száma a ténylegesen kitöltött soroké legyen.
B3 cella képlete: =INDIREKT($Q$1 & "!B" & SOR())
A C3 - F3 - H3 - J3 cellák képlete ugyanaz, csak a B helyére a megfelelő oszlopot írod.Ha a cellákba ezt a képleted írod, akkor megtalálja. A Q1 cellában az Fkeres eredménye annak a munkalapnak a neve lesz, ahol a B1 cellába beírt termékkód van.
Üdv.
[ Szerkesztve ]
-
Fferi50
őstag
válasz sedyke #27758 üzenetére
Szia!
A munkalapokon való elhelyezkedés mennyire "szabályos", azaz mindig egymás alatt vannak és soha nem egymás mellett a termékek?
Ez így egy kicsit bonyolítja a helyzetet, de nem megoldhatatlan. Természetesen a makró így nem azt csinálja, amit szeretnénk.
Mondjuk a 4 termékes munkalap képét feltehetnéd, hogy látni lehessen az elhelyezkedés logikáját.
Üdv.
-
Fferi50
őstag
válasz sedyke #27761 üzenetére
Szia!
Úgy gondolom, megszületett a kielégítő megoldás:
A makró:
Sub termeklistas()
Dim sh As Worksheet, ws As Worksheet, xx As Integer, yy As Integer
Set ws = Sheets("Munka1")
yy = 1
For Each sh In Worksheets
xx = 1
If sh.Name <> ws.Name Then
Do While True
If sh.Cells(xx, "B").Value = "" Then Exit Do
ws.Cells(yy, "N").Value = sh.Cells(xx, "B").Value
ws.Cells(yy, "O").Value = sh.Name & "!"
ws.Cells(yy, "P").Value = xx - 1
xx = xx + 51
yy = yy + 1
Loop
End If
Next
End SubA makró az N oszlopba beírja a termékkódot, az O oszlopba a munkalap nevét, felkiáltójellel kiegészítve, a P oszlopba pedig az adott termék hol kezdődik a munkalapon -1.
Hibaellenőrzés (mármint, hogy valóban termékkód van-e minden 51. cellában, nincs benne, azt a listából láthatod, ha átnézed).
Ezek után a képletek:
R1 cella (M)[/=FKERES($B$1;$N$1:$P$10;2;0)M]
S1 cella (M)=FKERES($B$1;$N$1:$P$10;3;0)(/M)
B3 cella (M)=INDIREKT($R$1 & "B" & $S$1+SOR())(/M)
C3 cella (M)=INDIREKT($R$1 & "C" & $S$1+SOR())(/M)Az első sor tovább értelemszerűen változtatva csak a B,ill. C helyére írva az aktuális oszlopot.
Ezután lefelé másolhatod a képleteket.A B1 cella érvényesítése: lista - forrás N1:P10
Ezután a listából kiválasztod a termékkódot, a lap pedig automatikusan kitöltődik.
A $P$10-ben a 10 helyett az utolsó "tele" cella sorszámát kell írni. (Minden másra ott a MasterCard )
A makróra a lefuttatás után, amennyiben jónak találod az eredményt, nincs szükséged. Ha meg szeretnéd tartani, akkor makróbarátként kell elmenteni a munkafüzetet.
Remélem, sikerülni fog.
Üdv.
[ Szerkesztve ]
-
Fferi50
őstag
Szia!
A válasz IGEN, meg lehet csinálni.
Bővebben: A rajzszámot tartalmazó cellát kijelölöd, jobb egérgomb, hivatkozás - kiválasztod a megfelelő fájlt, kitöltöd a szükséges mezőket, majd ok.
Ezt az egészet makrórögzítővel felveszed, majd "paraméterezed" és lefuttatod minden cellára nézve.
Ha a makrót rögzítetted és ide felteszed, segítünk a paraméterezésben.Üdv.
-
Fferi50
őstag
válasz Carasc0 #27787 üzenetére
Szia!
A munkalap activate eseménykezelőjébe kell betenned a makró meghívását.
Munkalapfülön jobb egérgomb - kód megjelenítése - bal oldalon a lenyílóban Worksheet kiválasztása, utána jobb oldali lenyílóban activate kiválasztása. A megjelenő sub end sub sorok közé beírod a makród nevét.Ezek után minden olyan alkalommal, amikor aktívvá teszed a lapot (másik lapról ide átjössz), lefut a makród.
A másik kérdésedre igen a válasz.
Üdv.
-
Fferi50
őstag
válasz Carasc0 #27795 üzenetére
Szia!
A cellákban levő szöveg betűszínét változtasd meg a háttérszínnek megfelelően - akkor nem fog látszani, mi van bele írva. Amikor megmutatod, akkor visszaváltod a színt. (Range("A1").font.color=vbwhite fehér színű betűk, Range("A1").font.color=vbblack fekete színű betűk.)
Üdv.
-
Fferi50
őstag
válasz #75654912 #27937 üzenetére
Szia!
Megpróbálhatnád a SZUMHATÖBB függvényt.
=SZUMHATÖBB($D$10:$D$20;$B$10:$B$20;$B5;$C$10:$C$20;$C5)
Mivel a termék - gép kombináció egyedi, ezért az adott gép - termék kombináció eredménye kerül a cellába.(Természetesen a tartományokat saját magadra adaptáld - az összegtartomány az, ahol az elvárt teljesítmények vannak, az egyik feltételtartomány az ehhez tartozó termék oszlop, a másik a gépek oszlopa.)
Üdv.
-
Fferi50
őstag
válasz #75654912 #27939 üzenetére
Szia!
Az ilyen szerkezetű táblában az INDEX HOL.VAN függvény páros a "nyerő":
=INDEX($G$13:$I$16;HOL.VAN($B5;$G$13:$G$16;0);HOL.VAN($C5&"*";$G$13:$I$13;0))A SZUMHATÖBB akkor működik, ha a termék és a gép egymás melletti oszlopokban van és mellé van írva a norma, ahogyan az első mintában a lenti táblában volt.
Üdv.
-
Fferi50
őstag
válasz Mittu88 #27959 üzenetére
Szia!
Valóban abban a sorban van egy hiba:
Vagy Range(Range("A1"),Cells(i,12)), vagy Range(Cells(1,1),Cells(i,12))Másrészt viszont nem értem a két ciklust. Szerintem ezzel csak a legutolsó cellát fogod tudni átmásolni.
Még nézem a makródat, mert más gondot is látok benne.
Üdv.
[ Szerkesztve ]
-
Fferi50
őstag
válasz Mittu88 #27961 üzenetére
Szia!
Kicsit nézegettem még a makródat. Ha jól gondolom, az a feladat, hogy a Workbooks(1).Worksheets(1) munkalapjának az adatait szeretnéd a Workbooks(2).Worksheets(2) munkalapjának végére átmásolni.
Az utolsó teleírt sort így találhatod meg egyszerűen, nem kell hozzá ciklus:
usor=Cells(rows.count,1).End(xlUp).RowTartomány kijelölés többféle módon lehet: Pl:
Range("A" & i) => az A oszlop i-edik cellája
Range("A1" & ":L" & i) =>az A1:Li terület.
Cells(i,j) => az j oszlop i-edik sora (i és j szám)
és még számtalan változata van.A makródat még kicsit szabom.
Üdv.
[ Szerkesztve ]
-
Fferi50
őstag
válasz Mittu88 #27961 üzenetére
Szia!
Az alábbi makró elvileg átmásolja, amit szeretnél.
Sub masolo()
Dim ws1 As Worksheet, wb1 As Workbook, usor1 As Integer, usor2 As Integer, fnev As String
fnev = "xxxxxxx"
Set ws1 = Workbooks(1).Worksheets(1) ' ahonnan másolunk
usor1 = ws1.Cells(Rows.Count, 1).End(xlUp).Row 'az A oszlop utolsó nem üres cellájának a sora
Set wb1 = Workbooks(2).Open(Filename:=fnev) 'megnyitjuk a másik fájlt
usor2 = wb1.Worksheets(2).Cells(Rows.Count, 1).End(xlUp).Row + 1 ' megkeressük a worksheets(2) A oszlopának első üres cellájának sorát
ws1.Range("A1:L" & usor1).Copy Destination:=wb1.Worksheets(2).Cells(usor2, 1) ' a worksheets(1) megfelelő tartományát átmásoljuk a worksheets(2) A oszlopának végére
Workbooks(2).Save
Workbooks(2).Close
End SubÜdv.
[ Szerkesztve ]
-
Fferi50
őstag
válasz enginev3.0 #27992 üzenetére
Szia!
Szerintem úgy, hogy kijelölöd a táblát, másolás, majd ugyanide (azaz nem változtatva a kijelölést) irányított beillesztés - értéket. Utána Esc, hogy megszűnjön a másolás mód.
Üdv.
-
Fferi50
őstag
válasz attilalr2 #28000 üzenetére
Szia!
Próbáld ki ezt a makrót:
Sub cserelo(ByRef rng As Range, ByVal mit As String, ByVal mire As String)
Dim cl As Range, xx As Integer
If Len(mit) <> Len(mire) Then MsgBox "Nem egyforma a két szöveg!", vbInformation: Exit Sub
For Each cl In rng.Cells
If Not IsEmpty(cl) Then
For xx = 1 To Len(mit)
cl.Value = Replace(cl.Value, Mid(mit, xx, 1), Mid(mire, xx, 1))
Next
End If
Next
End SubA VBA nézet immediate ablakából indíthatod, pl. így:
cserelo Sheets("Munka1").Range("A1:C72"),"áéó","aeo" a végén enter.Tehát az első paraméter a tartomány címe (vba-szerint beírva), a második a cserélendő betűk, a harmadik pedig amire cserélni kell. A második és a harmadik paramétert "szinkronban" kell tartani, mert az azonos pozícióban levő betűket cseréli (tehát első betűt az elsőre, második betűt a másodikra és így tovább).
Üdv.
[ Szerkesztve ]
-
Fferi50
őstag
válasz csongi #28010 üzenetére
Szia!
Üres sorok elrejtésére szerintem megfelel az adatok - szűrés menüpont, ott kiválasztod a nem üres lehetőséget valamelyik oszlopban és máris elrejti az üres sorokat.
A fájlt mentheted úgy, hogy csak jelszóval lehessen megnyitni "felülmentésre". A mentés máskéntnél van olyan lehetőség, hogy eszközök - beállítások - jelszó betekintéshez - jelszó módosításhoz.
Ha a módosításhoz adsz jelszót, akkor a jelszó nélkül csak olvasásra lehet megnyitni a munkafüzetet, ezért nem lehet felülírni - csak másként menteni. Ha ott nem adsz meg jelszót, akkor a továbbiakban nem fog kérni.
Üdv.
-
Fferi50
őstag
válasz alfa20 #28019 üzenetére
Szia!
Egy kis probléma: az ecell és ucell változókat Range típusú objektum változónak kell definiálnod.
dim ecell as Range, ucell as Range
set ecell=Sheets("Munka3").Range("A1")
set ucell=Sheets("Munka3").Range("E1664")
sourcedata:=Range(ecell,ucell).addressAz objektum változóknak set változónév= valami formában kell értéket adni.
Az ecell=Range("A1") értékadásban az A1 cella értékét kapja az ecell változó (vagy hibát kapsz, ha nem variant típusú).
Üdv.
[ Szerkesztve ]
Új hozzászólás Aktív témák
Állásajánlatok
Cég: Ozeki Kft.
Város: Debrecen
Cég: Promenade Publishing House Kft.
Város: Budapest