Indsæt tom kolonne foran given tekst

Udfordringen er at finde den første forekomst af en given tekst i et regneark, og så indsætte en tom kolonne til venstre for den kolonne, der indeholder den pågældende tekst.

 

A

B

C

D

E

1

Navn

Nummer

Interesse

Stilling

Postnummer

2

Jens

123

Bøger

Bibliotekar

4711

3

Ole

234

Tøj

Lærer

UKENDT

4

Niels

345

Film

Chauffør

1234

5

Per

UKENDT

Rejser

Guide

9999

6

Kurt

567

Sport

Model

1121

7

Jeppe

789

Landbrug

Agrar

2121

I eksemplet skal der indsættes en ny tom kolonne til venstre for den første forekomst af ordet UKENDT, og kun foran denne første forekomst. Evt. yderligere forekomster skal ignoreres.  I eksemplet er UKENDT markeret med fed. Dette har ingen betydning for løsningen, men er kun for at gøre det nemmere at identificere de pågældende celler.

Den første udfordring er at beslutte sig til, hvad der er den første forekomst. Er det forekomsten i E3 fordi den står øverst, eller er det forekomsten i B5 fordi den står længst til venstre? Det er altså vigtigt at vide om arket læses fra venstre mod højde (række for række) eller oppe fra og ned (kolonne for kolonne). Når dette er vigtigt skyldes det, at såfremt man bruger en For Each...Next løkke til at gennemløbe cellerne, hvilket vil være det naturlige, starter denne altid i den øverste venstre celle i det område, der skal undersøges, og så læser den fra højre mod venstre. Se også dette link.

Denne makro er baseret på dette forhold.

Sub InsertNewColumnperRo()
    For Each c In ActiveSheet.UsedRange.Cells
        If UCase(c.Value) = "UKENDT" Then
            c.EntireColumn.Select
            Selection.Insert Shift:=xlToRight
            Exit For
        End If
    Next c
    ActiveCell.Select
End Sub

Den undersøger hver celle i det brugte område, derfor UsedRange - der er jo ingen grund til at undersøge celler, der ikke er brugt. Kender man på forhånd det mulige område, hvor UKENDT kan forekomme, kan man selvfølge definere et mere snævert område til sin søgning.  I eksemplet løses altså fra A1 mod højre og derefter i næste række, og den første forekomst, af UKENDT, der findes er den tekst, der står i E2. Den nye klonne indsættes derfor til venstre for E (ny E) og markøeren anbringes øverst i denne kolonne.

  A B C D E F
1 Navn Nummer Interesse Stilling   Postnummer
2 Jens 123 Bøger Bibliotekar   4711
3 Ole 234 Tøj Lærer   UKENDT
4 Niels 345 Film Chauffør   1234
5 Per UKENDT Rejser Guide   9999
6 Kurt 567 Sport Model   1121
7 Jeppe 789 Landbrug Agrar   2121

Ønsker man regnearket læst i kolonner, må man bruge en anden metode, fx denne:

Sub InsertNewColumnperColumn()
    Set rng = ActiveSheet.UsedRange.Cells
        For c = 1 To rng.Columns.Count
            For r = 1 To rng.Rows.Count
                If UCase(Cells(r, c).Value) = "UKENDT" Then
                    Cells(r, c).EntireColumn.Select
                    Selection.Insert Shift:=xlToRight
                    ActiveCell.Select
                    Exit Sub
                End If
            Next r
        Next c
End Sub

Denne udnytter ikke For Each...Next, men "kreerer sin egen ved hjælp af to For...Next løkker, en indre og en ydre løkke. Dette beskrives i artiklen, der linkes til ovenfor.

Denne metode sikrer at regnearket læses kolonnevis. Den første forekomst af UKENDT er således forekomsten i B5, og den tomme kolonne indsættes til venstre for B (ny B)

  A B C D E F
1 Navn   Nummer Interesse Stilling Postnummer
2 Jens   123 Bøger Bibliotekar 4711
3 Ole   234 Tøj Lærer UKENDT
4 Niels   345 Film Chauffør 1234
5 Per   UKENDT Rejser Guide 9999
6 Kurt   567 Sport Model 1121
7 Jeppe   789 Landbrug Agrar 2121

- Til top -
- Tilbage til makroer -

- Tilbage til Excel -