ERLANDSEN DATA CONSULTING Excel & VBA Tips   Information in English / Informasjon på engelsk

Disse websidene oppdateres ikke lengre og er kun tilgjengelig for historikken sin skyld.

Klikk her for å gå til den oppdaterte informasjonen.

Slett rader og kolonner

Ved hjelp av makroene nedenfor kan man slette alle rader eller kolonner som er tomme innenfor et angitt område. Man kan også sletter hver n-te rad eller kolonne. Makroene vil utføres raskere dersom du setter Application.ScreenUpdating = False før du starter makroene.

Sub DeleteEmptyRows(DeleteRange As Range)
' Sletter alle tomme rader i DeleteRange
' Eksempel: DeleteEmptyRows Selection
' Eksempel: DeleteEmptyRows Range("A1:D100")
Dim rCount As Long, r As Long
    If DeleteRange Is Nothing Then Exit Sub
    If DeleteRange.Areas.Count > 1 Then Exit Sub
    With DeleteRange
        rCount = .Rows.Count
        For r = rCount To 1 Step -1
            If Application.CountA(.Rows(r)) = 0 Then 
                .Rows(r).EntireRow.Delete
            End If
        Next r
    End With
End Sub


Sub DeleteEmptyColumns(DeleteRange As Range)
' Sletter alle tomme kolonner i DeleteRange
' Eksempel: DeleteEmptyColumns Selection
' Eksempel: DeleteEmptyColumns Range("A1:Z1")
Dim cCount As Integer, c As Integer
    If DeleteRange Is Nothing Then Exit Sub
    If DeleteRange.Areas.Count > 1 Then Exit Sub
    With DeleteRange
        cCount = .Columns.Count
        For c = cCount To 1 Step -1
            If Application.CountA(.Columns(c)) = 0 Then 
                .Columns(c).EntireColumn.Delete
            End If
        Next c
    End With
End Sub


Sub DeleteEveryNthRow(DeleteRange As Range, N As Integer)
' Sletter hver N-te rad i DeleteRange
' Eksempel: DeleteEveryNthRow Selection,2
' Eksempel: DeleteEveryNthRow Range("A1:D100"),4
Dim rCount As Long, r As Long
    If DeleteRange Is Nothing Then Exit Sub
    If DeleteRange.Areas.Count > 1 Then Exit Sub
    If N < 2 Then Exit Sub
    With DeleteRange
        rCount = .Rows.Count
        For r = N To rCount Step N - 1
            .Rows(r).EntireRow.Delete
        Next r
    End With
End Sub


Sub DeleteEveryNthColumn(DeleteRange As Range, N As Integer)
' Sletter hver N-te kolonne i DeleteRange
' Eksempel: DeleteEveryNthColumn Selection,2
' Eksempel: DeleteEveryNthColumn Range("A1:D100"),4
Dim cCount As Long, c As Long
    If DeleteRange Is Nothing Then Exit Sub
    If DeleteRange.Areas.Count > 1 Then Exit Sub
    If N < 2 Then Exit Sub
    With DeleteRange
        cCount = .Columns.Count
        For c = N To cCount Step N - 1
            .Columns(c).EntireColumn.Delete
        Next c
    End With
End Sub

 

Dokumentet er sist oppdatert 1999-12-20 12:37:25      Utskriftsvennlig versjon

Brukerkommentarer:
KG fra Norge skrev (2006-03-31 14:10:28 CET):
Utgått på dat m.m.
Takk for svar.

Jeg har funnet en makro som sletter arbeidsboken innenfor en angitt dato. Har testet den og det fungerer - så er i allefall det problemet løst.
Ole P. fra Trondheim skrev (2006-03-31 10:19:12 CET):
Re: Utgått på dato m.m.
Man kan ikke klare å sikre seg 100% mot innsyn i et regneark eller kildekoden bak dette dersom folk virkelig vil ta en titt.
Det tryggeste er å fjerne sensitiv informasjon i regnearket før man sender det videre.

Man kan lage en "utgått på dato"-funksjonalitet ved å benytte en hendelsesmakro som starter hver gang arbeidsboken åpnes.
Denne makroen ("Workbook_Open") kan deretter sjekke dagens dato mot en dato i arbeidsboken og se om den er for gammel, og eventuelt presentere en melding om dette eller lukke arbeidsboken.
Sjekk menyvalget "Hendelser" for mer info om hendelsesmakroer.

KG fra Norge skrev (2006-03-31 08:14:43 CET):
Utgått på dato
Ett spørsmål til:
Er det mulig å gi en kommando slik at en prisliste ikke fungerer etter en angitt dato? F.eks. har vi prislisteoppdateringer hver 6. mnd - kan jeg gi en kommando som f.eks. deaktiverer gammel prisliste? På denne måten sikrer vi oss også at selgere og kunder til enhver tid bruker korrekt liste.
KG fra Norge skrev (2006-03-31 08:11:04 CET):
Sletter rader og kolonner
Takk for hjelpen Ole P. - nå fungerer det.

Jeg har et annet problem som jeg ikke helt ser løsningen på:
Våre selgere melder tilbake at kundene ønsker å få prislisten i Excel format, tilsendt på mail eller nedlastet fra hjemmesiden vår. Jeg er skeptisk - selv om jeg skjuler ark og passordbeskytter vet jeg at det kan være enkelt å knekke dette. Prislisten er kalkulert fra grunnen av slik at den viser sensitive data som innkjøpspriser etc. Er det mulig å lage en makro som gir prislisten beskjed om å "begå selvmord" om noen forsøker å gjøre innbrudd? Hvordan sikrer man seg for det værst tenkelig?
Ole P. fra Trondheim skrev (2006-03-28 22:58:15 CET):
Re: Slette rader og kolonner
Etter at du har kopiert makroene inn i et modulark trenger du å lage en liten snutt som utfører makroene slik eksemplene viser, f.eks. slik:

Sub SlettTommeRader()
Application.ScreenUpdating = False
Application.StatusBar = "Sletter blanke rader..."
DeleteEmptyRows Range("A1:D100")
Application.StatusBar = False
Application.ScreenUpdating = True
End Sub

Denne makroen kan startes fra makromenyen (Alt+F8) eller fra en knapp eller lignende.
KG fra Norge skrev (2006-03-28 18:48:12 CET):
Slette rader og kolonner
Jeg er helt uerfaren med makro. Har programert noen selv men det fungerer ikke alltid da format endrer seg og jeg derved sletter rader som må være med i rapport.
Sak: Jeg kopierer over en rapport fra Word til Excel og rydder med "Tekst til kolonner". Jeg får da en rekke tomme rader og rader som indikerer avsnitt eller ny side med mellomromstegn. Da rapporten inneholder ca 2000 rader og ca 500 er tom, blir det mye rydding. Har prøvd å bruke makro som beskrevet på denne siden, men får det ikke til å fungere - helt dødt. Hva gjør jeg galt?
Håper på litt hjelp til dette.

 

Erlandsen Data Consulting     http://www.erlandsendata.no/   
Excel & VBA Tips   Copyright ©1999-2024    Ole P. Erlandsen   All rights reserved
E-post kontaktadresse