Just nu i M3-nätverket
Gå till innehåll

Excel 2010, radera utvalda kolumner med vba


speedy1

Rekommendera Poster

Hej,

 

Jag vill markera 1 eller flera celler (oavsett rader), i en eller flera olika kolumner, och sedan via vba radera just de kolumner som innehåller markerade cell/er.

Hur får jag koden att känna av att det är minst 1 cell markerad i en kolumn?

 

Problemet är att jag måste ju börja med att ta bort kolumnen med högsta kolumnsiffran och gå neråt, annars tas inte alla "cellmarkerade" kolumner bort (eftersom de flyttas åt vänster för varje som raderas).

 

 

Hur skriver jag detta i vba?

 

 

/speedy1

 

 

Länk till kommentar
Dela på andra webbplatser

Varför VBA?

Klicka cell 1

håll nere ctrl

klicka cell 2, 3, 4, 5 osv

högerklicka, välja ta bort, hela kolumnen. 

 

Klart och kräver inte fler klick än vad ett makro skulle kräva.

 

Om du vill göra det via VBA får du, som du märker, stega från yttersta kolumn och inåt.

Länk till kommentar
Dela på andra webbplatser

Jag vill göra det med VBA bara "för att" (man säkert kan göra det). :)

 

Som sagt, det knepiga är att definiera kolumner med en cell/flera celler markerade och att kunna börja radera den kolumn med högst kolumnnummer och fortsätta neråt.

 

Någon som vet hur jag skriver det i kod?

Länk till kommentar
Dela på andra webbplatser

Ove Söderlund

Du behöver kika lite på mängdobjektet Areas och dess egenskaper för Areas.Count resp. Areas.Item. Lite exempelkod som ger dig en hint om vägen fram:

Sub VisaAreaEgenskaper()
    
    Dim iAreaCount As Integer
    Dim i As Integer

    Worksheets("Blad1").Activate
    iAreaCount = Selection.Areas.Count

    If iAreaCount <= 1 Then
        
        MsgBox "Markerat område innehåller " & Selection.Columns.Count & " kolumner."
    
    Else
        
        For i = 1 To iAreaCount
            
            MsgBox "Område " & i & " i markeringen innehåller " & _
             Selection.Areas(i).Columns.Count & " kolumner."
            
            MsgBox "Första cellens position i markerat område " & i & _
             " Rad: " & Selection.Areas.Item(i).Row & " -- Kolumn: " & _
             Selection.Areas.Item(i).Column
            
        Next i
    
    End If

End Sub

Jag kan tänka mig följande arbetsgång;  att du läser av markerade områden och sparar positionerna i en matris och därifrån tar ut kolumner "längs till höger" först för radering och jobbar dig mot "vänster".

Länk till kommentar
Dela på andra webbplatser

Sub raderaKolumnerMedMarkeradCell()
    
'radera resp kolumner som har minst 1 cell markerad
    
    Dim iAreaCount As Integer
    Dim i As Integer

Application.ScreenUpdating = False


    Worksheets("Blad1").Activate
    iAreaCount = Selection.Areas.Count
    
        If iAreaCount <= 1 Then
            ActiveCell.EntireColumn.Delete
        
        Else
            For i = iAreaCount To 1 Step -1
                Selection.Areas.Item(i).EntireColumn.Delete
            Next i
            
        End If


    ActiveCell.Select

Application.ScreenUpdating = True
End Sub

Tack Ove, för hjälpen. Det här är vad jag åstadkommit, som verkar fungera - raderar från sista till första kolumnen.

(Koden fungerar om jag markera från LÄGSTA kolumn till HÖGSTA, inte om jag markerar i annan ordning, hm)

Läsa in i matris har jag lite svårt att förstå ...

 

Areas, Areas.Count resp Areas.Item har ag nog aldrig använt tidigare, men det var ett smart sätt.

Finns det övrig info jag klan få om detta?

 

 

(Koden fick jag in till slut men det fungerar inte att klistra in kopierad text i denna svarsruta, vad gör jag för fel?!)

Länk till kommentar
Dela på andra webbplatser

Ove Söderlund

1. När det gäller referensinformation om t.ex. syntax, objekt, metoder osv så är VBA hjälpen första stället att leta i - VBA-editorn - Hjälp - Hjälp om Microsoft Visual Basic for Applications (Excel 2010 i mitt fall). Det finns även bra resurser online, t.ex. Welcome to the Excel 2010 Developer Reference (MSDN / microsoft.com). För info om just Areas: https://msdn.microsoft.com/en-us/library/office/ff821504(v=office.14).aspx .

 

2. När jag klistrar in kod så klickar jag först på knappen <> i inläggseditorns verktygsrad. Du får upp en ny dialogruta, välj först "Typ av kod" till None och klistra därefter in Excelkoden.

Länk till kommentar
Dela på andra webbplatser

Jag tolkar det som att mitt förslag på kod var ok ... :)

 

1. Tack för länkar med info. De ska jag kolla på.

 

2. Koden fick jag in på det sätt du beskriver, men vanlig text som jag skrivit i annat program klistras inte in med knapparna som finns här, och inte heller med högerklick Klistra In. Fattar inte varför.

Länk till kommentar
Dela på andra webbplatser

Ove Söderlund

Använd gärna Testhörnan i subforat Eforum för att testa dig fram till rätt handhavande. Återkoppla i Buggrapporter och önskemål om Eforum om du upptäcker något fel alternativt PM:ar någon av moderatorerna.

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.



×
×
  • Skapa nytt...