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.
A VKERES függvény használata azokban az esetekben lehet hasznos, amikor az összehasonlítandó értékek a tömb felső sorában helyezkednek el és egy adott sorban lévő értéket szeretnénk megtudni. Az FKERES függvényt ezzel szemben akkor érdemes használni, amikor az összehasonlítandó értékek a tömb jobb vagy bal oldalán levő oszlopban helyezkednek el és egy adott oszlopbeli értéket szeretnénk megtudni.
Két file-t szeretnék összekötni és az egyikből áttenni egy oszlopot az azonosító szerint. jó, megvan ez a vkeres, de nem tudom mit kezdjek vele.
Tehat van 2 db excel fileom:
1file: 200610-TAFFDVCAOctobre
2file: TAF Etats stats développement par famille octobre 2006
A 2file 237-ik oszlopában (IC) van olyan információ, amit én szeretnék átmásolni az 1file 11. oszlopába (K)...minden egyes sorszámnál szeretném ezt az infót bevinni. Első oszlop mindkét file-nál azonosító sorbatéve...
Amiket be kell írni a vkeresnél:
keresési_érték: (amit keresek?...tehat ráklikkelek a 2file. 237. oszlopának az első cellájára?, vagy csak beírom, hogy 237?)
Tábla: (oké itt kijelölöm azt a táblát, amiből szeretném az értéket áttenni, tehát 2file)
Sor_szám: (ráklikkelek az első oszlop első cellájára?)
Hamis, ok
Amivel eddig kísérleteztem az ez volt:
=VKERES(A2;'[TAF Etats stats développement par famille octobre 2006.xls]Etats stats développement CA'!$1:$1630;237;HAMIS)
És semmi sem működik, mert biztos az egészet szarul csinálom. Bocs, hogy ilyen értetlen vagyok, de nem tudok kitől segítséget kérni.
Nagyon kérlek magyarázzátok ezt el nekem!!! De, mint az ovodásnak, hogy garantáltan megértesem!!
Function Atlagolo(Szam As Long, ByVal Tart As Range, ByVal Tartb As Range, Lap1 As Integer, Lapveg As Integer) As Variant Dim t As Long Dim k As Long Dim Hol() As Byte Dim Sor1 As Long Dim Sorveg As Long Dim Col1 As Integer Dim Col1b As Integer Dim Colvegb As Integer Dim m As Integer Dim Osszeg As Variant Dim S1 As Object Dim S2 As Object On Error GoTo Hiba Application.Volatile ' (True) Set S1 = Tart Set S2 = Tartb Atlagolo = 0 Osszeg = 0
Sor1 = S1.Cells(1, 1).Row Sorveg = Sor1 + S1.Rows.Count - 1 Col1 = S1.Cells(1, 1).Column Col1b = S2.Cells(1, 1).Column Colvegb = Col1b + S2.Columns.Count - 1 ReDim Hol(Sor1 To Sorveg) For n = Lap1 To Lapveg For t = Sor1 To Sorveg If WorksheetFunction.IsNumber(Worksheets(n).Cells(t, Col1).Value) Then If Szam = Val(Worksheets(n).Cells(t, Col1)) Then Hol(t) = 1 End If Next t Next n For n = Lap1 To Lapveg For t = Sor1 To Sorveg If Hol(t) = 1 Then For k = Col1b To Colvegb If WorksheetFunction.IsNumber(Worksheets(n).Cells(t, k).Value) Then If Worksheets(n).Cells(t, k).Value <> 0 Then m = m + 1 Osszeg = Osszeg + Val(Worksheets(n).Cells(t, k).Value) End If End If Next k End If Next t Next n If m > 0 Then Atlagolo = Osszeg / m Set S1 = Nothing Set S2 = Nothing Exit Function Hiba: End Function
Function Osszegzo(Szam As Long, ByVal Tart As Range, ByVal Tartb As Range, Lap1 As Integer, Lapveg As Integer) As Variant Dim t As Long Dim k As Long Dim Hol() As Byte Dim Sor1 As Long Dim Sorveg As Long Dim Col1 As Integer Dim Col1b As Integer Dim Colvegb As Integer Dim Osszeg As Variant Dim S1 As Object Dim S2 As Object On Error GoTo Hiba Application.Volatile Set S1 = Tart Set S2 = Tartb Osszegzo = 0 Osszeg = 0 Sor1 = S1.Cells(1, 1).Row Sorveg = Sor1 + S1.Rows.Count - 1 Col1 = S1.Cells(1, 1).Column Col1b = S2.Cells(1, 1).Column Colvegb = Col1b + S2.Columns.Count - 1 ReDim Hol(Sor1 To Sorveg) For n = Lap1 To Lapveg For t = Sor1 To Sorveg If WorksheetFunction.IsNumber(Worksheets(n).Cells(t, Col1).Value) Then If Szam = Val(Worksheets(n).Cells(t, Col1)) Then Hol(t) = 1 End If Next t Next n For n = Lap1 To Lapveg For t = Sor1 To Sorveg If Hol(t) = 1 Then For k = Col1b To Colvegb If WorksheetFunction.IsNumber(Worksheets(n).Cells(t, k).Value) Then If WorksheetFunction.IsNumber(Worksheets(n).Cells(t, Col1).Value) Then If Szam = Val(Worksheets(n).Cells(t, Col1)) Then Osszeg = Osszeg + Val(Worksheets(n).Cells(t, k).Value) End If End If Next k End If Next t Next n Osszegzo = Osszeg Set S1 = Nothing Set S2 = Nothing Exit Function Hiba: End Function
Nagyon jól működik és sikerült is használnom, köszönöm!
Az lenne a kérdésem, hogy át tudná-e írni úgy, hogy ne összeadjon, hanem átlagot számoljon?
Még csak annyival egészíteném ki, hogy a bővített funkcióval a végeredmény: 1) A oszlop (nincs jelentősége) B (azonosító) C-D-E; F-G-H; stb. 2) A oszlop (nincs jelentősége) B (azonosító) C-D-E-F; G-H-I-J; stb.
(Ja, és a dátumot is elnéztem, 2005 májusa óta segíti a munkámat az alábbi makró :)
Adott egy négy oszlopos táblázat, ahol a B oszlop az azonosító. (Az A oszlopnak itt nincs jelentősége.) C és D oszlop az azonosítóhoz tartozó dátumokat jelöli. Egy azonosítóhoz több soron keresztül is tartozhat dátum (hogy hány soron keresztül, az előre nem meghatározható, mert mindig változó érték).
A makró az A oszlopot békén hagyja. B oszlop szerint addig helyezgeti át a dátumokat egymás alól egymás mellé, míg a B oszlop egymás alatt két ugyanolyan értéket mutat. Tehát a végeredmény: egy sorban egy azonosító (B oszlop) és mellette az összes hozzá tartozó dátum (C-D; E-F; stb. oszlop).
Most ezt a funkciót szeretném kibővíteni úgy, hogy ne csak C és D oszlopot másolja egymás mellé, hanem 1) E, illetve 2) E-F oszlopot is.
Előkerestem a régi hozzászólásomat is (hogy repül az idő :) Itt még csak a C oszlopot másolta, utána kértem a bővítést a C és D oszlopra, ez látszik a 4911-es hozzászólásom makrójában.
A delete makró kitörli az üres sorokat a másolások után.
Sub Delete() Dim n, i As Integer Application.ScreenUpdating = False 'kitörli azokat a sorokat, amelyeknek a C oszlophoz tartozó cellájában nincs adat i = Selection.SpecialCells(xlCellTypeLastCell).Row For n = i To 1 Step -1 If Cells(n, 3) = "" Then Rows(n).EntireRow.Delete End If Next n Application.ScreenUpdating = True End Sub
A makróból, amit bemásoltál a 4911-be, hiányzik a Delete eljárás, jó lenne azt is feltenni, mert így nem lehet kipróbálni, másrészt a feladat megfogalmazása sem teljesen világos.
Azóta újból próbálkoztam a makró átírásával. A Cells melletti számokat próbáltam javítani az oszlopoknak megfelelően. Sajnos az összes próbálkozásom compile error-al végződött.
Ha volna valaki, aki a tudásával kisegítene, annak nagyon örülnék...
Szeretnék kiegészíteni egy táblázatot egy másik excel file-ból (összekötni), csak nem tudom mi a franc a magyar megfelelője a parancsnak...francia excelt használtam eddig és ott úgy hívták recherchev.
tudjátok esetleg? és ugye van itt valaki, please :-)!!!!
(A cél az volt, hogy az aktív cella értékét kiválassza az autoszűrő)
csak hangosan gondolkodva, lehetséges, hogy a Field után kizárólag számot lehet megadni? Próbáltam változóval, de azt sem engedi) Ámbár ha a kritikus ActiveCell.Comumn fölé viszem a kurzort soronkénti futtatásnál, ki is írja az értékét...