Keresés

Új hozzászólás Aktív témák

  • KovacsUr

    addikt

    válasz airyca #3 üzenetére

    Jobb klikk a worksheet fülön, Kód megjelenítése

    aztán ezt beilleszt

    Sub Worksheet_Change(ByVal Target As Excel.Range)

    If Target.Value <> '''' And (Target.Column = 1) Or (Target.Column = 2) Then
    Cells(Target.Row, 3).Activate
    ActiveCell.Value = Date
    ActiveCell.NumberFormat = ''yyyy/mm/dd''
    End If

    End Sub


    So it goes… We stand alone by standing stones and turn them into circles.

  • KovacsUr

    addikt

    válasz KovacsUr #11 üzenetére

    ja igen, és ha 'kód megjelenítése' után benne van a kurzor

    Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
    ITT
    End Sub

    van, akkor klikkelj ki belőle, mielőtt beilleszted a makrót

    So it goes… We stand alone by standing stones and turn them into circles.

  • matekmatika

    tag

    válasz alph4 #1263 üzenetére

    Hát, kb egy órámba telt, legalább. És szerintem ha nem nagyon értesz hozzá akkor legalább ennyi idő lenne elmagyarázni is a parancsgomb alá írt kódot. A G oszlopban úgy tudod elérni hogy végig minden celládhoz legyen listás választási lehetőséged, hogy rákattintasz az első 30 cella valamelyikére, másolás, kijelölöd végig ameddig akarod hogy legyen, és beillesztés.
    A parancsgombot úgy tudod átrakni ha a vezérlők eszköztárát kijelölöd, és a tervező mód ikonját bekapcsolod. Ekkor oda rakod a parancsgombot, meg úgy méretezed ahogy akarod, az alá írt kódot pedig rajta egy jobb klikk után (vagy a kód megjelenítése ikonra kattintva) nézheted meg. Hagy ne részletezzem most hogy mi micsoda benne. Meleg is van most hozzá nagyon, dolgozom is, meg nyűgös is vagyok :(( . De számtalan helyet találsz az interneten ahol ezeknek utána nézhetsz. Persze ha konkrét kérdésed van, akkor kérdezz nyugodtan.

  • Delila_1

    Topikgazda

    válasz Kvázi #3162 üzenetére

    A lapfülön jobb klikk, Kód megjelenítése. A megjelenő Visual Basic szerkesztőn a jobb oldalon lévő nagy üres lapra bemásolod az alábbi makrót:

    Sub Worksheet_Change(ByVal Target As Excel.Range)
    If (Target.Column = 1) Then
    Cells(Target.Row, 5) = Cells(Target.Row, 2) + Cells(Target.Row, 3) _
    + Cells(Target.Row, 4)
    End If
    End Sub

    Ez, ha az A oszlopba írsz valamit, az E oszlopba beírja az azonos sorban lévő B+C+D értéket.
    Ha nem az E-be kell, a Cells(Target.Row,5)-nél írd át az 5-öt annyira, amennyi a kívánt oszlop sorszáma az angol ABC-ben (F-nél 6, G-nél 7, T-nél 20, stb).
    Amennyiben másik lapnál is kell ez a funkció, ugyenezt a makrót a másik lap kódlapjára is másold be.

    [ 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.

  • Delila_1

    Topikgazda

    válasz FehérHolló #3577 üzenetére

    Sub Worksheet_Change(ByVal Target As Excel.Range)
    If (Target.Column > 3 And Target.Column < 8 And Target.Row < 11) Then
    Range("A1").Select
    ActiveCell.FormulaR1C1 = "= TODAY()"
    Selection.Copy
    Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone
    Application.CutCopyMode = False
    End If
    End Sub

    Ez a kis makró a munkalaphoz rendelve (lapfülön jobb klikk, kód megjelenítése, VBE-ben a jobb oldalon kapott üres lapra másolva) azt csinálja, hogy ha a D1:G10 tartományban módosul az adat, az A1-be beírja az aktuális dátumot a MA() függvénnyel, és rögtön át is írja a függvényt az értékére.

    [ 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.

  • Delila_1

    Topikgazda

    válasz takyka77 #3822 üzenetére

    Sub Worksheet_Change(ByVal Target As Excel.Range)
    If (Target.Column = 2 And Target.Row = 3 And Target.Value > 100) _
    Then MsgBox "Elérte a maximumot"
    End Sub

    Ez a makró a B3 cella (Column 2, Row 3) értékét figyeli. Ha meghaladta a 100-at, akkor üzenetdobozban figyelmeztet.

    A makrót a kérdéses laphoz rendeld hozzá. Lapfülön jobb klikk, kód megjelenítése. A VB szerkesztő jobb oldalán kapott üres lapra másold át, és értelemszerűen végezd el a módosításokat.

    Ehelyett a feltételes formázással is ki lehet emelni a cella é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.

  • Delila_1

    Topikgazda

    válasz vagamo #4023 üzenetére

    A lapfülön jobb klikk, Kód megjelenítése. Bejutottál a VB szerkesztőbe. Jobb oldalon kaptál 1 üres lapot, oda másold be a makrót.
    Az I, vagy T betűt a Q oszlopba írd. Jó az i és a t is.

    Sub Worksheet_Change(ByVal Target As Excel.Range)
    If Target.Column = 17 And (Target.Value = "I" Or Target.Value = "i") Then
    Cells(Target.Row, 16) = Cells(Target.Row, 6)
    Cells(Target.Row, Target.Column) = ""
    End If

    If Target.Column = 17 And (Target.Value = "T" Or Target.Value = "t") Then _
    Cells(Target.Row, 17) = Cells(Target.Row + 1, 6)

    End Sub

    Ha lenne egy külön oszlop, amibe beviszed a két betűd valamelyikét, akkor az ssrobi által említett HA függvénnyel simán meg lehetne oldani.

    [ 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.

  • Fire/SOUL/CD

    félisten

    válasz nesh20 #4157 üzenetére

    Hali!

    Nos ha jól veszem ki szavaidból, akkor adott egy angol OS + angol Office(ami hibátlanul müködik) ill egy magyar OS + angol Office(amiben meg nem látod a KÓD MEGJELENÍTÉSE menűt?

    Ha így van, akkor a hibát okozhatja a nyelvi eltérés. [link]
    Ilyennel még nem találkoztam, da hasonlóval igen, amikor angol x64 XP-m volt, erre raktam fel a magyar 2003 Office-t, nekem az Outlokkban a fájlmenü IMPORTÁLÁS-EXPORTÁLÁS menűi váltak elérhetettlenné. Talán próbáld meg az OS területi beállításait angolra állítani vagy (ha lehetséges) a Office csomag nyelvi beállításait magyarra rakni.

    Esetleg(bár nem írtad hogy 2000, 2003, 2007 verziójú a csomag) próbáld alaphelyzetre állítani az eszköztárat, hátha csak ezért nem látszik... :U
    (2003 excelben ESZKÖZÖK/TESTRESZABÁS/ALAPHELYZET)

    Remélem segít valamit, amit írtam.

    Fire.

    [ 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 Chili7 #4235 üzenetére

    Az első kérdésed megoldásához az alábbi makrót másold be a laphoz (lapfülön jobb klikk, a gyorsmenüből a "Kód megjelenítése" menüpontot választva a VBA szerkesztőjében jobb oldalon kapsz egy üres lapot, oda):

    Sub Worksheet_Change(ByVal Target As Excel.Range)
    If Target.Column > 1 Then
    Cells(Target.Row, 1).Select
    Selection.Formula = "=TODAY()"
    Selection.Copy
    Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
    False, Transpose:=False
    End If
    Application.CutCopyMode = False
    End Sub

    A második kérdéshez nem írtad, hogy ugyanazon a lapon akarod-e alkalmazni, ahol az előbbit. Én másik laphoz írtam hozzá makrót, amit ugyanúgy másolj be a másik lap kódlapjához, mint az előzőt. A makró az F oszlop változását figyeli (IFoszlop=6), és két értékre színezi az egész aktuális sort (target.value="alma" –> piros karakter, target.value="körte" –> kék karakter). Az oszlopba érdemes a két választható választ előre megadni az Adatok/Érvényesítés/Beállítások fül/Lista, a Forráshoz alma; körte.

    Sub Worksheet_Change(ByVal Target As Excel.Range)
    sor = Target.Row: oszlop = Target.Column

    If oszlop = 6 And Target.Value = "alma" Then
    Rows(Target.Row & ":" & Target.Row).Select
    Selection.Font.ColorIndex = 3
    End If
    If oszlop = 6 And Target.Value = "körte" Then
    Rows(Target.Row & ":" & Target.Row).Select
    Selection.Font.ColorIndex = 5
    End If
    Cells(sor, oszlop).Select
    End Sub

    Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.

  • Delila_1

    Topikgazda

    válasz Garffi #4530 üzenetére

    A lapfülön jobb klikk, Kód megjelenítése.
    A kapott üres lapra másold be ezt:

    Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column = 2 Then Cells(Target.Row, 1).Font.Bold = True
    End Sub

    Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.

  • Delila_1

    Topikgazda

    válasz VANESSZA1 #4585 üzenetére

    Nem pontos a kérdésed. Ugyanúgy vonatkozhat egy kész táblázatra, mint egy olyanra, amit most viszel be. Az utóbbihoz írtam egy makrót, ami azt a sort, ahova nullát írsz, azonnal el is rejti, függetlenül attól, hogy melyik oszlopba viszed be az értéket.
    Bemásolás: a lapfülön jobb klikk, Kód megjelenítése. A VB szerkesztő jobb oldalán kapott üres lapra másold be.

    Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Value = 0 Then
    Rows(Target.Row & ":" & Target.Row).Select
    Selection.EntireRow.Hidden = True
    Range("A" & Target.Row + 1).Select
    End If
    End Sub

    Kész táblázathoz más makró kell, vagy amit Lehdog ajánlott.

    [ 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.

  • ent

    őstag

    válasz Delila_1 #4732 üzenetére

    Delila, először is hatalmas köszönet, hogy foglalkozól eme témával, sok haszna van belőled piciny közösségünknek! :R :R

    Másodszor megkérlek, hogy fejtsd ki bővebben. Azt tudom, hogy ha lapfülre kattintok, kijön "kód megjelenítése". Ezt a kódot amit küldtél mi módon kell beillesztenem és hova?

    :R :R

    WEBOLDAL, WEBÁRUHÁZ, ADS ►► www.redesignteam.hu ◄◄ (Profizmus és az alacsony ár találkozása!)

  • Delila_1

    Topikgazda

    válasz VANESSZA1 #4897 üzenetére

    A makrót a laphoz rendeld: lapfülön jobb klikk, Kód megjelenítése. A kapott üres lapra másold be.

    Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column = 3 And Target.Value >= Date Then MsgBox "Figyelmeztetés"
    End Sub

    Itt a C (harmadik) oszlop értékeit figyeltetem, a Target.Column = 3 -nál írhatod át. Ha az egész lapot akarod figyeltetni, a Target.Column = 3 And részt hagyd el.

    [ 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.

  • Delila_1

    Topikgazda

    válasz Ch4os #5190 üzenetére

    Jó vicc volt, hogy az előző válaszomhoz elfelejtettem csatolni a makrót. :O :W
    A tiédben az ELSE sor beteszi az üres sort az I oszlopba, vagyis ugyanott vagy vele, mint makró nélkül.

    A lenti makrót a lapodhoz kell rendelni: lapfülön jobb klikk, Kód megjelenítése, üres lapra bemásolás.

    Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column = 5 Or Target.Column = 6 Then
    sor_1 = 2
    E = Range("E65536").End(xlUp).Row
    F = Range("F65536").End(xlUp).Row
    usor = Application.WorksheetFunction.Max(E, F)

    Range(Cells(2, 9), Cells(usor, 9)).ClearContents 'előző adatok törlése

    For fogyi = 2 To usor
    If Cells(fogyi, 5) > 0 And Cells(fogyi, 6) > 0 Then
    Cells(sor_1, 9) = Round(Cells(fogyi, 6) / (Cells(fogyi, 5) / 100), 2)
    sor_1 = sor_1 + 1
    End If
    Next fogyi
    End If
    End Sub

    Gyorsan elküldöm, mert ezelőtt 4 db pillanatnyi áramszünet megsemmisítette a válaszomat.

    Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.

  • Delila_1

    Topikgazda

    válasz mahatma #5333 üzenetére

    Annak a füzetnek az aktuális lapjához rendeld a lenti makrót (lapfülön jobb klikk, Kód megjelenítése, a kapott üres lapra másold be), amelyikből a másikba akarod másolni az adatokat.

    Private Sub Worksheet_Change(ByVal Target As Range)
    sor = Target.Row: oszl = Target.Column
    e = Target.Value
    Workbooks("Másik_füzet.xls").Sheets("Munka1").Cells(sor, oszl) = e
    End Sub

    A "Másik_füzet" és a "Munka1" helyett a természetesen saját elnevezéseidet használd.

    Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.

  • Delila_1

    Topikgazda

    válasz ALbeeeee #5551 üzenetére

    Ezt tudtommal csak makróval lehet megoldani. Rajzolsz egy téglalapot, rajta jobb klikk, Szöveg hozzáadása. Beírod a kommentet. A szerkesztőléc bal oldalán megnézed, milyen nevet rendelt hozzá az Excel (Téglalap, szóköz, és egy sorszám).
    A lapfülön jobb klikk, kód megjelenítése. Megnyílik a VB szerkesztő. A jobb oldalon kapott üres lapra bemásolod:

    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Address = "$B$2" Then ActiveSheet.DrawingObjects("Téglalap 5").Visible = True
    If Target.Address = "$C$2" Then ActiveSheet.DrawingObjects("Téglalap 5").Visible = False
    End Sub

    Ennek hatására, ha a B2 cellára kattintasz, megjelenik a kommented ott, és akkora méretben, ahol és ahogy rajzoltad. A C2-re kattintva eltűnik (ezt be is írhatod a szövegbe, ha más is használja a fájlt).
    A makróban a Téglalap 5 helyett 2 helyen írd be a saját objektumod nevét. Akár ellipszist is rajzolhatsz, csak a makróban a megfelelő nevet add meg.

    Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.

  • Delila_1

    Topikgazda

    válasz #5821 üzenetére

    Beteszem a kétféle megoldást. Mindegyiknél a beviteli cella az A1, a 3 másik pedig A3, A4, és A5.
    Az első makró vagy a makrók közül indítható, vagy egy gombhoz rendeled. Bevitele: Alt+F11, Insert/Module, a kapott üres oldalra másold be.

    Sub ktsg_elosztás()
    Dim sor
    For sor = 3 To 5
    Cells(sor, 2) = Cells(sor, 2) + Int(Cells(1) / 3)
    Next
    End Sub

    A másik a bevitelt követően automatikusan hajtódik végre. Ennek a bevitele: Lapfülön jobb klikk, Kód megjelenítése, a kapott üres oldalra másold be.

    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim sor
    If Target.Address = "$A$1" Then
    For sor = 3 To 5
    Cells(sor, 2) = Cells(sor, 2) + Int(Target.Value / 3)
    Next
    End If
    End Sub

    Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.

  • Delila_1

    Topikgazda

    válasz szjoci #6460 üzenetére

    A laphoz rendeld ezt a makrót – lapfülön jobb klikk, Kód megjelenítése. A jobboldalon kapott üres lapra másold be.

    Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$C$1" Then
    Selection.AutoFilter Field:=1, Criteria1:=Cells(1, 3) & "*", Operator:=xlAnd
    End If
    End Sub

    A $C$1 helyett annak a cellának a címét add meg, ahol a kezdő betű(ke)t akarod megadni.

    Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.

  • Delila_1

    Topikgazda

    válasz kalasz #6968 üzenetére

    A laphoz kell rendelned a rövid kis makrót:

    Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$A$1" Then Cells(2) = Date
    End Sub

    Laphoz rendelés: lapfülön jobb klikk, kód megjelenítése, a jobb oldalon kapot üres lapra másold be.

    Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.

  • Delila_1

    Topikgazda

    válasz Azura #7368 üzenetére

    Azt hittem, már mindenki szabadságra ment.

    A képlet nem látszik, ha a cellaformázás Védelem fülén bejelölöd a Rejtett opciót, de ez csak akkor lép érvénybe, mikor a lapot védetté tetted.

    A kitörölhetetlen képlet makróját a laphoz kell rendelned (lapfülön jobb klikk, Kód megjelenítése.

    Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column = 3 And Target.Value = "" Then
    Cells(Target.Row, Target.Column).Formula = "=A" & Target.Row & "*B" & Target.Row
    End If
    End Sub

    Nem ismerem a képletedet, ez a kis makró a C oszlopba írja be törlés esetén az =A1*B1 képletet, illetve minden sorban a saját sorára vonatkoztatva a szorzást. Írd meg, melyik oszlopodban milyen képletet kell újraírni törléskor.

    Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.

  • hopean

    csendes tag

    Szevasztok!

    Kis segítséget kérnék:

    Adott egy dokumentum, amin 1 napja dolgozom:
    Jobb klikk a worksheet fülön, Kód megjelenítése, aztán ezt beilleszt:

    Private Sub Worksheet_Change(ByVal Target As Range)
    MsgBox "Cell " & Target.Address & " has changed."
    End Sub

    Nem működik. Bármely cellát módosítom a munkalapon, dobnia kéne egy MsgBox-ot.

    Ha kreálok egy teljesen új doksit, beteszem ugyanezt a kódot, ott működik gond nélkül.
    Mi lehet a baja? :F

  • Delila_1

    Topikgazda

    válasz motinka #7531 üzenetére

    Ha már Fire megígérte, tálalom a makrót. :D

    Tegyél autoszűrőt az A11:I11 tartományba, ahogy Fire is írta.

    A lapfülön jobb klikk, Kód megjelenítése. Bejutottál a VB szerkesztőbe, a jobb oldalon kapott üres lapra másold be:

    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    If Target.Column = 4 And Target.Row > 2 And Target.Row < 9 Then
    Range("A11").Select
    Selection.AutoFilter Field:=5, Criteria1:=Cells(Target.Row, 1)
    Selection.AutoFilter Field:=9, Criteria1:="="
    End If

    If Target.Address = "$H$1" Then
    Selection.AutoFilter Field:=5
    Selection.AutoFilter Field:=9
    End If
    End Sub

    Ezután a D3:D8 tartomány bármelyik cellájára duplán kattintva a lenti sorok közül azok látszanak, amiket kértél.
    Beleírtam, hogy a H1 duplaklikkjére minden adat látsszon az alsó táblázatban. Írhatsz is valami erre utaló szöveget a H1-be.

    Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.

  • Delila_1

    Topikgazda

    válasz motinka #7601 üzenetére

    Itt a makró, elég jól látszik belőle, melyik adatokat kell átírnod. A Case utasításokból az End Select sor elé akárhány újat beszúrhatsz. Ennek alapján eldöntheted, mit akarsz később a további adatokhoz idomítani, a különböző nézeteket, vagy a makrót.

    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim kezd As String, vég As String

    If Target.Address = "$A$1" Then
    Select Case Cells(1)
    Case "Csaba"
    kezd = "D": vég = "F": GoTo Rejt
    Case "János"
    kezd = "G": vég = "I": GoTo Rejt
    Case "Ferenc"
    kezd = "J": vég = "L": GoTo Rejt
    Case "László"
    kezd = "M": vég = "P": GoTo Rejt
    End Select
    End If
    Exit Sub

    Rejt:
    Columns("D:O").Hidden = True
    Columns(kezd & ":" & vég).Hidden = False
    End Sub

    A makrót a kérdéses laphoz kell rendelned. Lapfülön jobb klikk, Kód megjelenítése, a VB szerkesztőben jobb oldalon kapott üres lapra másold be.

    Szerk.: a Columns("D:O").Hidden = True sorban a kettőspont után nem nulla van, hanem O betű, az utolsó felhasznált oszlopod betűjele.

    [ 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.

  • Delila_1

    Topikgazda

    válasz föccer #7719 üzenetére

    Kicsit sok a kérdés egyszerre. :DD
    Kezdem a közepén.

    Adott laphoz kód elővarázsolása: lapfülön jobb klikk, Kód megjelenítése. Vagy: Alt+F11 (VB editor), bal oldalon lapnévre klikk.

    Nyomógomb
    Kétféle van, az Űrlapok, vagy a Vezérlők eszközkészlete csoportból. Előcsalásuk: ikonsoron jobb klikk, a felsorolásból kiválasztod a megfelelőt.

    Nem írom tovább, mert nem tudom, hányas verziót használsz. A fentiek a 2003-ra vonatkoznak.

    Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.

  • Delila_1

    Topikgazda

    válasz Jarod1 #7829 üzenetére

    A laphoz kell rendelned a makrót (lapfülön jobb klikk, Kód megjelenítése, a jobb oldalon kapott üres lapra másold be):

    Private Sub Worksheet_Change(ByVal Target As Range)
    Rows(Target.Row).Interior.ColorIndex = 4
    End Sub

    A fenti makró bármelyik cellába írt szövegnél zöldre festi a teljes sor hátterét. Ha azt akarod, hogy egy bizonyos oszlopba történt beírásra zöldítsen, akkor egy feltételhez kell rendelni a szín megadását.

    Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column = 2 Then Rows(Target.Row).Interior.ColorIndex = 4
    End Sub

    Ez a makró csak akkor színez, ha a B (2.) oszlopba viszel be valamilyen értéket (szöveg, szám, dátum, logikai). A Target.Column értékével add meg a a megfelelő oszlopot.

    Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.

  • Delila_1

    Topikgazda

    válasz Sickboy25 #7963 üzenetére

    Na még egy, hogy biztos legyen a figyelmeztetés.

    Az A1 cellát formázd félkövérre, és piros betűszínre. A laphoz rendeld a nyúlfarknyi makrót (lapfülön jobb klikk, Kód megjelenítése, a VB szerkesztőben a jobb oldalon kapott üres felületre kell bemásolni).

    Private Sub Worksheet_Activate()
    If Day(Date) < 11 Then
    Cells(1) = 10 - Day(Date) & " nap múlva add le a jelentést"
    Else
    Cells(1) = ""
    End If
    End Sub

    Mikor a lapra lépsz, beírja, vagy 10-e után törli a hátralévő napokat.

    Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.

  • Delila_1

    Topikgazda

    válasz bnorci71 #8225 üzenetére

    Tényleg elsiklottunk a régi kérdésed fölött.

    A laphoz kell rendelned egy makrót -> lapfülön jobb klikk, Kód megjelenítése. A képernyő jobb oldalán kapott üres lapra másold be:

    Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column < 28 And Target.Row >= 2 And Target.Row < 15 And _
    Target.Column Mod 2 <> 0 Then
    Range("A1:AI14").Sort Key1:=Range("AI2"), Order1:=xlDescending, Key2:= _
    Range("AH2"), Order2:=xlDescending, Header:=xlYes, OrderCustom:=1, _
    MatchCase:=False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, _
    DataOption2:=xlSortNormal
    End If
    End Sub

    Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.

  • Delila_1

    Topikgazda

    válasz Swen_N #8752 üzenetére

    Itt egy másik megoldás, nem én követtem el, csak átvettem. A laphoz kell rendelni (lapfülön jobb klikk, Kód megjelenítése. Ezzel bejutottál a VB szerkesztőbe, a jobb oldalon kapott üres lapra kell bemásolni. A cellára lépve megkapod a "célkereszt"-et.

    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Cells.FormatConditions.Delete
    With Target
    With .EntireRow
    .FormatConditions.Add Type:=xlExpression, Formula1:="1"
    With .FormatConditions(1)
    With .Borders(xlTop)
    .LineStyle = xlContinuous
    .Weight = xlThin
    .ColorIndex = 5
    End With
    With .Borders(xlBottom)
    .LineStyle = xlContinuous
    .Weight = xlThin
    .ColorIndex = 5
    End With
    .Interior.ColorIndex = 20
    End With
    End With
    With .EntireColumn
    .FormatConditions.Delete
    .FormatConditions.Add Type:=xlExpression, Formula1:="1"
    With .FormatConditions(1)
    With .Borders(xlLeft)
    .LineStyle = xlContinuous
    .Weight = xlThin
    .ColorIndex = 5
    End With
    With .Borders(xlRight)
    .LineStyle = xlContinuous
    .Weight = xlThin
    .ColorIndex = 5
    End With
    .Interior.ColorIndex = 20
    End With
    End With

    .FormatConditions.Delete
    .FormatConditions.Add Type:=xlExpression, Formula1:="1"
    .FormatConditions(1).Interior.ColorIndex = 36
    End With
    End Sub

    Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.

  • Delila_1

    Topikgazda

    válasz Swen_N #8808 üzenetére

    Az X, vagy x beírása az első sorba hozza működésbe a makrót.

    Lapfülön jobb klikk, Kód megjelenítése. A VB szerkesztőbe jutsz, jobb oldalra másold be a makrót. Az Interior.ColorIndex = 3 -nál a 3 (piros) helyett megadhatsz más számmal más színt.

    Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Row = 1 And UCase(Target.Value) = "X" Then _
    Columns(Target.Column).Interior.ColorIndex = 3
    If Target.Row = 1 And UCase(Target.Value) = "" Then _
    Columns(Target.Column).Interior.ColorIndex = xlNone
    End Sub

    Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.

  • Delila_1

    Topikgazda

    válasz Lackukac #8846 üzenetére

    Két makró lehetővé teszi, hogy az A oszlopot bővítve, vagy szűkítve minden külön gombnyomás nélkül létrejöjjön a B oszlopban a szűrt listád.

    Az elsőt a laphoz kell rendelned: lapfülön jobb klikk, Kód megjelenítése, a VB szerkesztőben (ahova most bejutottál) a jobb oldalon kapott üres lapra másold be.

    Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column = 1 Then
    Application.EnableEvents = False
    Range("J1") = Range("A65000").End(xlUp).Row
    Columns("B:B") = ""
    Lista_Szűrő
    Application.EnableEvents = True
    End If
    End Sub

    A szerkesztőben maradva bal oldalon kattints a füzeted nevére. Insert menü, Module. Kapsz bal oldalon egy Module1 nevű modult, ehhez másold be jobb oldalra a második makrót.

    A J1 cellába írja be a makró az A oszlop mindenkori utolsó sorát, és felhasználja a szűrésnél.

    Sub Lista_Szűrő()
    ActiveWorkbook.Names.Add Name:="Lista", RefersToR1C1:= _
    "=OFFSET(Munka1!R1C1,0,0,Munka1!R1C10,1)"
    Range("Lista").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range( _
    "D1:D2"), CopyToRange:=Range("B1"), Unique:=False
    End Sub

    Az "=OFFSET(Munka1!R1C1,0,0,Munka1!R1C10,1)" sorban a félkövérrel írt munkalap nevet írd át a saját lapod nevé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.

  • Delila_1

    Topikgazda

    válasz varikahun #10024 üzenetére

    A lapfülön jobb klikk, Kód megjelenítése.
    Bejutottál a VB szerkesztőbe, jobb oldalon kaptál egy üres felületet, ide másold be:

    Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column = 3 And Target = "OK" Then _
    Range(Cells(Target.Row, 1), Cells(Target.Row, 15)).Interior.ColorIndex = 6
    If Target.Column = 16 And Target = "Worn" Then _
    Range(Cells(Target.Row, 1), Cells(Target.Row, 15)).Interior.ColorIndex = 3
    End Sub

    Ez a C oszlopban megadott OK-ra sárga hátteret ad, a P-be beírt Worn-re pirosat.
    A színeket a makróban a 6, ill. a 3 módosításával tudod változtatni.

    Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.

  • Delila_1

    Topikgazda

    válasz motinka #10390 üzenetére

    A kérdéses laphoz rendelted a makrót?
    Lapfülön jobb klikk, Kód megjelenítése. Bejutottál a VB szerkesztőbe, a jobb oldalon kapott üres területre másold be a makrót.

    Ha nem megy, küldd el a fájlt.

    Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.

  • Delila_1

    Topikgazda

    válasz gigi183 #10474 üzenetére

    Az Nts oszloptól balra lévő hármat fixen írod be, vagy valami képlet adja az értéküket?
    Ha fixen, az alábbi egyszerű kis makró megoldja a lenullázást.

    A makrót ahhoz a laphoz kell rendelned, amelyiken ezt a műveletet végre akarod hajtani. Lapfülön jobb klikk, Kód megjelenítése. Bejutottál a VB szerkesztőbe, a jobb oldalon kapott üres lapra kell bemásolnod.

    Private Sub Worksheet_Change(ByVal Target As Range)
    Application.EnableEvents = False
    If Target.Column = 5 And Target = 0 Then
    Dim sor%, oszlop%
    sor% = Target.Row: oszlop% = Target.Column
    Range(Cells(sor, oszlop - 2), Cells(sor, oszlop - 1)) = ""
    End If
    Application.EnableEvents = True
    End Sub

    A csatolt képen nem látszik, milyen betűjelű oszlopban van az Nts. A makróban úgy vettem, hogy az E (ötödik) oszlop tartalmazza. Bemásolás után az If Target.Column = 5 And Target = 0 Then sorban írd át az 5-öt a megfelelő értékre.

    A füzetedet másként, makróbarátként kell mentened, a kiterjesztése meg fog változni xlsm-re. Az Excelben is módosítanod kell a biztonsági beállításokat, ha eddig nem volt makrót tartalmazó füzeted.

    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

    válasz pitman #11229 üzenetére

    A kérdésed első részét légy szíves illusztráld képpel és a kérdéses fv-nyel mert így az az érzésem, hogy nagyon messziről fogunk nekiindulni.

    A változtatott cella sorát a Target.Row-val az oszlopát a Target.Column-nal tudod lekérdezni.
    Pl:

    Private Sub Worksheet_Change(ByVal Target As Range)
    MsgBox "A(z) " & Target.Row & ". sor és a(z) " & Target.Column & ". oszlop" & Chr(10) & " metszéspontjában lévő cella módosult!"
    End Sub

    Arra figyelj, hogy ezt nem új modulba kell másolni, hanem ahhoz a munkalaphoz kell rendelni amin a változást akarod figyelni. Jobbkatt a munkalap fülön majd Kód megjelenítése opció.

    Biztos van más módszer is, én így szoktam csinálni.

  • m.zmrzlina

    senior tag

    válasz Padam #11372 üzenetére

    Van rá igény, de lehet a 2-es munkalapon is a dolgozók neve.

    Az nem gond, ha másik munkalapon van a név mert az érvényesítésnél úgy láttam nevet adtál a tartománynak és úgy használtad. Használd a #11367-ben lévő változatot az kezeli azt a problémát, hogy csak a B3:C18 tartomány változásainál lép működésbe a makró azon kívül nem ellenőrzi az adatbevitelt.

    Viszont létrehoztam egy makrót és beírtam amit javasoltál, de továbbra is enged két azonost kiválasztani.

    Szerintem az lehet a gond, hogy nem a munkalaphoz rendelted a makrót. Ne azt csináld, hogy Insert>Module és oda másolod a makrót, hanem jobkatt a munkalapfülön ott Kód megjelenítése opció. Itt van leírva néhány hsz-ban, hogy hogyan kell csinálni. (köszi Delila_1 :) )

    Illetve arra van tipped, hogyan lehetne megcsinálni, hogy, ha a következő napoknál is működjön a dolog?

    A következő napok adatai hol vannak elhelyezve?

  • m.zmrzlina

    senior tag

    válasz jani-wan #12346 üzenetére

    Ez egy elég buta kód, de kiindulásnak jó lesz.

    Private Sub Worksheet_Change(ByVal Target As Range)

    For i = 1 To 20
    If Cells(1, i).Value <> "igen" Then Sheets("Munka1").Columns(i).EntireColumn.Hidden = True Else Sheets("Munka1").Columns(i).EntireColumn.Hidden = False

    Next

    For j = 1 To 20
    If Cells(i, 1).Value <> "igen" Then Sheets("Munka1").Rows(i).EntireRow.Hidden = True Else Sheets("Munka1").Rows(i).EntireRow.Hidden = False
    Next

    End Sub

    Ezt a kódot viszont a másik munkalaphoz kell rendelni (amelyiken beállítod hogy mely oszlopok érdekelnek az elsőn) úgy ahogy az előbb nem jött össze duplakattal, vagy lent a munkalap fülön jobkatt majd kód megjelenítése.

    Azt feltételezi, hogy az első oszlopban és az első sorban (A1, A2, A3..... illetve A1, B1, C1...)cellákba írt "igen" szóval állítod be, hogy melyik oszlopra és melyik sorra van szükséged a másik munkalapon (az én esetemben a neve Munka1).
    Ha bármelyik cellát átírod az első sorban vagy oszlopban "igen"-re (vagy kitörlöd a benne lévő "igen"-t) akkor lefut a kód és a másik munkalapon csak az "igen"-es sorok és oszlopok megfelelői fognak látszani. Ha nem "igen"-re írod át akkor is lefut csak nem észlelsz semmi változást.

    Na ez most jó bonyolult de kérdezz bátran ha valami nem világos!

    Mostani formájában 20 oszlopot és 20 sort tud kezelni de ez ezerféle módon variálható.

    [ Szerkesztve ]

  • m.zmrzlina

    senior tag

    válasz jani-wan #12360 üzenetére

    Bocs nem voltam egyértelmű, és összekeverted a két dolgot.

    Tehát ha jól értem van (legalább) két munkalapod. Az egyik amin az adatokat akarod ellenőrizni a másik amin beállítod, hogy mely oszlopokra van szükséged.

    Van még a következő kód (most csak erre lesz szükséged semmi másra):

    Private Sub Worksheet_Change(ByVal Target As Range)

    For i = 1 To 60
    If Cells(2, i).Value <> "igen" Then Sheets("Munka1").Columns(i).EntireColumn.Hidden = True Else Sheets("Munka1").Columns(i).EntireColumn.Hidden = False

    Next

    End Sub

    Ezt a kódot a beállító munkalapodhoz rendeled úgy, hogy a lapfülön jobbkatt majd Kód megjelenítése opciót választod. Az így kapott VBA mezőbe bemásolod a kódot úgy, hogy a Munka1 munkalapneveket átírod a saját munkalapod nevére. Nem amelyik fülén kattintottál az előbb, hanem azéra amin az adatokat fogod ellenőrizni.

    Ebbe a munkafüzetbe semmi más kód nem kell!

    [ Szerkesztve ]

  • dancers

    csendes tag

    válasz Delila_1 #12520 üzenetére

    Szia!
    Ne haragudj a zavarásért, már jó pár megoldást adtál nekem a pcforumon .
    Múltkor kérdeztem egyet,
    dancers kérdése privát | 2012.01.06. 10:46 | válasz
    Sziasztok!

    Azt szeretném excelbe, hogy ha A1 cella értéke 1 akkor jelenjen meg egy kép, ha a cella értéke 2 akkor jelenjen meg egy másik kép. köszönöm

    Delila megoldása (50 pont) előzmény | privát | 2012.01.06. 12:51 | válasz
    A laphoz kell rendelned ezt a rövid makrót: lapfülön jobb klikk, kód megjelenítése, a jobb oldalon kapott üres lapra másold be.

    Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$A$1" Then
    If Target = 1 Then
    ActiveSheet.Shapes("Picture 1").Visible = True
    ActiveSheet.Shapes("Picture 2").Visible = False
    End If
    If Target = 2 Then
    ActiveSheet.Shapes("Picture 1").Visible = False
    ActiveSheet.Shapes("Picture 2").Visible = True
    End If
    End If
    End Sub

    A "Picture 1" és "Picture 2" nevében a számot írd át a saját képeid sorszámára.

    dancers hozzászólása Delila (12:51) részére előzmény | privát | 2012.01.06. 13:12 | válasz
    Ne haragudj, hogy ilyen értetlen vagyok, de hogyan kell a képeimnek sorszámot adni?
    köszönöm a segítséget

    Delila hozzászólása dancers (13:12) részére előzmény | privát | 2012.01.06. 13:16 | válasz
    Mikor beviszed a képet, a szerkesztőléc bal oldalán megjelenik a neve, sorszámmal együtt, pl. "Kép 1".

    Az az igazság, hogy nem tudok programozni, és akárhogy is próbálkoztam, nem sikerült megcsinálnom.Beillesztettem amit írtál, de nem tudom a képeket hogyan kell hozzá kapcsolni.Kérlek segíts, ha van egy kis időd, mert amit kaptam feladatot excelben, abból már csak ez hiányzik.

    köszönöm szépen

  • Delila_1

    Topikgazda

    válasz Ripitxx #12763 üzenetére

    Valószínű, hogy nem a laphoz rendelted a makrót.
    Lapfülön jobb klikk, kód megjelenítése. Ezzel bejutottál a VB szerkesztőbe. A jobb oldali üres lapra másold be a makró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.

  • Fire/SOUL/CD

    félisten

    válasz Gabriel_86 #12941 üzenetére

    Ja és még annyit, hogy ezt eseményhez is rendelheted, azaz nem kell külön gomb, hogy lefusson a makró.

    Nyomsz egy jobb egeret a Chart-ot tartalmazó lapfülön(ami az esetedben Munka1 nevű) , majd Kód megjelenítése és jobb oldalra meg bemásolod ezt

    Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$B$1" Then Lekerekítetttéglalap_Kattintás
    End Sub

    [ 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 Tyren #14673 üzenetére

    2007-esben próbáltam ki.

    Fejlesztőeszközök | Vezérlők | Beszúrás | ActiveX-vezérlők. Rákattintasz a jobb alsó sarokban lévő További vezérlők ikonra, mire kapsz róluk egy felsorolást. Ezek közül a Naptár vezérlőelem kell neked. A kapott szálkereszttel négyszöget rajzolsz. Jobb klikkre kapsz egy tulajdonságok ablakot, ahol mindenfélét formázhatsz rajta.
    A menüszalagon kikapcsolod a Tervező módot.

    A lapfülön jobb klikk, Kód megjelenítése. A VB szerkesztőbe jutottál, itt a jobb oldali üres lapra másold be a makrót.

    Két sort írok bele, amik közül csak az egyiket hagyhatod meg.
    1. A lapodon lévő aktuális sor A oszlopába írja be a naptárban kiválasztott napot. Ezt az oszlopot a Cells(Selection.Row,1) 1-ese határozza meg. Kettesre átírva az akt. sor B oszlopába ír, és így tovább.

    2. A lapod bármelyik celláján állsz, kiválasztod a vezérlőn a dátumot, erre az aktuális celládban megjelenik a dátum.

    Private Sub Calendar1_Click()
    Cells(Selection.Row, 1) = Me.Calendar1.Value
    Selection = Me.Calendar1.Value
    End Sub

    Egy másik makrót is írj a fenti alá (vagy fölé).

    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Column = 3 Then
    Me.Calendar1.Visible = True
    Else
    Me.Calendar1.Visible = False
    End If
    End Sub

    Ennek az a feladata, hogy ha a C oszlop valamelyik cellájára klikkelsz, megjelenik a naptár vezérlő, más oszlopra lépve eltűnik. A C oszlopot a Target.Column=3 hármasa határozza meg.

    [ 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.

  • lappy

    őstag

    válasz Töki bácsi #16189 üzenetére

    A laphoz kell rendelned ezt a rövid makrót: lapfülön jobb klikk, kód megjelenítése, a jobb oldalon kapott üres lapra másold be.

    Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$A$1" Then
    If Target = 1 Then
    ActiveSheet.Shapes("Picture 1").Visible = True
    ActiveSheet.Shapes("Picture 2").Visible = False
    End If
    If Target = 2 Then
    ActiveSheet.Shapes("Picture 1").Visible = False
    ActiveSheet.Shapes("Picture 2").Visible = True
    End If
    End If
    End Sub

    A "Picture 1" és "Picture 2" nevében a számot írd át a saját képeid sorszámára.

    Bámulatos hol tart már a tudomány!

  • UBO

    csendes tag

    válasz bozsozso #16711 üzenetére

    Delila_1 megoldása tökéletes de ha már írtam egy makrót rá akkor megosztom én is :)
    Így használd:
    Jobb gomb a fülön - kód megjelenítése és oda bemásolod ezt:

    Sub tolt()
    Dim o
    Dim i
    o = ActiveCell.Column
    For i = 2 To ActiveSheet.UsedRange.Rows.Count
    If Cells(i, o).Value = "" Then
    Cells(i, o).Select
    Cells(i, o).Value = ActiveCell.Offset(-1, 0).Range("A1").Value
    End If
    Next i
    End Sub

    Alkalmazása rajzolsz egy téglalapot bárhova, jobb gomb rá - makró hozzárendelése és kiválasztod a tolt -t utána már csak oda kattintasz az egyik oszlopra ahol akarod h megcsinálja és kattinttasz a téglalapra :)

  • Excelbarat

    tag

    válasz Jorus #16838 üzenetére

    Hi ez a kis makró talán segíthet :)
    A munkalap fülére jobb gomb kód megjelenítése és oda beírod.

    Sub hasonlit()
    Dim sor1
    Dim sor2

    For i = 1 To ActiveSheet.UsedRange.Rows.Count
    talalt = False
    For j = 1 To ActiveSheet.Cells(Rows.Count, "B").End(xlUp).Row
    If Left(Cells(i, 1), 4) = Left(Cells(j, "B"), 4) Then
    sor1 = ActiveSheet.Cells(Rows.Count, "C").End(xlUp).Row + 1
    Cells(i, 1).Copy Destination:=Cells(sor1, "C")
    talalt = True
    End If
    Next j
    If talalt = False Then
    sor2 = ActiveSheet.Cells(Rows.Count, "C").End(xlUp).Row
    Cells(sor2, "C") = Cells(sor2, "C") & " " & Cells(i, 1)
    End If
    Next i
    End Sub

    Ehhez annyi segítséget kell nyújtanod hogy a "B" oszlop soraiba beírod hogy mik legyenek az új sor szavai. Tehát felsorolsz minden olyan szót ami új sorral kezdődjön (tehát ne fűzze az előzőhöz). (legalább az első 4 karaktert! és fontos a kis és NAGY betű)
    Te esetedben így néz ki:
    B1: Path
    B2: Owner
    B3: Access
    B4: BUILT
    B5: NT AUTH

    A "C" oszlopban pedig látni fogod az eredményt ha megfelel törlöd az A és B oszlopot utána
    Még egyszer megjegyzem fontos, hogy a nagybetűt nagy betűvel a kis betűt kis betűvel! :)

  • Excelbarat

    tag

    válasz atillaahun #16840 üzenetére

    Hi! Írtam egy makrót:

    Sub torol()
    For i = 1 To ActiveSheet.UsedRange.Rows.Count
    If WorksheetFunction.CountIf(Range(Cells(1, 1), Cells(ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Row, "A")), Cells(i, "A")) > 1 Then
    a = Cells(i, "A").Value
    For j = ActiveSheet.UsedRange.Rows.Count To 1 Step -1
    If Cells(j, "A").Value = a Then
    Cells(j, "A").EntireRow.Delete
    End If
    Next j
    End If
    Next i
    End Sub

    Kihangsúlyozom hogy ez minden olyan SORT töröl amiben az A oszlopban van azonos és nem hagy egyet sem. (ergo aminél talál legalább kettőt abból egyet sem hagy!)
    használata:
    lapfülre jobb gomb - kód megjelenítése oda bemásolod és nyomsz egy F5-t (vagy felül a zöld kis play nyilacskára katt). és ha minden jól ment akkor csak egyedi értékek maradtak.
    Azért mielőtt megcsinálod csinálj egy másolatot a fájlból mert a makrókat nem lehet visszavonni! (amit lefuttatsz és változtat(töröl) azt már nem tudod előhozni. (persze úgy igen h nem mented el a végeredményt, bezárod és újra megnyitod)

  • Excelbarat

    tag

    válasz sarvari #17013 üzenetére

    Hi!
    Igazából nagyon nem akartam elbonyolítani így a makró a vastagság és szélesség oszlopokat tölti fel a súly értéket pedig függvénnyel már meg lehet oldani.
    1. lépés Beírod ugyan arra a munkalapra a fejléceket pl A11: Név, B11: Szám, C11:Vastagság, D11: szélesség
    2. makrót elindítod. Működése: a vastagság értékeket beírja annyiszor egymás alá ahány szélesség van. (megkeresi adott esetben C oszlop legalsó értékét és az alá tölti, ezért kell C,D11-be pl beírni a fejlécet, mert az a mérvadó). Majd a szélesség értékeket transzponálja D oszlopba egymás alá addig amíg C oszlopban van érték.
    3. a Súly oszlopba beírod ezt a képletet és végigmásolod (katt a jobb alsó sarkában lévő kis fekete pöttyre 2x)
    =INDEX($A$5:$D$8;HOL.VAN(C12;$A$5:$A$8);HOL.VAN(D12;$A$5:$D$5)) a te példád szerint vannak a hivatkozások! a dollár jelekre figyelj!
    4. makrót törölheted így nem kell makróbarát fájlként elmentened.

    Futtatás előtt egy másolati példányon teszteld mert makró általi módosításokat nem lehet visszavonni!
    Íme a makró:
    Sub tolt()
    Dim darab
    Dim kezd
    Dim ertek
    darab = 3 - 1
    '3-at módosítsd, hogy hány db szélesség érték van(a példádban 10,20,30 tehát 3)!
    For i = 6 To 8
    'Vastagság kezdő(6) és végső(8) értékének sorszámait módosítsd!
    ertek = Cells(i, "A").Value 'A oszlop i sorait írja be megadott számszor az új táblába
    kezd = ActiveSheet.Cells(Rows.Count, "C").End(xlUp).Row + 1
    Range(Cells(kezd, "C"), Cells(kezd + darab, "C")).Value = ertek
    Next i
    'vastagság oszlop feltöltve
    Range(Cells(5, "B"), Cells(5, "D")).Copy 'módosítsd a szélesség adatok kezdő és végső oszlopát
    kezd = ActiveSheet.Cells(Rows.Count, "D").End(xlUp).Row + 1
    Do While Cells(kezd, "C").Value <> ""
    Cells(kezd, "D").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Transpose:=True
    kezd = ActiveSheet.Cells(Rows.Count, "D").End(xlUp).Row + 1
    Loop
    Application.CutCopyMode = False
    'feltöltve a szélesség oszlop
    End Sub

    Alkalmazása: jobb gomb a lapfülre kód megjelenítése oda bemásolod és F5-tel elindítod (vagy felül a zöld play ikonra katt)
    A név és a szám értékeket pedig = jellel végigmásolod.

  • Mutt

    aktív tag

    válasz oxox #17434 üzenetére

    Hello,

    ...ugorjon, tehat a kovetkezo sor elejere.

    Több megoldás lehetséges, ha esetleg egy fel nem soroltad oldottad meg, akkor oszd meg velünk.

    1. Ha előre kijelölöd a beviteli tartományt, akkor TA-al csak ebben a tartományban tudsz mozogni. A kijelölés utolsó oszlopát elérve a következő sorra fog ugrani és nem a mellette lévő cellába.

    2. Ha az adatsort Táblázatnak definiálod (Beszúrás -> Táblázat), akkor is a fentiek szerint működik. Ez csak 2007-es vagy frissebb verzióval megy.

    3. Ha a munkalap nevén jobb klikket nyomsz válaszd a Kód megjelenítése opciót (ez az Excel VBA szerkesztőjét indítja). Itt a munkalap ScrollArea értékét állítsd be. A hátránya, hogy egyetlen más cellába a területen kívül nem lehet írni.

    4. Nem tökéletes megoldás, de akár a Korrektúra -> Lapvédelem is működik. Előtte a szükséges cellákról vedd le a védelmet. A gond, hogy a TAB ilyenkor új sorba nem ugrik, de a kitöltött cellák között sorrendben nozog.

    5. Makróval is elérhető a Worksheet_SelectionChange eseményen keresztül.

    üdv.

    A tanácsaimat ingyen adom. Ha nem tetszik, akkor kérlek ne kritizáld! / https://github.com/viszi/codes/tree/master/Excel

  • Delila_1

    Topikgazda

    válasz petir #18037 üzenetére

    Akkor csináljuk meg automatikusra.
    A lenti makrót a lapodhoz kell rendelned. Lapfülön jobb klikk, kód megjelenítése. Bejutottál a VB szerkesztőbe, ott is annak a lapnak a kódlapjára, ahonnan indultál. Jobb oldalon látsz egy szép nagy üres felületet, oda másold be.

    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim usor As Long
    If Target.Address = "$G$1" Then
    usor = Range("A" & Rows.Count).End(xlUp).Row
    If IsEmpty(Target) Then
    ActiveSheet.Range("$A$1:$E$" & usor).AutoFilter Field:=1
    Else
    ActiveSheet.Range("$A$1:$E$" & usor).AutoFilter Field:=1, Criteria1:=Target
    End If
    End If
    End Sub

    Arról beszéltünk, hogy 5 oszlopod van. Az első a címsor, ide tegyél be autoszűrőt. A tartományod A1:E(valahány).
    Ha a G1 cellába beírod a sorszámot, a szűrő azt az egy rekordot mutatja, ahol az A oszlopban ez a szám szerepel. Beírod az eredményt, adhatod a következő sorszámot a G1 cellába.
    Az összes rekord mutatásához töröld a G1 tartalmát.

    [ 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.

  • Delila_1

    Topikgazda

    válasz Vizes Tomi #18734 üzenetére

    Szia!

    A Látható lap fülén jobb klikk, Kód megjelenítése. Ezzel bejutottál a VBA szerkesztőjébe. Látod, hogy bal oldalon a lapok felsorolásánál a Látható lapod van kijelölve. A jobb oldali üres területre másold az első makrót.

    Bal oldalon a füzeted nevén állva az Insert menü Module almenüjére kattints, kapsz egy új modult, aminek Module...n lesz a neve. Erre kattintva jobb oldalon ismét üres területet kapsz, ide másold a második makró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.

  • Mutt

    aktív tag

    válasz magyor #18894 üzenetére

    Hello,

    ..hol lehet beállítani, hogy a munkalap 1 048 576 sor, 16 384 oszlop méretű legyen
    Excel 2007-től bevezetett xlsx (illetve xlsb, xlsm, stb) formátumban már ez az alapértelmezett maximális sor és oszlopszám. Ha egy régebbi formátumban van a fájlod, akkor a fájlt megnyitva Excel 2010-ben is marad a 65k sor és 256 oszlop limited. Mentés másként opcióval új formátumba mentve eltüntethetők a korlátozások.

    ...lehetséges-e az adott intervallumon (65536-1 048 576) belül egy tetszés szerinti sorérték beállítása?
    Alapértelmezettként nem tudod beállítani, de fájlonként és munkalaponként a ScrollArea értékkel tudod korlátozni a használható területet (makróban/grafikus elemekkel ezen területen túl is tudsz mozogni).

    Jobb klikk a munkalapon, majd Kód megjelenítése opcióval elindul a VBA szerkesztő. Bal oldalt alul a Properties ablakon belül a ScrollArea-hoz kell beírnod az engedélyezett tartományt. Ha nincs properties ablakod, akkor F4-el megjelenik. Pár példa:
    $A$1:$E$500 első 500 sor és 5 oszlopba lehet írni
    $D:$D csak a D-oszlop használható
    $1:$100 csak az első 100 sor használható

    üdv

    A tanácsaimat ingyen adom. Ha nem tetszik, akkor kérlek ne kritizáld! / https://github.com/viszi/codes/tree/master/Excel

Új hozzászólás Aktív témák