Az „Excel” fórum célja, hogy keretet adjon az Excel felhasználók széles táborának tapasztalataik megosztására, és lehetőséget a segítséget kérőknek. Az alábbi összefoglaló azért készült, hogy segítse a helyes kérdésfeltevést.
– Írd le szabatosan a problémát. Úgy fogalmazz, hogy ne csak te magad, de a szakértő is megértse, mire szeretnél választ kapni.
– Írd le, hogy milyen verziójú Excellel dolgozol. (Vagy ha nem – ill. nem csak – Excel, akkor micsoda?)
– Írd le, hogy milyen úton indultál el, és hol akadtál el rajta.
– A kérdés megértése szempontjából sokat segíthet, ha feltölteszt egy képet, amin látszik, hogy mit szeretnél, vagy illusztrálja azt.
– Még jobb, ha feltöltesz egy minta munkafüzetet valahová (pl. data.hu). Feltöltés előtt távolítsd el belőle a nem publikus adatokat.
– Ha a feladat jellege olyan, célszerű az "előtte" és "utána" állapotokat bemutatni. (Miből kellene csinálni mit?)
– Ha VBA kódon kell javítani, másold be a releváns kódrészt. Rövid kód mehet hozzászólásba, hosszú kód inkább ide: http://pastebin.com/
– Ha valami nem úgy működik, ahogy kellene, add meg a rendellenes viselkedés jellemzőit, a hibaüzenetet, és a hibát okozó programsort.
Az előbbi hozzászólásomban (23147) adtam útmutatást a B oszlop szétbontására.
"
A B oszlop tartalmát az adatok szövegből oszlopok opcióval szétrakhatod a vesszők "mentén" külön oszlopokba. Utána ezeket az oszlopokat egy oszlopba másolod be egymás alá (az üres cellák is maradhatnak). Majd az adatok, ismétlődések eltávolítása opcióval eltünteted az azonosakat.
Vigyázz, mert "lakás" és "lakás " itt sem egyforma!!!"
Csinálj egy specialis szűrést a Csak az egyedi rekordok megjelenítése opcióval Így lesz egy listád az összes tulajdonságról. Amelyben lesznek olyan cellák, amelyek 1 tulajdonságot tartalmaznak, és lesznek olyanok amelyek többet. A többeket átnézed, hogy szerepel-e a bennük levő összes tulajdonság szólóban is. Amelyik tulajdonság nem, azt önállóan hozzáírod a listádhoz. Ha ezzel kész vagy jöhet Darabteli. Ha mondjuk a tul.listád az A oszlopban van akkor B1-be írod a képletet, majd végighúzod:
=Darabteli(Adatoszlop500;"*"&a1&"*")
Tehát a két jokerkaraktert hozzáfűzöd a keresendő tulajdonsághoz.
ps. A darabteli keresése nem case sensitive, tehát mindegy, hogy kisbetüt vagy nagybetüt használsz.
őőő bocsánat ismét :) nagy volt a szám, és nem gondolkoztam időben...
szóval a darabteli végülis mégse teljesen jó az én esetemben.
Megpróbálom megfogalmazni most már pontosan mi a kínom :)
tehát - az 500 sornál a tulajdonságok kb össze-vissza vannak emberenként.
Nekem mindenképpen át kéne néznem az egészet ennek a függvénynek a használatakor, de erre ha nem muszáj nem kerítenék sort, mert 10 ilyen táblázatom van.
kb így néz ki a dolog (csak táblázatonként 50-100 tulajdonsággal is akár)
a ember - kék, zöld, piros
b ember - zöld, fekete, lila
c ember - kék, zöld, lila, piros
stb.
A függvény használatakor át kéne néznem az összes sort, hogy van-e valahol új tulajdonság, és mindegyikre be kellene pötyögnöm a függvényt.
Van arra esetleg mód, hogy automatikusan kiszedi az összes kifejezést ÉS aztán ezekre a kifejezésekre nyomja rá a darabtelit? Picit még bonyolítja a dolgot, hogy a tulajdonságok között van olyan, ami 2-3 szóból áll, ezzel meg végképp nem tudom hogy boldogulna.
pl - d ember - kék, zöld, piros, bugyi lila, fehér
Ezt is meg kellene néznie, az én drága kis excelemnek, és kilistáznia, hogy kék -10 darab, bugyi lila -11 darab.
Vagy azt se bánom, ha úgy listázza ki, hogy
kék -10 darab
kék, zöld - 2 darab
kék, zöld, piros - 1 darab
Ekkor már az egyértelmű hülyeségeket ki tudnám szúrni, és ami nem kell azt tudnám törölni.
Alighenem elkerülte a figyelmedet a * karakter a példa szó elején és végén. Ez azt eredményezi, hogy akárhol van a keresett szó a cellában, mindig megtalálja.
Nagyon szívás tud ám lenni, ha szóközök vagy nem látható karakterek is vannak a cella értékében, amit szabad szemmel észre sem veszel!
Ezért használom én a joker karaktereket.
A B oszlop tartalmát az adatok szövegből oszlopok opcióval szétrakhatod a vesszők "mentén" külön oszlopokba. Utána ezeket az oszlopokat egy oszlopba másolod be egymás alá (az üres cellák is maradhatnak). Majd az adatok, ismétlődések eltávolítása opcióval eltünteted az azonosakat.
Vigyázz, mert "lakás" és "lakás " itt sem egyforma!!!
szóval arra már rájöttem, hogy a darabteli fix, hogy erre nem használható.
Ha rákeresek a lent említett bazaarvoice kifejezésre, akkor azokat a cellákat megszámolja, amiben CSAK ez van benne, viszont azokat már nem, amik így néznek ki "Bazaarvoice, ForeSee"
Tehát, hogy több tulajdonság is meg van adva.
Na most nekem vagy egy olyan függvény kellene, ami "szétbontja" a cellát és megnézi, hogy adott kifejezés a cellán belül ott van-e, vagy pedig egy olyan megoldás, hogy a vessző utáni dolgot új cellába tegye, és akkor már használható lenne a darabteli.
Most már tényleg csendben ülök és várok, hátha van ötlet :)
Na most valami vagy nagyon nem jó, vagy én vagyok hülye
Beírom ezt - =DARABTELI(A1:A500;"bazaarvoice")
Ki is dob rá szépen 252 találatot, nagyjából stimmel a mennyiség
Beírom ezt - =DARABTELI(A1:A500;"Liferay") (kis és nagybetűvel is próbáltam)
Kidob rá 0 találatot, úgy, hogy LÁTOM, hogy ott van közvetlen mellette legalább 3 (meg ki tudja mennyi még az egész doksiban)
Ugyanezt megjátszottam több más kifejezéssel is. A bazaarvoicera bárhol próbálom jó, meg még 2 másikra, de aztán megáll a tudomány. Próbáltam minden variációban beírni.
Az meg gondolom a program "helyes" működése, hogy szótöredékre nem keres - beírom, hogy voice, úgy már semmi eredmény.
Ez azért nem jó, mert nem csak három-négy fajta tulajdonság van, hanem sokkal több. A házas rész csak példa volt. Lehet, hogy az 500 emberhez van 50 fajta tulajdonság is, így meg ugyanott vagyok, ha kereséssel csinálom. Végig kell néznem akkor az összes sort, mert előfordulhat hogy az 500. embernél új tulajdonság van megadva.
Már kiszedtem egy külön munkalapra az összes tulajdonságot.
Gyakorlatilag az kellene, hogy kilistázza nekem hogy miből mennyi van, anélkül, hogy én nézegetném hogy milyen tulajdonságok vannak.
Használd a darabteli függvényt. A keresendő értéknél léteznek a joker karakterek. Pl. "*kertes*" minden olyan cellát beszámol, amelyben a kertes előfordul.
2010-es excelben kellene a következőt megcsinálnom:
Van 500 sorom, amibe fel vannak sorolva értékek.
500 ember, és mindegyikhez van 1-1 tulajdonság, DE van akinél több mint egy van.
Azt kellene csinálni, hogy megszámolni hogy x tulajdonság hány embernél van jelen.
Amiatt nem tudtam rendesen megcsinálni, úgy hogy simán sorbarendezem tulajdonság szerint, hogy ugye 1 emberhez több tulajdonság is tartozik és ez felsorolással van a cellába beírva.
Pontosítok inkább :) szóval van 500 ember, mellette pedig hogy milyen típusú háza van.
A1 Kiss Béla B1 Panel
A2 Nagy Béla B2 kertes
A3 Gazdag Elek B3 Kastély, kertes, nyaraló
stb, stb
Nekem az kellene, hogy kidobja, hogy kertes - 27 darab, nyaraló - 5 darab stb.
a ws.range(ws.cells(...),ws.cells(...)) szintaktika működik, ugyanakkor a ws.range("A:B"), vagy ws.range("A1:B1") stb. forma továbbra sem akar nekem összejönni aktiválás nélkül.
Szeretném a segítségeteket kérni! Munkám során gazdákhoz járok. Ott adatokat kell kitöltenem a gazdáról. Ezeket összesítenem kell egy táblázatba. Na most egy munkalap egy sor az összesítőbe és ez úgy van megoldva hogy van 150 munkafüzet az embereknek és van egy 151. ami az összesítő.
Az összesítőben ez a képlet van: =INDIREKT("Munka" & SOR()-1 & "!B3") ugye a B3 változik mindig. Fogalmam sincs amúgy mit jelent mert ezt a képletet is itt írták nekem! :D
Gond: Nyitottam egy 152. munkafüzetet ahol más jellegű összesítő van a termékek és azok árai, de ugyanúgy kell a gazdák elérhetősége mint az első 151. en találhat össezítőben, de például a 151. összesítőn a névnél lévő első cella képletét =INDIREKT("Munka" & SOR()-1 & "!B3") átmásolom a 152. névhez tartozó első cellába de nem működik. Tudom egyenlőség jellel is éehet de lesznek más cellák is amit így akarok megoldani.
Hogyan lehet ezt megoldani, hogy működjön akár melyik cellával és mindegyik munkalappal? Régen csináltam ezt és már fogalmam sincs mit csináltam :D Ha kell elküldöma táblázatot is :D Köszönöm!
Az értékadásoknak attól függetlenül kell múködniük, hogy az adott munkalap aktív-e vagy sem. A leírt formában viszont valóban akkor működik helyesen, ha az a munkalap, amiről adatot kérsz, vagy amire adatot írsz, éppen aktív (erre sajnos nem gondoltam - sorry-). De ezt az akadályt kis módosítással el lehet hárítani.
Hogy miért van így, arra egy kis magyarázat:
Az excel minden olyan tulajdonságot, amihez nincs külön hivatkozás, az aktív munkalapon levőnek tekint. Azaz pl. az összws.range(cells(1,1),cells(1,utolsóoszlop)) kifejezést csak akkor tudja valóban értelmezni, ha az aktív munkalap az összws, mivel itt két tulajdonság van -range és cells - és két különböző hely lenne mivel a cells adatokat az aktív munkalapról szeretné venni és ez nem "fér össze" az össws-el.
Ennek elhárítása egyszerű: minden tulajdonsághoz oda kell írni a hivatkozását:
Még annyit kiegészítésül, hogy a ws és az összws munkalapok nem ugyanabban a munkafüzetben voltak. Most nem próbálgattam, hogy azonos munkafüzetben hogyan viselkedne a range parancs.
Ahol a ws és az összws munkalapok, amelyeket dim ws as worksheet formában deklaráltam és set ws = Workbooks(akármi).Worksheets(másikakármi) módon adtam meg.
Az első sor működik, ha egyébként a ws munkalap aktív. A második azonban nálam csak akkor működött, ha kiadtam az összws.Activate parancsot.
Tehát tapasztalatom szerint a range használatához az adott munkalapnak aktívnak kell lennie. Jól látom? Erre vonatkozóan nem nagyon találtam leírást, így hosszas próbálgatás után akadtam rá a megoldásra.
Hát igen, ezeket a "trükkös" jellemvonásokat csak a tapasztalat alapján lehet kiszűrni. Még szerencse, hogy ezeken az oldalakon nagyon sok tapasztalat gyűlik össze.
Én az excellel kapcsolatban semmiben sem vagyok biztos :)))).
Ebben az esetben csak annyit tudtam, hogy az ykorrvekt-t a debug a kép szerint listázta. Ami alapján én oszlopvektornak véltem. Pedig mint most a segítségeddel rájöttem, ha így listázza tömböt, akkor az excel sorvektornak értelmezi. Hát most már ezt is tudom.
Kösz az együttmüködést.
A transpose szintaktikát is köszönöm. Ma nálam is müködött. Tegnap ugyanez nem müködött, de akkor feltehetőleg egyéb hibák miatt.
Érdekes ez a LIN.ILL-es megoldás. De nálam nem működik (2007-es). Nem csak a te polinomialis problémádnál, de már az excel súgó mintapéldájánál sem, pedig azt copy-paste-tal vittem be. De csak #ÉRTÉK hibákat ereményezett. A te képletedben a kitevők kapcsos zárójelét hogy kell beírni? Billentyúzéssel? Meg azt sem értem minek kell transzponálni?
Ja és még valami! A felrakott polielo függvényemben maradt egy sajnálatos hiba, ezért a jelenlegi formájában csak a negyedfoku polinomot számolja ki. A javítása elég egyszerű. Az állandó kiszámításánál (9. pont) A For i=1 to 4 helyesen: For i=1 to fok.
Hát bár úgy néz ki, hogy igazad van, de a feltett udf-ben valami speiális probléma lehet Ugyanis a
'bisvekt = Application.WorksheetFunction.MMult(xikorrmtx, ykorrvekt) utasítás S4O1=S4O4*S4O1 szerkezetű aminek müködni kéne, de nem müködik,
míg a bisvekt = Application.WorksheetFunction.MMult(ykorrvekt, xikorrmtx) pedig S4O1=S4O1*S4O4 szerkezet, aminek nem lenne szabad müködnie, és mégis müködik. ????
A matrix is és a vektor is For next-tel lett feltöltve.
***********
Javasoltad a tanspose-t. De nem megy. A vba tömbök transponálásának mi a szintaktikája?
"Csak" annyi a probléma a matrix szorzásnál, hogy a matrix műveleteknél nem mindegy balról vagy jobbról szorzod a mátrixokat!
Hogy ismét az Excel helpet idézzem:
"A tömb1 oszlopai számának egyeznie kell a tömb 2 sorainak számával és mindkét tömb csak számokból állhat."
Az első esetben a 4S*4O mátrix szorozható az 4S*1O mátrixxal (eredmény 4S*1O), de az 4S*1O mátrix nem szorozható a 4S*4O matrixxal.
A második esetben szintén arról van szó,hogy a két egy oszlopból álló mátrix (azaz vektor) nem szorozható direktben össze. A szorzáshoz a második mátrixot transzponálni kell (Transpose függvény!) és akkor kapsz egy egy elemű mátrixot (skalárt) eredményül.