-
GAMEPOD.hu
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
-
Lompos48
nagyúr
Van-e valakinek birtokában olyan makró, amellyel egy cella tartalmát ismételten ("gombnyomásra") növelni/csökkenteni lehet egy megadott számmal (inkrementummal)? Vagy bármilyen konstruktív ötlete?
[ Szerkesztve ]
-
Delila_1
Topikgazda
válasz Lompos48 #10851 üzenetére
Alapjában véve egyetlen sor a makró
Növelésre:
Sub Nov()
Selection = Selection + 10
End SubCsökkentésre:
Sub Csokk()
Selection = Selection - 10
End SubLehet aztán cifrázni, pl. ne az éppen aktuális cella értékét módosítsa, hanem kérje be a cella címét, és a változtatás mértékét.
Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
-
dellfanboy
senior tag
hogy oldanátok meg az alábbi problémát excelben makrók segítségével? a1cella= 100, b1cella=50, c1cella= a1/b1 jelen esetben 2.
Ezt az értéket szeretném értékkel bemásolni a f1 cellaba majd f50ig lepopulálni.Tehát f1től f50ig minden cellában 2-es érték szerepeljen.
Tudom ez nem nehéz de a1,b1 nálam változó és van belőle, több ezer.eladó dolgok:mondd az árát és vidd http://hardverapro.hu/tag/dellfanboy#aprohirdetesei
-
Delila_1
Topikgazda
válasz dellfanboy #10855 üzenetére
Sub mm()
Range("A1") = 100: Range("B1") = 50: Range("C1") = Range("A1") / Range("B1")
Range("C1").Copy
Range("F1:F50").Select
Selection.PasteSpecial Paste:=xlPasteValues
End SubProgramozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
-
föccer
nagyúr
válasz dellfanboy #10855 üzenetére
Függvénnyel sem bonyolult.
=$A$1/$B$1
Ez megy az összes cellába. Lehúzható, másolható. Folyamatosan az A1/B1 cellára fog mutatni a hivatkozás.
üdv, föccer
Építésztechnikus. Építőmérnök.
-
m.zmrzlina
senior tag
válasz dellfanboy #10855 üzenetére
Hol kell keresni a változókat és hová kell tenni az eredményt?
-
m.zmrzlina
senior tag
válasz dellfanboy #10855 üzenetére
Nekem az A1:B4000-ben vannak a változópárok amiket el kell osztani egymással, az eredmény pedig az F1:F50 tartományba illetve attól jobbra kerül.
Sub lepopulal()
Dim bemenoadat As Variant
Dim eredmeny As Variant
Dim i As Integer
bemenoadat = Range("A1:B4000").Value
eredmeny = Range("F1:EXA1").Value
For i = 1 To 4000
eredmeny(1, i) = bemenoadat(i, 1) / bemenoadat(i, 2)
Next i
Range("F1:EXA50") = eredmeny
End Sub -
ArchElf
addikt
válasz Lompos48 #10861 üzenetére
Fejlécen jobb gomb > Control toolbox > Spin button
Kiteszed az objektumot, jobb gomb rajta > Properties
Linked Cell mezőbe beírod a cella címét (pl. D3) amit változtatni szeretnél.
Végül kikapcsolod a design módot a control toolbox első ikonjára kattintva (ami eddig be volt keretezve).AE
Csinálok egy adag popcornt, és leülök fórumozni --- Ízlések és pofonok - kinek miből jutott --- Az igazi beköpőlégy [http://is.gd/cJvlC2]
-
csela1
csendes tag
Szép napot kívánok!
Azzal a problémával fordulok a nálamnál jobban az Excel programozásához értőkhöz, hogy:
Van egy táblázatom, Az „A” oszlopban egymás alatt szöveg és szám található vegyesen. Sorszámozni szeretném úgy, hogy vizsgálja meg, hogy a fölötte lévő cella szám-e, ha igen, akkor adjon az abban a cellában található szám értékéhez egyet és az a szám legyen a kiindulási cellába írva, ha nem, akkor nézze meg, hogy az az fölötti cella szám-e. Mindaddig vizsgálja a fölötte lévő cellákat, amíg nem talál egy olyat, amiben szám van, és ahhoz adjon egyet
1
szöveg
szöveg
szöveg
2
szöveg
szöveg
szöveg
3tehát ha a 2-es cellán állok vizsgálja meg, hogy fölötte lévőben szám van-e, mivel szöveg van, vizsgálja meg az az fölötti cellát, majd az az fölötti cellát, ahol végre talál egy számot (1) ehhez adjon hozzá egyet és írja az aktuális cellába (2).
Köszönöm szépen a megtisztelő segítséget előre is.
üdvözlettel:
csela -
Delila_1
Topikgazda
válasz csela1 #10865 üzenetére
Nem kell ehhez makró. A B1 (vagy másik oszlop első cellája) képlete:
=HA(SZÁM(A1);1;"szöveg")
a második sor képlete: =HA(SZÁM(A2);MAX(B$1:B1)+1;"szöveg")Ez utóbbi végig másolható.
Ha a szöveget akarod látni a képleteket tartalmazó oszlopban, akkor a "szöveg" helyett legyen A1, ill. a második sorban A2.
Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
-
bugizozi
őstag
válasz nvyktor #10844 üzenetére
Szia,
ilyen probléma nálunk is volt. jelenség ugyanez, plusz néztem, hogy amig homokórázik az Excel, addig a Celeron proci 15-20%-ra, a 100Mbit-es hálózat 2-4%-ra volt leterhelve.
Oka: az egyik windows update feltette a Microsoft Office File Validation Add-in-t ami a hálózatról megnyitott Exceleket mindig leellenőrizte, ami egy több megás, több 1000 soros Excelnél nem 2 perc volt..
Megoldás menete: Programok telepítése és törlése -> delete -> örül
Remélem ez nálad is megoldja ezt a problémát
VCP7-DCV, CCNA ||| Ami működik, ahhoz nem szabad hozzányúlni!
-
Pale
csendes tag
Tiszteletem!
Van egy excel táblázatom. Mondjuk a1:h30-ban vannak adatok.
Egy olyan makró kellene nekem amely ennek a táblázatbak azokat a sorait másolja át egy másik munkalapra, melynek a h oszlopbeli cellája nincs kitöltve.
Köszönöm előre is, ha valaki foglalkozik az üggyel! -
föccer
nagyúr
Ha egyszer be van kapcsolva a szűrő, akkor csak annyi a feladat, hogy legördít, rákattint, hogy "üres", majd nyomtat. A nyomtatási képen is csak a leszűrt elemek jelennek meg. (én ezt sok ezer soros táblázattal így csinálom, egyszerre 8-10 feltételt használva, és hibátlan) Ez sem bonyolultabb, mint megnyomni egy gombot, munkalapot váltani, és úgy nyomtatni. Mind a kettőt meg kell mutatni és el kell magyarázni legalább egyszer. Ráadásul, ha a tisztelt felhasználó elkefél valamit, akkor a szűrős verziót akár telefonon keresztül, távvezérelve is vissza tudod állítani, mert csak a menüben kell kattintgatni. Ez esetben szerintem az egyszerűbb jobb megoldást adna.
üdv, föccer
Építésztechnikus. Építőmérnök.
-
m.zmrzlina
senior tag
A létező legprimitívebb megoldás és ha valóban bolondbiztossá kell tenni akkor sok dolog lesz még vele de kiindulásnak talán jó:
Sub atmasol()
Dim sor As Integer
sor = 1
Worksheets("Munka1").Select
Do Until IsEmpty(Cells(sor, 1).Offset(1, 0)) = True
If Cells(sor, 8) <> "" Then
Range(Cells(sor, 1), Cells(sor, 8)).Copy Worksheets("Munka2").Range("A" & Worksheets("Munka2").Cells(Rows.Count, 1).End(xlUp).Row + 1)
End If
sor = sor + 1
Loop
End SubMunka1-en vannak a kiinduló adatok és Munka2-re teszi az eredményt, illetve azt feltételeztem, hogy az A oszlopban a lista aljáig egyetlen cella sem üres. Valamint a H oszlop üres celláiban <szóköz> sem lehet.
-
beers
addikt
Sziasztok!
Hogy tudom azt megoldani, hogy nyomtatásban a legfeljső sor minden oldalon egyfajta fejlécként megjelenjen?
M&N
-
Pale
csendes tag
válasz m.zmrzlina #10877 üzenetére
Köszönöm!
(Föccernek is!) -
Baboka
tag
sziasztok!
Elkezdtem egy táblaösszemásoló makrót megírni, még kezdő vagyok nagyon, ezt kérem figyelembe venni, de az a problémám hogy mindig a jó kis runtime error 1004 jön ki a program ciklusainál
For i = fk + 1 To ssz
If (Sheets(2).Cells(i, eo).Value <> "") Then <-------- itt halódik meg az egész
For j = fk + 1 To ssz
If (Sheets(1).Cells(j, mo1).Value = Sheets(2).Cells(i, mo1).Value) And (Sheets(1).Cells(j, mo2) = Sheets(2).Cells(i, mo2)) And (Sheets(1).Cells(j, mo3) = Sheets(2).Cells(i, mo3)) Then
For k = 1 To osz
Sheets(1).Cells(j, k) = Sheets(2).Cells(i, k)
Next k
End If
Next j
End If
Next ifk: táblafejléc kezdete
eo: ellenőrző oszlop, ha üres akkor meg sem kell vizsgálni
mo1,2,3: adatoszlopok száma, amiket meg kell vizsgálniaha tudtok segíteni akkor előre is köszönöm!
-
Delila_1
Topikgazda
válasz Baboka #10883 üzenetére
Az EO-t tedd idézőjelek közé, ha ez az oszlop betűjele. Ha nem, akkor egész számnak kell lennie.
Az mo1-nek, mo2-nek, és mo3-nak is egész szám értéket kell képviselnie.Az említett hibajelenség még akkor szokott előfordulni, ha a Bővítménykezelőben nincs bekapcsolva az Analyzis ToolPak - VBA. A nem VBA-sat is kapcsold be, az a munkafüzetekhez ad egy halom új, jól használható függvényt.
[ Szerkesztve ]
Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
-
Baboka
tag
válasz Delila_1 #10884 üzenetére
Bővítményekkel sem jó sajna, berakom az egész makrót, nem egy nagy cucc hátha így tudsz segíteni:
Sub gomb()
Dim mo1, mo2, mo3, eo, ssz, osz, fk, i, j, k As Integer
mo1 = frmmasol.tbmo1.Text
mo2 = frmmasol.tbmo2.Text
mo3 = frmmasol.tbmo3.Text
eo = frmmasol.tbeo.Text
ssz = frmmasol.tbssz.Text
osz = frmmasol.tbosz.Text
fk = frmmasol.tbfk.Text
Sheets(1).Select
Range("A1").Select
If frmmasol.cbtabla.Value = False Then
Windows("1.xls").Activate
Sheets(1).Select
Cells.Select
Application.CutCopyMode = False
Selection.Copy
Windows("Masolo.xls").Activate
Sheets(1).Select
Cells.Select
ActiveSheet.Paste
End If
Windows("2.xls").Activate
Sheets(1).Select
Cells.Select
Application.CutCopyMode = False
Selection.Copy
Windows("Masolo.xls").Activate
Sheets(2).Select
Cells.Select
ActiveSheet.Paste
Sheets(1).Select
Range("A1").Select
For i = fk + 1 To ssz
If (Sheets(2).Cells(i, eo).Value <> "") Then
For j = fk + 1 To ssz
If (Sheets(1).Cells(j, mo1).Value = Sheets(2).Cells(i, mo1).Value) And (Sheets(1).Cells(j, mo2) = Sheets(2).Cells(i, mo2)) And (Sheets(1).Cells(j, mo3) = Sheets(2).Cells(i, mo3)) Then
For k = 1 To osz
Sheets(1).Cells(j, k) = Sheets(2).Cells(i, k)
Next k
End If
Next j
End If
Next i
End Sub -
félisten
válasz Baboka #10885 üzenetére
Pontosan melyik soron dobja a hibát? (Debuggold)
A változóid egy form-ról kapnak értéket. Biztos, hogy át lehet alakítani számmá vagy másképp, biztos, hogy a form adott komponense/vezérlője biztosan számot tartalmaz? Kapnak értéket biztosan?[ Szerkesztve ]
Mindenki tudja, hogy bizonyos dolgokat nem lehet megvalósítani, mígnem jön valaki, aki erről nem tud, és megvalósítja. (Albert Einstein)
-
Delila_1
Topikgazda
válasz Baboka #10885 üzenetére
F8-cal lépésenként futtatsd a makrót. Az értékadások után cursorral a változó fölé állva lekérdezheted az értékét.
Gyanús nekem, hogy az mo1 – fk változók érték nélkül maradnak.Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
-
m.zmrzlina
senior tag
Szerettem volna Pale (#10873)-ban leírt problémáját mintegy a magam okulására egy másik megközelítésből megoldani.
Már többször használtam azt a módszert, hogy (főleg nagyobb tartományoknál) nem cellánként olvasok és írok hanem egyben egy egész tartományt olvasok be, elvégzem a műveletet és egyben írom vissza a munkalapra az eredményt. Innen vettem az ötletet
Eddig még sosem volt olyan helyzet, hogy az eredmény tartomány méretét ne tudtam volna előre, hanem menet közben kelljen meghatározni.A következő kódot sikerült kiagyalni, és nem tudom, hogy (noha úgy tűnik működik) valójában így kell-e csinálni ezt vagy van-e erre valami bevett profi megoldás. Minden építő kritikát szivesen veszek.
Sub atmasol()
Dim bemenoadat() As Variant, eredmeny() As Variant
Dim i As Long, j As Integer, belistahossz As Long, kilistahossz As Long, m As Long
belistahossz = Cells(Rows.Count, 1).End(xlUp).Row
bemenoadat = Range("A1:H" & belistahossz).Value
kilistahossz = Application.WorksheetFunction.CountA(Range(Cells(1, 1), Cells(belistahossz, 1)))
m = 1
ReDim Preserve eredmeny(1 To kilistahossz, 1 To 8)
For i = 1 To belistahossz
If bemenoadat(i, 8) <> "" Then
For j = 1 To 8
eredmeny(m, j) = bemenoadat(i, j)
Next j
m = m + 1
End If
Next i
Worksheets("Munka2").Range("A1:H" & kilistahossz).Value = eredmeny
End Sub[ Szerkesztve ]
-
copperhead
aktív tag
Sziasztok! Azt, hogy kell beállítani, mint az itt látható első táblázatban, hogy az első 5 sor fixen marad, hiába görgetem az oldalt?
-
Delila_1
Topikgazda
válasz copperhead #10893 üzenetére
Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
-
cousin333
addikt
válasz m.zmrzlina #10891 üzenetére
Amennyire én értek hozzá, jónak tűnik a megoldás. Nem mellesleg éppen ma szembesültem én is ezzel a módszerrel...
Viszont például az én problémámra (amivel jelenleg foglalkozom), úgy tűnik, gyorsabb a "sima" megoldás, nevezetesen, hogy a bemenő változókkal egyesével feltöltök egy-egy tömböt, az eredményeket kiszámolom egy másik tömbbe, majd egyesével kiírogatom őket a megfelelő helyekre. Nem biztos, hogy tuti módszerrel csinálom, mindenesetre a "sima" módszer futása kb. 6,3 mp, míg az egyszerre olvasósé 10,6 mp (persze számolni is kell, nem csak egyik helyről a másikra pakolászni). Szóval érdemes lehet több megoldást megvizsgálni és Timer funkcióval megmérni egy nagyobb adattömegen, hogy mi a gyorsabb (esetleg különböző adatmennyiségek esetén is nézni, hogy hogyan skálázódnak a különböző módszerek).
Mindenesetre már összeállt a fejemben egy másik megközelítés, ami reményeim szerint sokkal gyorsabb lesz majd. Ennél a problémánál is gyorsabb megoldásnak tűnik, ha végigmész a 8. oszlopon, és ha az adott sorban nincs értéke, akkor a komplett sort (akár a
Sheets("újhely").Range("A11:H11").Value = Range("A23:H23").Value
módszerrel) átmásolod az új helyre.
[ Szerkesztve ]
"We spared no expense"
-
m.zmrzlina
senior tag
válasz cousin333 #10896 üzenetére
...hogy a bemenő változókkal egyesével feltöltök egy-egy tömböt, az eredményeket kiszámolom egy másik tömbbe, majd egyesével kiírogatom őket a megfelelő helyekre...
Amit nekem sikerült kiérteni a vonatkozó forrásokból az az, hogy a szóban forgó módszert pont azért érdemes használni mert nem visz el rengeted időt az egyenkénti olvasás-írás. Gyakorlatilag az Excel "fejben" számolja az eredményt és egyszerre írja vissza a munkalapra.
A futásidő különbség nálam egy másik tartománynál (kb 8000 cella és mindegyikben WorksheetFunction-os szövegmanipuláció): cellánkénti módszernél 70mp körül, a "fejbenszámolós" módszer 1mp alatt
...(akár a
Sheets("újhely").Range("A11:H11").Value = Range("A23:H23").Value
módszerrel) átmásolod az új helyre....
Gyakorlatilag ez a módszer volt amit először javasoltam, de ez több ezer cellánál már időigényesebb a "tömbös" mószernél.
[ Szerkesztve ]
-
cousin333
addikt
válasz m.zmrzlina #10897 üzenetére
Értem én, hogy elvileg gyorsabb, azért is lepett meg, hogy nálam lassabban futott, mint az "alap" megoldás. Persze lehet, hogy csak az én implementációm volt rossz (most sajnos nem tudom beírni a kódot).
Nálam 3 x 20 ezer celláról van szó, a műveleteket 4 ezerszer hajtom végre ezen a bemeneti tartományon, tehát nem lehet panasz a terhelésre. Először tömbképlettel csináltam, kb. leölte a gépet...
"We spared no expense"
-
cousin333
addikt
válasz m.zmrzlina #10891 üzenetére
Ez a sor:
kilistahossz = Application.WorksheetFunction.CountA(Range(Cells(1, 1), Cells(belistahossz, 1)))
véletlenül nem ez akart lenni?
kilistahossz = belistahossz - Application.WorksheetFunction.CountA(Range(Cells(1, 8), Cells(belistahossz, 8)))
Legalábbis a feladat alapján: azon sorokat másolja, ahol a H oszlopbeli cella nincs kitöltve.
"We spared no expense"