Keresés

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

  • Mutt

    senior tag

    válasz bonifa333 #54394 üzenetére

    Szia,

    A topic összefoglaló végén van ingyenesen elérhető magyar nyelvű könyv, nézd meg.
    Én John Walkenbach könyvét tudom javasolni, biztos vannak újabbak is.

    Richard Rost-nak jók a videói, talán a VBA is hasznos.
    Paul-nak is sok hasznos videója van, inkább már haladó szint.

    A fentiek mellett a beépített makró rögzítőt javaslom, mert jó kódot készít, csak nem hatékonyat/univerzálisat. Túl sok a .Select / Selection részt tesz bele, ezeket lehet gyomlálni.
    A VBA egyszerű programozási nyelv, könnyen el lehet vele indulni.

    Azonban az elmúlt években egyre több mindent meg lehet csinálni VBA nélkül is Excelben.
    Régebben fájlokat összefűzni VBA-val lehetett, ma már (igazából 2016-tól) Power Query javasolt.
    Régebben egyedi függvényeket (UDF = user defined functions) csak VBA-val lehetett, Excel 2021-től van már LAMBDA függvény amivel ez cserélhető.

    Szerintem a Power Query és az új függvények megismerése legyen inkább a priorítás és utána lehet VBA-t tanulni.

    üdv

  • Mutt

    senior tag

    válasz bonifa333 #54390 üzenetére

    Szia,

    ...cella tartalmát úgy, hogy a formátumot tartsa meg...

    Csak makróval oldható meg.
    Az alábbi kódot tedd ki a gyors elérési eszköztárra és a kijelölt cellákat összefűzi a kívánt helyre a megfelelő formátummal. Ha vmilyen formátumot (pl. aláhúzást) nem akarsz másolni, akkor a vége felé a .Font sorokból kell kikommentezni vagy törölni.

    Sub OsszefuzesFormatummal()
        Dim cellak As Range, cel As Range       'mely cellákat és hova kell összefűzni
        Dim sor As Long                         'sor iterációhoz használt változó
        Dim p As Long, r As Long, cella As Range 'cella iterációkhoz használt változók
        Dim formats
        
        'induló és cél tartományok bekérése
        Set cellak = Application.InputBox(Prompt:="Add meg a tartományt amit össze kell fűzni: ", _
                        Default:=Selection.Address, Title:="Tartomány", Type:=8)
        Set cel = Application.InputBox(Prompt:="Add meg a céltartományt: ", _
                    Default:=Selection.Range("A1").Offset(, Selection.Columns.Count).Address, Title:="Tartomány", Type:=8)
        
        'ha célnak több cella vagy oszlop lett megadva akkor annak első cellájából indulunk
        Set cel = cel.Range("A1")
        
        'összefűzéshez használandó elvalasztó megadása
        Dim elvalaszto As String
        elvalaszto = Application.InputBox(Prompt:="Elválasztó (alapból szóköz): ", Title:="Elválasztó", Default:=" ", Type:=2)
        
        'makró gyorsítása a képernyő frissítés kikapcsolásával
        Application.ScreenUpdating = False
        
        r = 1                            'cél cellában a pozició nyomonkövetése
        sor = cellak.Range("A1").Row     'cél tartományban a sorok nyomonkövetése
        
        For Each cella In cellak
            'ha újabb sort kezdünk el feldolgozni, akkor a cél cellát is újabb sorba tesszük
            If cella.Row <> sor Then
                r = 1
                sor = cella.Row
                Set cel = cel.Offset(1)
            End If
        
            If Len(cella.Text) > 0 Then
                'betűnként végigmegyünk az eredeti szövegen és formátumát másoljuk
                For p = 1 To Len(cella.Text)
                    Set formats = cella.Characters(p, 1)
            
                    With cel.Characters(r, 1)
                        .Text = formats.Text
                        .Font.Bold = formats.Font.Bold
                        .Font.Italic = formats.Font.Italic
                        .Font.Underline = formats.Font.Underline
                        .Font.Strikethrough = formats.Font.Strikethrough
                        .Font.Subscript = formats.Font.Subscript
                        .Font.Superscript = formats.Font.Superscript
                    
                        .Font.Color = formats.Font.Color
                        .Font.TintAndShade = formats.Font.TintAndShade
                    
                        .Font.Name = formats.Font.Name
                        .Font.Size = formats.Font.Size
                    End With
                    r = r + 1
                Next p
            
                r = r + Len(elvalaszto)
                cel.Characters(r, 1).Text = elvalaszto
            End If
        Next cella
        
        Application.ScreenUpdating = True
    End Sub

  • föccer

    nagyúr

    válasz bonifa333 #54390 üzenetére

    Ha nem kell dinamikusan, akkor a cella értékének =A1&B1. Utána a az A oszlipot kijelölöd, másolod, majd C1-en jobb klikk formátum beillesztése.

    üdv, föccer

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