Avatar billede stormd Nybegynder
05. november 2010 - 10:02 Der er 5 kommentarer og
1 løsning

VBA funktion i excel ...

Hej

"Excelent" har lavet denne formel i et tidl. indlæg:

Værdier i A som ikke findes i B markeres med gul
Værdier i B som ikke findes i A markeres med grøn

Husk at rette fra/til i koden

Sub Sammenlign()
fra = 1: til = 18 ' Ret fra/til til aktuel første/sidste række

For Each c In Range("A" & fra & ":A" & til)
If Application.CountIf(Range("B" & fra & ":B" & til), c) Then
c.Interior.ColorIndex = xlNone
Else
c.Interior.ColorIndex = 6
End If
Next
For Each c In Range("B" & fra & ":B" & til)
If Application.CountIf(Range("A" & fra & ":A" & til), c) Then
c.Interior.ColorIndex = xlNone
Else
c.Interior.ColorIndex = 4
End If
Next
End Sub





Men jeg har brug for en ekstra funktion til denne formel/makro
kan denne makro udvides så den kopiere dem som er markeret med som i eks. gul til en ny kolonne og samme med dem som er blevet markeret med grøn farve til en given kollonne eller nyt underark.

har forsøgt mig lidt frem men VBA er total sort for mig.

mvh
stormd
Avatar billede tjp Mester
05. november 2010 - 10:35 #1
En mulig version:

Sub Sammenlign()
Dim fra, til, c, i
fra = 1: til = 5 ' Ret fra/til til aktuel første/sidste række
i = 1

For Each c In Range("A" & fra & ":A" & til)
  If Application.CountIf(Range("B" & fra & ":B" & til), c) Then
      c.Interior.ColorIndex = xlNone
  Else
      c.Interior.ColorIndex = 6
      Range("C" & i).Value = c.Value
      i = i + 1
  End If
Next
For Each c In Range("B" & fra & ":B" & til)
  If Application.CountIf(Range("A" & fra & ":A" & til), c) Then
      c.Interior.ColorIndex = xlNone
  Else
      c.Interior.ColorIndex = 4
      Range("C" & i).Value = c.Value
      i = i + 1
  End If
Next
End Sub
Avatar billede stormd Nybegynder
05. november 2010 - 13:29 #2
Hmm  super det virker... men hva hedder commandoen så hvis jeg vil have den til at fjerne dem istedet for at kopiere dem fra de oprindelige celler ?..
Avatar billede tjp Mester
05. november 2010 - 14:07 #3
Den hedder Delete:


Sub Sammenlign()
Dim fra, til, c, i
fra = 1: til = 5 ' Ret fra/til til aktuel første/sidste række
i = 1

For Each c In Range("A" & fra & ":A" & til)
  If Application.CountIf(Range("B" & fra & ":B" & til), c) Then
      c.Interior.ColorIndex = xlNone
  Else
      c.Interior.ColorIndex = 6
      Range("C" & i).Interior.ColorIndex = 6
      Range("C" & i).Value = c.Value
      i = i + 1
      c.Delete xlUp
  End If
Next
For Each c In Range("B" & fra & ":B" & til)
  If Application.CountIf(Range("A" & fra & ":A" & til), c) Then
      c.Interior.ColorIndex = xlNone
  Else
      c.Interior.ColorIndex = 4
      Range("C" & i).Interior.ColorIndex = 4
      Range("C" & i).Value = c.Value
      i = i + 1
      c.Delete xlUp
  End If
Next
End Sub
Avatar billede stormd Nybegynder
08. november 2010 - 08:16 #4
det virker delvist...

den efterlader stadig nogle af de markerede værdier og flytter godt nok nogle af dem men ikke alle..  16 flytter den ud af 23 værdiger i A kollonnen: B kollonnen virker der flytter den 4 ud af 4.
Avatar billede tjp Mester
08. november 2010 - 10:43 #5
Ah ja, der kommer jo kludder i index når man sletter i en for-each.. Hvad med denne?:

Sub Sammenlign()
Dim fra, til, c, i
fra = 1: til = 8 ' Ret fra/til til aktuel første/sidste række
i = 1

For Each c In Range("A" & fra & ":A" & til)
  If Application.CountIf(Range("B" & fra & ":B" & til), c) Then
      c.Interior.ColorIndex = xlNone
  Else
      c.Interior.ColorIndex = 6
      Range("C" & i).Interior.ColorIndex = 6
      Range("C" & i).Value = c.Value
      i = i + 1
  End If
Next
For Each c In Range("B" & fra & ":B" & til)
  If Application.CountIf(Range("A" & fra & ":A" & til), c) Then
      c.Interior.ColorIndex = xlNone
  Else
      c.Interior.ColorIndex = 4
      Range("C" & i).Interior.ColorIndex = 4
      Range("C" & i).Value = c.Value
      i = i + 1
  End If
Next

For i = 1 To til
  Set c = Range("A" & i)
  If c.Interior.ColorIndex = 6 Then
      c.Delete xlUp
      i = i - 1
  End If
Next
For i = 1 To til
  Set c = Range("B" & i)
  If c.Interior.ColorIndex = 4 Then
      c.Delete xlUp
      i = i - 1
  End If
Next

End Sub
Avatar billede stormd Nybegynder
08. november 2010 - 13:44 #6
awesome.... takker !

kan være jeg stiller et nyt udvidet spm senere når den skal være mere avanceret !
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
Kurser inden for grundlæggende programmering

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