Keresés

Részletes keresés

tbando Creative Commons License 2013.11.16 0 0 23032

Szerintem túlbonyolitod.

 

A te gyűjtőtáblázatodat így csinálnám:

 

A: hívó szám

B: hivott szám

C: költség

D: Ha a hivott szám (B) céges akkor 1, ha nem akkor 2.

 

A D  kitöltéséhez ez a képlet is jó lehet:

 

=ha(hahiba(fkeres(hivottszám;cégesszámok listája;1;0);0)=0;2;1)

 

Az így kapott táblázat aztán pivottal könnyedén elemezhető. 

Előzmény: Maryenm (23025)
tbando Creative Commons License 2013.11.16 0 0 23031

Szia!

 

Számomra a felrakott képből nem derúl ki, hogy mit akarsz.

 

1. Ott van az A-oszlop, semmi kapcsolata a többivel.

2. Az E oszlop forrása rejtély.   Ha feltételezem, hogy az A-oszlopbeli ID-khez kapcsolódnak, akkor a B-oszlopnak is ki kéne lennie töltve az ID-khez tartozó terméknevekkel. Ha így lenne, akkor egy pótlólagos oszlop beszúrásáva az E-oszlop FKERES-sel lenne kitölthető.

3. A H az E-oszlop Darabteli-s értékelésének tűnik. Ha így van, problémamentes.

Előzmény: djmorphy (23023)
Fferi50 Creative Commons License 2013.11.16 0 0 23030

Szia!

 

Amit én tennék:

Egy munkafüzetben lenne:

1.A magán/céges telefonszámlista (legyen   a neve tlista). 

Szerkezete:

A oszlop: telefonszám

B oszlop: "magán" vagy   "céges"

C oszlop: eszköz (céges telefonszám,   ahonnan hívják) de ez szerintem felesleges, mert céges számot általában   többen is hívnak és magán számot is hívhatnak többen is (tehát több oszlop is   kellene, vagy ebben az oszlopban több szám). Viszont az adott havi híváslistából   egyértelműen kiderül, hogy éppen ki(k) hívták a számot.

 

2.Lenne egy listám az eszközök (céges   telefon) használójáról (ez biztosan meg is van), hogy személyhez tudjam kötni   (legyen a neve nlista). 

Szerkezete: A oszlop eszköz (céges szám)

B oszlop használó neve

 

3.A híváslistát bemásolnám ide (legyen a   neve hlista).

 

A folyamat:

 

A híváslistát kiegészíted a következővel:

D1 cellába beírhatod: magán/céges 

D2 cellába képlet   "=ha(hibás(fkeres(A2;tlista!A:A;1;0));"Új   szám";fkeres(A2;tlista!A:B;2;0))"

Ezt a képletet lehúzod az utolsó sorig.

Ez megkeresi azokat a számokat a híváslistában, amelyek még nincsenek benne a tlistában. Amelyek benne vannak, oda pedig beírja, hogy magán vagy céges a szám.

A munkalapra autoszűrő, D oszlopban kiválasztod az "Új szám" -ot, a B oszlopban levő számokat kijelölöd, copy, majd a tlista A oszlopának végére bemásolod.

A tlista új számainak B oszlopába beírod, hogy magán, vagy céges.

Ha ezzel megvagy, visszamész a hlista munkalapra és kikapcsolod az autoszűrőt. El kell tűnnie az "Új szám"-oknak és helyettük a magán/céges megjelölés látszik.

D oszlopot kijelölöd. Copy majd irányított beillesztés ugyanide! értéket, utána ESC. Ezzel eltüntettük a képletet.

Most már minden telefonszámhoz megvan, hogy magán vagy céges.

A hlista sorbarendezése: fejléc van.

A oszlop emelkedő majd D oszlop emelkedő.

Ezután adatok részösszeg:

csoportosítási alap: A oszlop illetve a fejléce

összesítő függvény: Összeg

összesítendő oszlop: C Hívásdíj

összegek az adatok alatt

 

Ezzel megkapod minden eszközhöz a céges és a magán hívások díját. 

 

Próbáld ki, eddig sikerül-e eljutni. Utána lehet még egy kicsit tovább javítani a megoldáson.

 

Üdv.

Előzmény: Maryenm (23029)
Maryenm Creative Commons License 2013.11.16 0 0 23029

Nem ismerem a makrót, de ha elmagyarázod nekem úgy is jó :-)

 

Bevallom őszintén minden segítségért háls vagyok!

Előzmény: Fferi50 (23028)
Fferi50 Creative Commons License 2013.11.16 0 0 23028

Szia!

 

Ok, értem a "feladatot". Mit szeretnél, makrót vagy csak olyan képleteket, amelyek megkönnyítik a végrehajtást?

 

Üdv.

Előzmény: Maryenm (23027)
Maryenm Creative Commons License 2013.11.16 0 0 23027

Szia!

 

Igen, jól érted. Az eszköz a céges telefonszám és erről lehet céges vagy magánhívást is kezdeményezni. Minden hónapban vannak új számok is de amiket már leadtak nem kérdem meg újra.

 

Két dolgot gyűjtik de külön táblában.

 

Van egy táblázat amiben gyűjtöm a kollégák által megadott céges és magánszámokat. Ezt minden hónapban frissítem.

 

Utána pedig az adott havi listából kigyűjtöm mi a céges és mi a magán hívás. Illetve mennyi a magánhívás összege.

Üdv:

 

Előzmény: Fferi50 (23026)
Fferi50 Creative Commons License 2013.11.16 0 0 23026

Szia!

 

Akkor, ha jól értelmezem, a probléma a következő:

 

A hívás listából kellene megállapítani a b oszlop - azaz a hívott szám - alapján, hogy a hívás magán vagy céges volt-e.

Mivel azt mondod, hogy az eszköz(ami a céges telefon számának felel meg), nyilván hívhat magán és céges számokat is, a telefon használójának kell megmondania, hogy melyik hívott szám milyen célú. Gondolom, ezeket folyamatosan "bemondják" a munkatársak, ha új szám keletkezik.

 

Még azt nem értem, hogy a Te táblázatodban akkor mit és hogyan gyűjtesz:

A céges telefonhoz (eszközhöz) tartozó konkrét telefonszámokat, vagy a magán és céges hívások díját?

 

Ezeket legalább ismerni kellene ahhoz, hogy értelmes megoldást tudjunk adni.

 

Üdv. 

Előzmény: Maryenm (23025)
Maryenm Creative Commons License 2013.11.16 0 0 23025

Szia!

 

Köszönöm szépen a válaszod. A probléma abból adódik, hogy lehet, hogy ami nálam céges szám, az a kollégámnál magán. Így szükséges, hogy az eszközt (céges számot) is figyelembe vegye.

 

A hívás lista tábla:

 

a oszlop: eszköz (céges szám)

 

b oszlop: hívott szám

 

c oszlop: hívás díja

 

Az én táblázatom, amiben a számokat gyűjtöm:

 

a oszlop: eszköz (céges szám)

 

b oszlop: magán hívás

 

c oszlop: céges hívás

 

A saját táblázatom úgy módosítom, ahogy szükséges. Illetve a híváslista táblát is tudom másolgatni, szerkezgetni.

 

Eddig ezt úgy oldottam meg, hogy a híváslistára rászűrtem céges számonként. Lementettem egy új excel-ben. FKERESSEL  a hozzá tartozó általam kígyűjtött táblázatomból megkerestem a céges számokat és a másik oszlopból a magán számokat. Viszont ez nagyon időigényes, mert sok a céges szám. Így segítséget kértem, hátha lehetne egy képlettel könnyebben megoldani és utána csak rá kelljen szűrni.

Mindenkinek köszönöm a segítséget előre is!

 

Üdv:

 

Maryen

 

 

 

 

Előzmény: Fferi50 (22991)
Maryenm Creative Commons License 2013.11.16 0 0 23024

Szia! XLS-ben kapom.

Előzmény: Sánta Kutya (SK) (22990)
djmorphy Creative Commons License 2013.11.16 0 0 23023

Szia!


Bocsánat, hogy ilyen későn válaszolok. Ilyet szeretnék megvalósítani:

https://picasaweb.google.com/lh/photo/Xpp7wEU_2Oi8w0qSYkLkuMXNc_m4uWcm5_aG3wZVcfM?feat=directlink

Előzmény: tbando (22848)
tbando Creative Commons License 2013.11.16 0 0 23022

Lenne megint egy eszement kérdésem: Azt hogy csinálja az excel, hogy az =INDEX($A$4:$A$10;0;0) képlet bizonyos cellákban nem #ÉRTÉK hibát eredményez? Az indexelt tartomány sávjában levő cellákban ugyanis a vele azonos sorban levő értéket adja vissza. 

 

tbando Creative Commons License 2013.11.15 0 0 23021

Hát nem csoda, hogy nem bukkantam rá :))).

 

De most hogy idemásoltad, asszem sokat javul a kereséstechnikám. Kösz. 

Előzmény: Fferi50 (23020)
Fferi50 Creative Commons License 2013.11.15 0 0 23020

Szia!

 

VBA Help:

Using Data Types Efficiently

Dim X As Integer

This statement declares that a variableXis an integer — a whole number between –32,768 and 32,767. If you try to setXto a number outside that range, an error occurs. If you try to set X to a fraction, the number is rounded. For example:

 

X = 32768 ' Causes error. X = 5.9 ' Sets x to 6.

 

Hát elég jól el van dugva, nem mondom.

 

 

Üdv.

 

 

Előzmény: tbando (23019)
tbando Creative Commons License 2013.11.15 0 0 23019

Kösz!

 

Nem tudtam róla. Sehol sem láttam az eltérő kerekítésre történő utalást, így aztán igencsak meglepődtem amikor hülye eredményt kaptam. Eltartott egy darabig, amíg rájöttem az okára....    

Előzmény: Fferi50 (23017)
pimre Creative Commons License 2013.11.15 0 0 23018

Ez a két sor jó, ezt eddig nem ismertem, és nem használtam. 

 

usor = Range("A" & Rows.Count).End(xlUp).Row
uoszlop = Cells(1, Columns.Count).End(xlToLeft).Column

 

Eddig jobb híján ciklusban szaladtam végig a Cells.SpecialCells(xlLastCell).Row/Column után hátulról tesztelve a cellák üres voltát. Ez különösen akkor érdekes, ha sorokat/oszlopokat töröltem a táblázat végén.

 

 

Előzmény: Delila10 (23014)
Fferi50 Creative Commons License 2013.11.15 0 0 23017

Szia!

 

A válasz az integer és a double közötti tulajdonság különbség. Az integer - és a long - a törteket a kerekítés szabályai szerint  kerekíti, azaz neki az 5,51 már 6.

Próbáld ki:  k%=5.51  : debug.print k% => 6

                  k%=5.31 : debug.print k% => 5

Ezzel szemben a double és a variant lebegőpontos és nem kerekít, neki tehát az 5 után következő 6 már nagyobb, mint az 5.51.

 

Üdv.

 

Előzmény: tbando (23015)
Fferi50 Creative Commons License 2013.11.15 0 0 23016

Szia!

 

Az xlLastCell eredménye nem hamis, hiszen a formázás is a használatba vétel egyik formája - hiszen az xlLastCell a munkalap használt tartományának utolsó celláját adja meg - csak az eredmény nem a mi elképzelésünknek felel meg...., mi nem ezt akartuk megtudni, de az Excel ezt tudja nyújtani.

 

Ezért én nem is használom ezt a paramétert.

 

Akkor már inkább a specialcells xlcelltypeblanks (vagy xlblanks) paraméterét érdemes használni. Ez megmutatja, hogy hány üres cella van és azok hány területen helyezkednek el, a címét is megmondja területenként.

 

debug.print columns("F").specialcells(xlblanks).cells.address

eredmény:
$F$4,$F$6:$F$7,$F$9:$F$13

 

Ebből már ki lehet kalkulálni az utolsó foglalt cella címét is.

 

De az utolsó  nem üres cellát az end.(xlup) és end.(xltoleft) adja meg az adott oszlopban/sorban - a nem összefüggő táblázatok/adatok esetében is.

 

Üdv.

Előzmény: Delila10 (23014)
tbando Creative Commons License 2013.11.15 0 0 23015

Szerintetek mi a logikája annak, hogy az alábbi makróban a k-változót integernek vagy  longnak definiálva 6x fut le a ciklus (azaz kerekít), míg double vagy variant k-k esetében 5x (azaz csonkol)? 

 

Sub ciklusszam()
Dim k
Range("o1:o10").Clear
For k = 1 To 5.51
Cells(k, 15) = k
Next k
End Sub

Delila10 Creative Commons License 2013.11.15 0 0 23014

Amit meg én vettem csak most észre, hogy az

 

    usor = Cells.SpecialCells(xlLastCell).Row
    uoszlop = Cells.SpecialCells(xlLastCell).Column

sorok hamis eredményt adhatnak, ha az adatokon kívüli celláknak valamilyen formát adtam.

 

Sub mm()
    Dim usor As Long, uoszlop As Long
    usor = Cells.SpecialCells(xlLastCell).Row
    uoszlop = Cells.SpecialCells(xlLastCell).Column
    MsgBox usor & Chr(10) & uoszlop
End Sub

A formázott terület utolsó sorát-, és oszlopát adja ereményül (szegélyezés nagyobb területen, mint az adatok).

 

Összefüggő táblázatnál érdemesebb például az

    usor = Range("A" & Rows.Count).End(xlUp).Row
    uoszlop = Cells(1, Columns.Count).End(xlToLeft).Column
formát használni.

Előzmény: pimre (23011)
Delila10 Creative Commons License 2013.11.15 0 0 23013

Az érdem Fferié, ő csalta elő az agytekervényei közül a left-es képletet.

Előzmény: pimre (23011)
Fferi50 Creative Commons License 2013.11.15 0 0 23012

Szia!

 

Akkor még néhány lehetőség:

 

Ha új adatot kell beírnod, akkor sem kell a képleten módosítani: az utolsó adatokat tartalmazó 3 oszlop elé szúrj be 3 oszlopot. Ekkor az összegző oszlopok képletei automatikusan alkalmazkodnak! (Ha az összegző oszlopok elé szúrod be, akkor nem!) Ha fontos az adatok sorrendje, akkor az "eltolt" 3 oszlop adatát másold be a beszúrt oszlopba és a helyére kerüljenek az új adatok.

 

Szerintem még szebb, ha az összegző oszlopokat közvetlenül a név oszlop után teszed (azaz az adatok elé). Ennek az az előnye, hogy az összegzőképletet kiterjesztheted az ezután beírandó (még meg sem lévő) adatokra a beíráskor (akár a munkafüzet utolsó oszlopáig!). Az új adatokat egyszerűen csak be kell írni a meglevőek mögé és máris kész az új összegzés.

 

Az összegzést megcsinálhatod egy új munkalapra is, hogy csak azt lássák mások. Ekkor az összegző képletbe fel kell venni az adatokat tartalmazó munkalap nevét: (az adatok az Adat nevű munkalapon vannak)

formula="=SUMIF(Adat!$C$1:$N$1,left(Adat!C$1,7) &""*"",Adat!$C3:$N3)"

Ezután az Adat nevű munkalapot akár el is rejtheted.

 

Üdv.

 

Előzmény: pimre (23011)
pimre Creative Commons License 2013.11.15 0 0 23011

És csak most veszem észre a végső trükköt, ahogy veszem át soronként a programot a sajátomba.

 

Így még azzal sem kell bíbelődni, hogy a rövidített neveket /left(C1,7)/ bemásolgassam az összegző oszlopok fejlécébe. Egyszerűen a képlet tartalmazza a rövidítést. És így még a képletek értékké való átalakításával sem kell foglalkozni. Nagyon jó!!!

Előzmény: Delila10 (23007)
pimre Creative Commons License 2013.11.15 0 0 23010

Igen, ez a végső forma. Így igazán elegáns az egész. Mindkettőtöknek köszönöm.

Előzmény: Delila10 (23007)
pimre Creative Commons License 2013.11.15 0 0 23009

„Bár ez a R1C& ""*"" szintaxis nekem új, de majd megpróbálom megérteni.”

 

Ezzel kicsit pontatlanul fogalmaztam. Azt értettem, hogy a * itt egy wildcard karakter, csak nem igazán értettem az alkalmazásának módját, illetve a szintaxisát.

 

A megoldásod "=SUMIF($C$1:$N$1,left(C$1,7) &""*"",$C3:$N3)"

(a fejléc hiányában persze $C3:$N3 helyett persze $C2:$N2-t alkalmazva) tökéletesen működik. Köszönöm.

Előzmény: Fferi50 (23005)
pimre Creative Commons License 2013.11.15 0 0 23008

Igazad van, ugyanakkor a ws.cells() formát január óta használom következetesen, amikor kiderült, hogy az Excel 2007-es verziója (vagy a 2003-asra konvertáló funkció) nem kompatibilis a 2003-assal. Ezt megírtam a http://forum.index.hu/Article/viewArticle?a=123557575&t=9009340 hozzászólásban, amire – az azóta a fórumról sajnálatosan eltűnt és törölt – robbantómester adta meg a kulcsot. A gondot az okozta, hogy hiába választottam ki worksheets(2).select paranccsal egy másik munkalapot, a cells() parancs munkalapnév nélkül csak a 2003 alatt működött jól, 2007 alatt a munkalapváltást figyelmen kívül hagyta. Aztán kicsit később Retro Image (http://forum.index.hu/Article/viewArticle?a=123577102&t=9009340) magyarázta el, hogy miért célszerű egzakt hivatkozásokat használni. Ráadásul most veszem észre, hogy az általa javasolt Application qualifier használatáról időközben meg is felejtkeztem.

Előzmény: Delila10 (23004)
Delila10 Creative Commons License 2013.11.15 0 0 23007

Igazad van a "=SUMIF($C$1:$N$1,left(C$1,7) &""*"",$C3:$N3)" képlettel. Ennek a segítségével a 3 oszlop képleteit 1 lépésben beírhatjuk. Nincs szükség sor beszúrására, és törlésére, képletek helyett értékek beillesztésére.

 

A makró tömörebben:

 

Sub sumifteszt()
    Dim utolsósor As Long, utolsóoszl As Integer
    
    Application.DisplayAlerts = False
    If Worksheets.Count = 2 Then Sheets(2).Delete
    Application.DisplayAlerts = True
    
    Sheets("3500").Copy After:=Sheets(1)
    utolsósor = Cells.SpecialCells(xlLastCell).Row
    utolsóoszl = Cells.SpecialCells(xlLastCell).Column
    
    If utolsóoszl <> 14 Then
        MsgBox "Utolsó oszlop nem N! Ellenőrizd!", vbOKOnly + vbExclamation
        Exit Sub
    End If
    
    Cells(1, utolsóoszl + 1) = "Összesített tranzakció"
    Cells(1, utolsóoszl + 2) = "Összesített mennyiség"
    Cells(1, utolsóoszl + 3) = "Összesített érték"
    
    Range("O2:Q" & utolsósor) = "=SUMIF($C$1:$N$1,left(C$1,7) &""*"",$C2:$N2)"
End Sub

Előzmény: Fferi50 (23005)
Fferi50 Creative Commons License 2013.11.15 0 0 23006

Szia!

 

Az hasznos szerintem, hogy a munkalapra is hivatkozik, mivel nem feltétlenül marad mindig az adott munkalap aktív (jó, ebben az esetben nem változik az aktív lap). Így legalább biztosan nem téved el a képlet.

 

Üdv.

Előzmény: Delila10 (23004)
Fferi50 Creative Commons License 2013.11.15 0 0 23005

Szia!

 

 Bár ez a R1C& ""*"" szintaxis nekem új, de majd megpróbálom megérteni.

 

A szöveg keresésben vannak speciális karakterek (ezt biztosan ismered), a csillag, a kérdőjel.Ezt lehet használni a szumha függvényben, meg más számolós,hasonlítós függvényben is.  A fenti formulában azt jelenti, hogy minden olyan számot összegez, ahol az oszlop első cellájában levő érték kezdő karakterei (esetünkben 7 db karakter) megegyezik a megadott karakterekkel. Tehát pl. "Tranzak*"  eredménye minden Tranzak-kal kezdődő oszlop összesítése, akármivel is folytatódik.

 

szöveg(j)  itt az zavart meg, hogy a munkalapfüggvények között is van ilyen nevű függvény - az álmoskönyvek szerint nem szerencsés a rendszer neveit bekeverni a saját neveink közé.

 

chr(34) ahogy már írtam, korrekt a chr(34) használata, ha idézőjelet akarsz a szövegben megjeleníteni - de akkor csak egy kell belőle. A formula képleteknél gyakran előfordul, hogy idézőjel kell a szövegbe, itt az idézőjel megduplázása az elegánsabb megoldás (lásd az első felvetésed és Delila képlete).

 

Delila képlete: "=SUMIF($C$1:$N$1," & Chr(34) & "Tranzak" & Chr(34) & ",$C3:$N3)"

 

E helyett:" & Chr(34) & "Tranzak" & Chr(34) & " figyelem, az idézőjelek sem kellenek!

kerülhet be: left(C$1,7) & ""*"" 

Tehát így néz ki:"=SUMIF($C$1:$N$1,left(C$1,7) &""*"",$C3:$N3)"

 

Üdv.

 

Előzmény: pimre (23002)
Delila10 Creative Commons License 2013.11.15 0 0 23004

Részemről szívesen.

 

Nem tudom, felfigyeltél-e rá, hogy az új lapnak nem adtam nevet, és a Set ws= ... sort sem használtam, a továbbiakban a hivatkozások sem kezdődtek ws. -tal. Mikor a másolatot elkészíted az első lapról, hivatalból a másolt lap lesz aktív, ezért nincs szükség laphivatkozásokra.

Előzmény: pimre (23001)
pimre Creative Commons License 2013.11.15 0 0 23003

És még egy kérdést engedj meg a játék kedvéért:

 

A Delila által írt képletet ("=SUMIF($C$1:$N$1," & Chr(34) & "Tranzak" & Chr(34) & ",$C3:$N3)") is át lehetne úgy alakítani, hogy ne kelljen új fejlécsort beszúrni? Hogy a "Tranzak" helyén valami hasonló automatizmus működjön? Próbálgattam, de azzal nekem nem jött össze.

 

Előzmény: pimre (23002)

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