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 függvényben a második és harmadik argumentum egy-egy tartomány, ott szerepelnie kell a munkalap nevének is cellahivatkozásokon kívül, de ezt úgy látom megadtad eddig is, apééldában ez jónak tűnik, gondolom az egérrel kijelölted a megfelelő munkalapon a cellatartományt ilyenkor, csak megjegyeztem , hogy ez nem maradhat ki....
Ezt a megadott példádat viszont nem értem, mert mintha más lett volna az eredeti kérdés a 4775-ben. Eredetileg a pl. 10211, 10200 számokat egy megadott oszlop tartalmazta Pl. A. Itt pedig egy sorban szerepelnek. ?
Ezt próbáld ki, (persze a tartományhivatkozásoknál a munkalap nevét is tartalmazó teljes hivatkozást kell megadni, egérrel a legegyszerűbb kijelölni):
Function Osszegzo(Szam As Long, Tart As Range, Tartb As Range) 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
On Error GoTo Hiba Osszegzo = 0 Sor1 = Tart.Cells(1, 1).Row Sorveg = Sor1 + Tart.Rows.Count - 1 ' Col1 = Tart.Cells(1, 1).Column Col1b = Tartb.Cells(1, 1).Column Colvegb = Col1b + Tartb.Columns.Count - 1 ReDim Hol(Sor1 To Sorveg) For t = Sor1 To Sorveg Hol(t) = 0 If WorksheetFunction.IsNumber(Worksheets(Tart.Parent.Name).Cells(t, Col1).Value) Then If Szam = Val(Worksheets(Tart.Parent.Name).Cells(t, Col1)) Then Hol(t) = 1 End If Next t
For t = Sor1 To Sorveg If Hol(t) = 1 Then For k = Col1b To Colvegb If WorksheetFunction.IsNumber(Worksheets(Tart.Parent.Name).Cells(t, k).Value) Then Osszeg = Osszeg + Val(Worksheets(Tart.Parent.Name).Cells(t, k).Value) End If Next k End If Next t Osszegzo = Osszeg Exit Function Hiba: End Function
Function Osszegzo(Szam As Long, Tart As Range, Tartb As Range) 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
ReDim Hol(Sor1 To Sorveg) For t = Sor1 To Sorveg Hol(t) = 0 If WorksheetFunction.IsNumber(Cells(t, Col1).Value) Then If Szam = Val(Cells(t, Col1)) Then Hol(t) = 1 End If Next t For t = Sor1 To Sorveg If Hol(t) = 1 Then For k = Col1b To Colvegb If WorksheetFunction.IsNumber(Cells(t, k).Value) Then Osszeg = Osszeg + Val(Cells(t, k).Value) End If Next k End If Next t Osszegzo = Osszeg Exit Function Hiba: End Function
Szia DJCarlos!
Amint írtam, az általad írt függvény hibátlanul működik, ha egy lapon van a függvényhez szükséges adatokkal, de ha a függvény más lapon működik, akkor már „lebénul”. Próbáltam modulba illeszteni, makróba írni, de sehogy se jó. Átírtam mind a két ciklust is. Úgy, hogy a #HIÁNYZIK felirat van a keresett sorban, úgy is jó, működik. Csak valahogy ezzel a 2 munkalapos dologgal nem bír el. Nem lehet, hogy minden egyes munkalaphoz modult kéne rendelni?
Mindenesetre leírom azt az egyszerű példát, amivel kísérleteztem:
01 munkafüzet:
A1 cella: 10211
A2: 1
A3: 1
B1: 10212
B2: (üres)
B3: 1
C1: 10211
C2: 1
C3: 1
02 munkafüzet:
A1 cella: =Osszegzo(10211;'01'!A1:A3;'01'!B1:B3)
A végösszegnek 2-nek kellene lennie!
Ezzel szemben az alábbi üzenetet írja ki:„A Microsoft Excel nem tud egy képletet kiszámítani. Körkörös hivatkozás szerepel az egyik megnyitott munkafüzetben, de ebben az esetben a kört alkotó hivatkozások nem listázhatóak. Próbálja meg a legutoljára beírt képletet módosítani, vagy pedig törölni azt a Szerkesztés menü Visszavonás parancsával.”Remélem, ez segít neked és remélem rajtam is segít. Jó lenne, ha működe ez a függvény.Köszönöm.
A függvény csak azon a lapon működik, ahol az adatok vannak. Sajnos ebben az Excel táblában 31 munkalapon vannak a bevitt adatok a 32.-en meg a függvény dolgozik.
Sziasztok!
Segítséget szeretnék kérni. Annak idején Csacsifiútól kaptam az alábbi makrót. A makró futtatáskor a C és D oszlopokat egymás mellé másolja, amennyiben a B oszlop eltérő értéket mutat.
Szeretném úgy átírni, hogy a másolás ne csak a C és D oszlopra, hanem C, D, E oszlopra, illetve C, D, E, F oszlopra vonatkozzon. Sajnos ez a feladat a magyarázó szöveg ellenére is kifogott rajtam.
Hol kell megváltoztatnom a számokat, hogy a makró a fentiek szerint működjön?
Segítségeteket köszönöm.
Sub betti2()
Dim i, j, l, n, k As Double
' indítás előtt B oszlop szerint rendezni és fejlécet adni neki
' a C és D oszlopot egy sorba másolja egymás után folyamatosan
Application.ScreenUpdating = False
'csinál egy másolatot a munkalapról, hogy az eredetit ne ronthassa el
ActiveSheet.Copy After:=ActiveSheet
'ahol a B oszlop értéke változik, oda beszúr egy új sort
i = Selection.SpecialCells(xlCellTypeLastCell).Row
For n = i To 3 Step -1
If Cells(n, 2) <> Cells(n - 1, 2) Then
Rows(n).EntireRow.Insert
End If
Next n
'az összetartozó dolgokat kimásolja a megfelelő sorba
i = Selection.SpecialCells(xlCellTypeLastCell).Row
For n = 2 To i
Cells(n, 3).Select
If Cells(n, 2) = Cells(n + 1, 2) And Cells(n, 2) <> "" Then
Selection.End(xlDown).Select
k = ActiveCell.Row
l = 5
For j = n To k
Cells(n, l) = Cells(j, 3)
Cells(n, l + 1) = Cells(j, 4)
l = l + 2
Next j
n = k
ElseIf Cells(n, 2) <> Cells(n + 1, 2) And Cells(n, 2) <> "" Then
Cells(n, 5) = Cells(n, 3)
Cells(n, 6) = Cells(n, 4)
End If
Next n
'kitörli az eredeti C és D oszlopot
Columns("c:d").EntireColumn.Delete
Application.ScreenUpdating = True
'meghívja a delete makrót
Call Delete
End Sub
Szeretnék zárolni egy lapot. Nincs is vele semmi gond csak a kombi panellel. Hiába unlock-oltam a kombi panel alatti cellát, lapvédelem után nem lehet módosítani/használni a kombi panelt.
Egy egyszerű, számomra egyenlőre mégsem megoldott kérdésem lenne. Hogy tudom beállítani a megjegyzés tulajdonságait úgy, hogy az alapértelmezetten működjön. Tehát ha létre akarok hozni egy új megjegyzést, akkor azzal a beállítással hozza létre, amit én beállítottam. Mert egyenként fárasztó szerkesztgetni, és szeretném, ha olyan lenne, amilyet én szeretnék. Remélem tud nekem ebben valaki segíteni... várom az esetleges segítségeket. És persze előre is köszi. Minden jót.
Egy olyan Excel programon dolgozom, aminél szerintem a makrók használata megkönnyítené a használatot. Tdnátok nekem segíteni és küldeni olyan anyagot, amiből meg tudom tanulni az makrók alapjait??
Sehogy se megy, akárhogy próbálom. Minden modult kitöröltem és újra beírtam (az átírtat), de NEM megy! A függvény ugyan úgy működik. Ha van a sorban egy #HIÁNYZIK cella, akkor nem működik, nem számol!
A 4811-es Osszegzo függvényben az utolsó ciklust erre kéne lecserélni:
For t = Sor1 To Sorveg If Hol(t) = 1 Then For k = Col1b To Colvegb If WorksheetFunction.IsNumber(Cells(t, k).Value) Then Osszeg = Osszeg + Val(Cells(t, k).Value) End If Next k End If Next t
csak bele kell ágyazni egy HA() függvénybe a megírt felhasználói függvényt. Pl.: HA(HIBÁS(eredeti felhasználó függvény);" ";eredeti felhasználói függvény)
Egy utolsó NAGY segítséget szeretnék kérni! Az általad írt függvényről lenne szó!
Ha A1:A10 között valahol van #HIÁNYZIK felirat, akkor "nem működik" az összegző függvény. Nem lehetne ezt valahogy "kijavítani", hogy ne vegye figyelembe ezeket a sorokat.