Avatar billede fogh Nybegynder
05. september 2006 - 15:58 Der er 12 kommentarer og
2 løsninger

VBA/Makro til at flytte indhold af celler - under betingelser

Dataeksempel fra Excel:

        Kolonne A    Kolonne B    Kolonne C

Record 1:            Tekst        Beløb
                Nummer

Record 2:            Tekst        Beløb
                Tekst
                Nummer

Record 3:            Tekst        Beløb
                Tekst
                Tekst
                Nummer


Jeg skal meget gerne have indholdet af feltet 'Nummer' der findes i kolonne B
flyttet/kopieret op på den linie i kollonne A, hvor beløbet i kolonne C står.
Kort sagt: Øvelsen går ud på at få Nummer og Beløb placeret i samme række!!!

Findes der et beløb i kolonne C starter her en ny record.
Herefter følger i de næste linier et varierende antal linier med tekst (0-2 stk)

Jeg har forsøgt mig lidt med flemming dahl's løsning fra: http://www.eksperten.dk/spm/289254
men jeg kan ikke rigtig passe den til så den fungerer.

Håber ikke beskrivelsen er for 'gnidret'

på forhånd tak
Thomas
Avatar billede fogh Nybegynder
05. september 2006 - 15:59 #1
Nå min fine oversigt med kolonner er blevet ødelagt af reklamebanneret... ÆV
Avatar billede fogh Nybegynder
05. september 2006 - 16:04 #2
Prøver igen:

Dataeksempel fra Excel:

          Kol A  Kol B  Kol C

Record 1:          Tekst  Beløb
                  Nummer

Record 2:          Tekst  Beløb
                  Tekst
                  Nummer

Record 3:          Tekst  Beløb
                  Tekst
                  Tekst
                  Nummer
Avatar billede excelent Ekspert
05. september 2006 - 19:55 #3
prøv lige at formatere det igen, gerne sådan:

A1=Record1 B1=Tekst C1=Beløb eller hvor de nu står

for ellers bliver det rent gætteværk, hvor de enkelte værdier står
Avatar billede fogh Nybegynder
05. september 2006 - 21:39 #4
Prøver lige igen, igen:

A1: (tom)  B1: 'Kundenavn A'    C1: Saldo A
A2: (tom)  B2: 'Kundenr A'
A3: (tom)  B3: 'Kundenavn B'    C3: Saldo B
A4: (tom)  B4: 'navn B fortsat'
A5: (tom)  B5: 'Kundenr B'
A6: (tom)  B6: 'Kundenavn C'    C6: Saldo C
A7: (tom)  B7: 'navn C fortsat' 
A8: (tom)  B8: 'navn C fortsat' 
A2: (tom)  B9: 'Kundenr C' 

Data er en masse rækker i excel, hvor data hører sammen. Nogle data har 2 rækker der hører sammen (Kunde A) andre har 3 (Kunde B) og andre igen har 4 rækker (Kunde C).

Opgaven går på at få Kundenummeret, der står med skiftende afstand fra Kundenavnet, op at stå på samme linie som Kundenavnet og Kundesaldoen.

Ex. Kunde A: celle B2 skal flyttes til A1
Ex. Kunde B: celle B5 skal flyttes til A3
Ex. Kunde C: celle B9 skal flyttes til A6

Der er skiftende forekomster af "typerne" A, B og C i datamaterialet, dvs. der kan komme 3 kunder med hver 4 linier efter hinanden.

Kundenavn og Kundesaldo står altid i samme række, det er denne række jeg ønsker at beholde og tilføje kundenummeret til.

Giver det mening?

mvh Thomas
Avatar billede excelent Ekspert
05. september 2006 - 21:52 #5
ja det hjalp en hel del :-)

kunde nr. består det af tal og kun tal ?
Avatar billede fogh Nybegynder
05. september 2006 - 22:06 #6
Yes fra 5 til 7 cifre
Avatar billede fogh Nybegynder
05. september 2006 - 22:07 #7
Kundenr: Heltal 5-7 cifre
Saldo:  "Long" med to decimaler
Avatar billede gider_ikke_mere Nybegynder
06. september 2006 - 01:38 #8
Private Sub CommandButton2_Click()
Sidste = Cells(65536, 2).End(xlUp).Row
Forrige = Sidste
For I = 1 To Sidste - 1
    If Cells(Sidste - I, 3).Value <> "" Then
        Temp = Cells(Forrige, 2).Value
        Cells(Sidste - I, 1).Value = Temp
        Cells(Forrige, 2).Value = ""
        Forrige = Sidste - I - 1
    End If
Next
End Sub
Avatar billede supertekst Ekspert
06. september 2006 - 09:32 #9
Også et bud:
Dim antalRæk, ræk1
Sub flytNummer()
Dim ræk, nummer, tilRæk
    antalRæk = ActiveCell.SpecialCells(xlLastCell).Row
   
Rem Find recordens række 1
    For ræk = 1 To antalRæk
        If Cells(ræk, 3) <> "" Then
            ræk1 = ræk
           
            nummer = findNummer(ræk, tilRæk)
            If nummer <> "" Then
                ræk = tilRæk
                Cells(ræk1, 1) = nummer
            End If
        End If
    Next ræk
    MsgBox ("Flytning er alsluttet")
End Sub
Private Function findNummer(fraRæk, tilRæk)
Dim f
    For f = fraRæk To antalRæk
        If IsNumeric(Cells(f, 2)) = True Then
            findNummer = Cells(f, 2)
            Cells(f, 2) = ""
            tilRæk = f
            Exit Function
        End If
    Next f
    findNummer = ""
End Function
Avatar billede fogh Nybegynder
06. september 2006 - 09:58 #10
Hej Supertekst
Hvordan får jeg din kode afviklet?
mvh Thomas

akyhne: din kode virker fint!
Avatar billede supertekst Ekspert
06. september 2006 - 10:31 #11
Hej Thomas
Sæt koden ind i xls-filens VBA-vindue (Alt+F11) / Ark1 og kør (F5)
Avatar billede fogh Nybegynder
06. september 2006 - 10:44 #12
Hej, og 1000 tak!

Begge løsninger virker - jeg mangler bare et 'svar' fra akyhne for at kunne tildele point. I deler 50/50, OK?

mvh Thomas
Avatar billede gider_ikke_mere Nybegynder
06. september 2006 - 10:46 #13
Det er ok med mig.
Avatar billede supertekst Ekspert
06. september 2006 - 11:13 #14
OK og selv tak...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester