Hirdetés
-
LOGOUT.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
-
m.zmrzlina
senior tag
válasz Delila_1 #17185 üzenetére
Ez lett belőle:
Range("C" & intMeterfejlec & ":D" & intMeterfejlec_vege).Select
Set ranPorthol = Selection.Find(What:=strPort, After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False)
If Not ranPorthol Is Nothing Then
If Mid(Cells(ranPorthol.Row + 4, 5).Value, 9, 4) <> "UNDF" Then
strPortmap(1, intKovport) = Mid(Cells(ranPorthol.Row + 4, 5).Value, 9, 4)
intKovport = intKovport + 1
Else
strPortmap(1, intKovport) = Empty
intKovport = intKovport + 1
End If
Else
strPortmap(1, intKovport) = "NONE"
intKovport = intKovport + 1
End IfÉs láss csodát....működik.
Megint köszönöm.
-
m.zmrzlina
senior tag
Létezik e az Application.ScreenUpdating-nek oprendszer szinten is működő változata.
Az a gondom, hogy van egy makróm ami azt csinálja, hogy
1. megnyit egy fájlt
2.kiír belőle bizonyos adatokat
3.bezárja a fájlt
4. GoTo 1 (kb 1000-szer)Ezalatt a tálcaikonok folyamatosan változnak (a megnyitás-bezárások miatt) egy kicsit "hektikussá" téve a makró futását.
Ezért szeretném letiltani a képernyőfrissítést rendszerszinten.
-
m.zmrzlina
senior tag
válasz motinka #17208 üzenetére
Itt értekeztünk hasonló dolgokról.
Annyi különbséggel, hogy ott a betűszín volt az összegzés kritériuma nem a háttérszín, és nem a cellák számát határozta meg hanem a tartalmukat összegezte.
Az alábbi fv ennek a módosítása:
Function SZINESÖSSZEG(minta As Range, tartomany As Range)
Dim cella As Range, osszeg As Double
szin = minta.Interior.ColorIndex
For Each cella In tartomany
If cella.Interior.ColorIndex = szin Then
osszeg = osszeg + 1
End If
Next cella
SZINESÖSSZEG = osszeg
End Function[ Szerkesztve ]
-
m.zmrzlina
senior tag
válasz motinka #17220 üzenetére
Lehet az a gond, hogy makróként szeretnéd használni. Ez ugyanis egy függvény amit az Excel egyéb függvényeihez hasonlóan kell használni. Nyitsz egy modult a munkafüzetben, bemásolod oda a függvényt és ezután a munkalapon tudod használni ahogyan az Excel beépített függvényeit.
Ha adsz egy címet küldök egy munkafüzetet.
-
m.zmrzlina
senior tag
válasz dellfanboy #17438 üzenetére
Első körben a DARABTELI()-re gondolnék.
pl: =DARABTELI(C:C;1) megadja, hogy a C oszlopban hány 1-es van.
Vagy =DARABTELI(D:D;"ló") a D oszlopban hány ló.
-
m.zmrzlina
senior tag
Van egy munkafüzetben változó számú munkalap (5-30). Minden lapon egy naphoz tartozó adatok. A dátum megtalálható a lapokon B2:B1500 tartományban (minden cellában) a következő formátumban: ééé.hh.nn ó:pp. Természetesen az óra perc változik de ez nem probléma.
A feladat: időrendi sorrendbe kell rendezni a lapokat (legkorábbi elöl)
Próbáltam a lapokat a hozzájuk tartozó dátumra átnevezni, de hogyan tovább?
-
m.zmrzlina
senior tag
válasz m.zmrzlina #17470 üzenetére
Úgy tűnik találtam egy megoldást. (de hogy miért mindig 5 perccel azután, hogy kiposztolom a kérdést)
-
m.zmrzlina
senior tag
Van egy cellám (mondjuk "A1") amiben dátum van a következő formában: 2013.02.19(.) A pont azért van zárójelben mert a problémám ponttal és pont nélkül is uagyanaz
Az =ÉRTÉK("A1") fv. a következő eredményt adja 41324.
A következő programsor Val(Cells(1,1)) pedig ezt: 2013,02Miért van ez és hogyan tudnám makróval kinyerni a cellából a képlet eredményét?
Valójában le szeretném ellenőrizni, hogy az A1:A30 tartományban folytonosak-e a napok, vagyis a kezdő és a záró dátum között nem hiányzik-e egy a sorból.
[ Szerkesztve ]
-
m.zmrzlina
senior tag
válasz Delila_1 #17481 üzenetére
Nem igazán. Ez a kód:
intSzamlalo = 1
For Each wshMunka In ActiveWorkbook.Worksheets
If wshMunka.Name <> "összesítő" Then
wshOsszesito.Cells(1, intSzamlalo + 5) = format(Cells(1, intSzamlalo + 5), "yyyy.mm.dd")
'wshOsszesito.Cells(1, intSzamlalo + 5).NumberFormat = "yyyy.mm.dd"
wshOsszesito.Cells(1, intSzamlalo + 5).Value = wshMunka.Name
intSzamlalo = intSzamlalo + 1
End If
NextKikommentezve a tied alatt ott az én megoldásom de mindkettő ugyanúgy nem jó. A következő ciklussal szeretném kiértékelni az 1. sorban lévő dátum(nak látszó) értékeket:
wshOsszesito.Range("F1").Select
Do While ActiveCell.Offset(0, 1).Value <> ""
If Val(ActiveCell.Offset(0, 1).Value) <> Val(ActiveCell.Value) + 1 Then
intValasz = MsgBox("Az importált adat nem folytonos. Mégis folytatod?", vbYesNo)
If intValasz = vbNo Then
Application.DisplayAlerts = False
ActiveWorkbook.Close
Application.DisplayAlerts = True
End
End If
End If
ActiveCell.Offset(0, 1).Select
Loop[ Szerkesztve ]
-
m.zmrzlina
senior tag
válasz Delila_1 #17483 üzenetére
Azt szeretném a makróval, hogy jelezze, hogy a fenti példánál pl febr 23.-a hiányzik. Most az van, hogy mivel a makrónak minden cellaérték 2013,02 így már az első ellenőrzéskor (19-20-nál) jelez.
Jelenlegi cellaformátum Általános. _Nem Dátum vagy Szöveg Az első sorba a munkalapnevek beolvasásával kerülnek az értékek.
(a szerkesztőlécen F2 képlete)
[ Szerkesztve ]
-
m.zmrzlina
senior tag
válasz Delila_1 #17489 üzenetére
A dátumok szerintem akkor változnak szöveggé amikor a cellatartalomból először munkalapnév lesz aztán a munkalapnévből megint visszakerülnek egy másik cellába.
Azért ilyen bonyolultan oldom meg mert a forrásfájlban mindenféle hibák lehetnek. (ismétlődő, nem megfelelő szerkezetű vagy oda nem illő munkalapok-ezeket törölni kell illetve nem is mindig időrend szerint vannak a munkalapok) Csak miután rendbetettem a munkafüzetet lehet listát csinálni a munkalapokról és minden más csak ezután jöhet.
Az alapfeladat szépen működik is (mondhatnánk, hogy első körben készen vagyunk) csak ez az ellenőrzés nem megy.
-
m.zmrzlina
senior tag
válasz Sanyuc #17508 üzenetére
Első körben csak a módszer miatt aztán ha kell módosítani még lehet faragni:
Sub szamol()
For i = 1 To 30
For Each cella In Selection.Cells
If cella.Value = i Then
mennyi = mennyi + 1
End If
Next
Debug.Print "Összesen " & mennyi & " db " & i & " szám található a kijelölt tartományban."
mennyi = 0
Next
End SubEz a kód az Immediate ablakba írja ki az eredményt, és ki kell jelölnöd azt a tartományt amiben számolni akarsz.
-
m.zmrzlina
senior tag
válasz Delila_1 #17512 üzenetére
Te hekkeled a gépemet?
Sub szamol()
Cells(1, 27).Value = "szám"
Cells(1, 28).Value = "darab"
For i = 1 To 30
For Each cella In Selection.Cells
If cella.Value = i Then
mennyi = mennyi + 1
End If
Next
Cells(i + 1, 27).Value = i
Cells(i + 1, 28).Value = mennyi
mennyi = 0
Next
End SubItt van készen majdnem ugyanez,
-
m.zmrzlina
senior tag
válasz Melorin #17536 üzenetére
Mert Delila válaszában az FKERES() utolsó argumentuma 1 ami azt jelenti, hogy a függvény ha nem találja a keresett értéket akkor beéri az ahhoz legközelebbi értékkel. Ha ezt kicseréled 0-ra (ekkor a fv pontos egyezőséget keres) akkor azokra a számokra ami nincs megadva a segédtáblában #HIÁNYZIK eredményt fog adni.
Ha ezt el szeretnéd kerülni akkor Delila képletét módosítsd így:
Excel2007-2010 esetén
=HAHIBA(FKERES(I20;J20:K23;2;1);"")Korábbi verziók esetén:
=HA(HIBÁS(FKERES(I20;J20:K23;2;1);"";FKERES(I20;J20:K23;2;1))Talán nem írtam el.
Így a képlet hiba esetén üres cellát fog adni.
[ Szerkesztve ]
-
m.zmrzlina
senior tag
válasz m.zmrzlina #17537 üzenetére
Hát persze hogy elírtam. Egy zárójel elfelejtődött bezáródni.
=HA(HIBÁS(FKERES(I20;J20:K23;2;1));"";FKERES(I20;J20:K23;2;1))
[ Szerkesztve ]
-
m.zmrzlina
senior tag
Köszönöm ezt a valóban kimerítő parádés választ.
Igaz a végleges megoldásba a makrós megoldás jobban illeszkedett mivel az egész megoldás makróra épült. Egy szedett-vedett munkafüzetből kellett kimazsolázni a fontos adatokat és (nyilván a nem kellő átgondoltság miatt) az adatok ide-oda rakosgatásával menet közben elfelejtett a dátum dátumként viselkedni.
Ráadásul ez a hiányzó dátum ellenőrzés már csak bónusz volt a feladatban de Delila konvertálós megoldása egyetlen makrósorban megoldotta a problémát.
Köszi még egyszer!
-
m.zmrzlina
senior tag
válasz Dr. Student #17556 üzenetére
Csak az elv.
=HA(DARABTELI(A:T;V1)>=1;"X";"")
Az A:T tartományban van az az adat amiben keresel, a V oszlopban egymás alatt a tételek amit keresel.
A képletek a W oszlopban vannak és minden V-ben szereplő tétel után tesz egy "X"-et ha az legalább egyszer szerepel az A:T tartományban.[ Szerkesztve ]
-
m.zmrzlina
senior tag
Vagy próbáld így:
Sub formaz()
Range("D2").Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
For Each cella In Selection.Cells
cella.NumberFormat = "0.00"
Next
End SubTermészetesen a szám formátumát állítsd az általad kívántra!
[ Szerkesztve ]
-
m.zmrzlina
senior tag
válasz Delila_1 #17593 üzenetére
Ez a módszer miért nem működik ha nem használsz objektumváltozót?
Én ugyanis kipróbáltam úgy hogy:
For Each cella in Selection.Cells
cella.Value=cella.Value * 1
Nextde ez még az általam Szöveggé formázott számokon sem működött.
Úgy működött csak, ha nem helyben akartam szorozni, hanem odébbtettem egy másik cellába a végeredményt.
[ Szerkesztve ]
-
m.zmrzlina
senior tag
Van egy a fentihez hasonló fájlszerkezet. Az 1, 2, 3, mappákban .xlsm fájlok amelyekben a makrók a forrásadatok.xlsx-ből dolgoznak.
Hogyan hivatkozzak a forrásadatok.xlsx-re a makróban, hogy a test mappa szabadon áthelyezhető legyen de a makrók hivatkozásai továbbra is működjenek.
Ide sem merem írni milyen megoldásokkal próbálkoztam eddig.
-
m.zmrzlina
senior tag
Köszi a választ.
Ezt a tulajdonságot ismerem csak azt reméltem, hogy lehet a függvények relatív cellahivatkozásához hasonlóan elérési útra is hivatkozni úgy hogy nem "betonozod" bele a makróba a teljes elérési utat.Az lesz a megoldás, hogy a <ThisWorkbook.Path> legutolsó "\" utáni karaktereit kicserélem a forrásfájl nevére mivel a forrásfájl mindig eggyel makrót tartalmazó mappa feletti mappában van.(a képen ez a test mappa) és a két fájl relatív helyzete mindig ugyanaz.
-
m.zmrzlina
senior tag
Az a kérdés, hogy az alábbi kódrészletben, hogyan lehet a rngForras változónak értéket adni (és persze utána használni is a változót) úgy, hogy nem nyitom meg a tartományt tartalmazó mappát.
Sub reftest2()
Dim rngForras As Range
Dim rngMunka As Range
Workbooks.Open ("C:\Users\gipszjakab\próbafájlok\test\forrásadatok.xlsx")
Set rngForras = ActiveWorkbook.Worksheets("adatok").Range("A:B")
Set rngMunka = ThisWorkbook.Worksheets("Munka1").Range("B1:B14")
For Each cella In rngMunka.Cells
cella.Value = Application.WorksheetFunction.VLookup(cella.Offset(0, -1), rngForras, 2, 0)
Next
End Sub[ Szerkesztve ]
-
m.zmrzlina
senior tag
válasz m.zmrzlina #17688 üzenetére
Ilyesmi vizsgálatra gondoltam:
Sub vanemar()
Dim ws As Worksheet
Dim bolVanemar As Boolean
bolVanemar = False
For Each ws In ActiveWorkbook.Worksheets
If ws.Name = "munkalapodneve" Then bolVanemar = True
Next
If bolVanemar = True Then
Exit Sub
Else
'ide jön a makró aminek le kell futni
End If
End Sub[ Szerkesztve ]
-
m.zmrzlina
senior tag
-
m.zmrzlina
senior tag
A probléma:
Adott egy tartomány (2 oszlop, a másodikban színes hátterű cellák). A tartomány leszűrve a 2. oszlop színes celláira.
Ezt a leszűrt tartományt (csak a leszűrt értékeket) akarom másolni.
Ennek az eredménye egyik gépen rendben van (csak a kívánt sorokat másolja) a másikon az egész tartományt, hiába csak a szűrt sorokat látom.Ha a cellatartalomra szűrök akkor mindkét gépen rendben van a szűrt tartomány kijelölése és másolása.
Nyilván valami excel beállítás az oka de vajon mi?
-
m.zmrzlina
senior tag
Szerintem egy ötletnek ez jó lesz.
Sub ellenoriz()
Range("F:F").EntireColumn.ClearContents
For Each cella In Selection.Cells
If cella.Value <> cella.Offset(0, 7).Value Then
Cells(cella.Row, 6).Value = "Ez a sor hibás!"
End If
Next
End SubMielőtt futtatod ki kell jelölni a függvények által képzett (az "A" oszlopban kezdődő) tartományt.
-
m.zmrzlina
senior tag
Amíg meg nem kapod a rendes megoldást addig használd ezt a förmedvényt:
=HA(A1<>ELTOLÁS(A1;0;7);"Ez a sor hibás!";HA(B1<>ELTOLÁS(B1;0;7);"Ez a sor hibás!";HA(C1<>ELTOLÁS(C1;0;7);"Ez a sor hibás!";HA(D1<>ELTOLÁS(D1;0;7);"Ez a sor hibás!";HA(E1<>ELTOLÁS(E1;0;7);"Ez a sor hibás!";"")))))
Értelemszerűen ez az F1 cella képlete.
Biztos vagyok benne, hogy létezik egy szebb fv erre a problémára.[ Szerkesztve ]
-
m.zmrzlina
senior tag
válasz DelArco #18018 üzenetére
Ha ez az "A1" képlete akkor valóban nem fog működni. De ha a worksheet change eseményébenmegadod, hogy mi történjen az "A1" értékével akkor jó lehet:
Private Sub Worksheet_Change(ByVal Target As Range)
If Cells(1, 1).Value = "" Then Cells(1, 1).Value = Cells(2, 1).Value
End SubEz akkor fog működésbe lépni amikor írsz, vagy törölsz valamit az "A1"-be(ből).
-
m.zmrzlina
senior tag
válasz stupid user #18020 üzenetére
Próbáld meg kivenni a "Ha ez a teljes cella tartalma" elől kivenni a pipát.
-
m.zmrzlina
senior tag
válasz VIVANA #18057 üzenetére
Az én egyik munkafüzetemben ez a pár sor végzi ezt a feladatot:
Sub rendez()
Dim lCount As Long
Dim lCount2 As Long
For lCount = 1 To Sheets.Count
For lCount2 = lCount To Sheets.Count
If Sheets(lCount2).Name < Sheets(lCount).Name Then
Sheets(lCount2).Move Before:=Sheets(lCount)
End If
Next lCount2
Next lCount
End SubA If Sheets(lCount2).Name < Sheets(lCount).Name Then sorban lévő "<" jellel tudod beállítani, hogy csökkenőbe vagy növekvőbe rendezzen.
Sajnos már nem tudom, hogy honnan loptam.
[ Szerkesztve ]
-
m.zmrzlina
senior tag
válasz Aladaar #18081 üzenetére
Ha a cellákon belül van vegyesen szám és betű amiből csak a szám kell ahogyan a képen van akkor használd a következő makrót:
Sub csakaszamok()
For Each cella In Selection.Cells
For i = 1 To Len(cella.Value)
If Asc(Mid(cella.Value, i, 1)) > 47 And Asc(Mid(cella.Value, i, 1)) < 58 Then
csakaszam = csakaszam & Mid(cella.Value, i, 1)
End If
Next
cella.Offset(0, 1).Value = csakaszam
csakaszam = ""
Next
End SubTermészetesen a makró csak az elvet mutatja ha azt csinálja amit szeretnél akkor igény szerint faragható.
-
m.zmrzlina
senior tag
Itt egy lehetséges megoldás makróval:
Sub legnagyobb_hol()
For Each cella In Selection.Cells
datum = cella.Value
For Each cella_1 In Selection.Cells
If cella_1.Value = datum And cella_1.Offset(0, -1).Value > temp Then
legnagyobb_sor = cella_1.Row
temp = cella_1.Offset(0, -1).Value
End If
Next
For Each cella_2 In Selection.Cells
If cella_2.Value = datum Then
cella_2.Offset(0, 1).Value = temp
End If
Next
temp = 0
Next
End Sub"A" oszlopban vannak az értékek, "B" oszlopban a hozzájuk tartozó dátumok, "C"-ben pedig, hogy az adott dátumnál mi a legnagyobb érték.
Úgy indulsz, hogy kijelölöd a dátumokat tartalmazó cellákat az elsőtől az utolsóig. Ha a te munkalapod szerkezete nem ilyen (amire jó esély van ) akkor tegyél be egy képet és hozzáfaragjuk a makrót.
[ Szerkesztve ]
Új hozzászólás Aktív témák
Hirdetés
- AMD Ryzen 9 / 7 / 5 9***(X) "Zen 5" (AM5)
- Renault, Dacia topik
- Yettel topik
- Kerékpárosok, bringások ide!
- Autós topik
- Black Friday november 29. / Cyber Monday december 2.
- Milyen légkondit a lakásba?
- Épített vízhűtés (nem kompakt) topic
- Milyen asztali (teljes vagy fél-) gépet vegyek?
- Azonnali fáradt gőzös kérdések órája
- További aktív témák...
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest
Cég: HC Pointer Kft.
Város: Pécs