Avatar billede hubertus Seniormester
24. december 2018 - 12:54 Der er 9 kommentarer og
1 løsning

Array - overfør baggrundsfarve ved kopiering af et array

En kolonne bestående af både tal og tekst indlæses i et array. Nogle af cellerne er formateret med en farve, som er styret af cellens indhold. Eks. Hvis en celle indeholder et tal mellem 75 og 100, så skal den baggrundsfarven være rød.
Det indlæste array skal kopieres over på et andet ark. spg. hvordan får jeg farven som er knyttet til intervallet med over, sammen med kopieringen?
Avatar billede Dan Elgaard Ekspert
24. december 2018 - 21:02 #1
Hvis du benytter VBA til at indlæse i dit Array, kan du jo blot lave en ekstra dimension til, at holde celle farven.
Alternativt benytte betinget formatering i dit destinationsark.
Avatar billede hubertus Seniormester
24. december 2018 - 21:41 #2
Hej Dan
Jeg benytter VBA til at indlæse mit Array. Har du et kode eksempel, der kan illustrere det?
Avatar billede hubertus Seniormester
25. december 2018 - 11:53 #3
Den kode jeg benytter nu er følgende:

Option Explicit
Option Base 1

Public Sub Flyt()

    Dim RåData As Variant, UdData2 As Variant, UdData3 As Variant, UdData4 As Variant
    Dim UD2 As Long, UD3 As Long, UD4 As Long
    Dim i As Integer, j As Long, X As Integer, Col As Integer, Rows As Long, Y As Integer
     
    UD2 = 2
    UD3 = 2
     
    RåData = Sheet6.Range("A1").CurrentRegion
    Rows = UBound(RåData, 1)
    Col = UBound(RåData, 2)
   
 
    ReDim UdData2(Rows, Col)
    ReDim UdData3(Rows, Col)
 
       
    For i = 1 To UBound(RåData, 2)
        UdData2(1, i) = RåData(1, i)
        UdData3(1, i) = RåData(1, i)
    Next i
   
     
    For j = 2 To Rows
   
        If IsNumeric(RåData(j, 5)) = True Then
            Debug.Print RåData(j, 5)
           
            For X = 1 To Col
                UdData2(UD2, X) = RåData(j, X)
            Next
           
            UD2 = UD2 + 1
       
        Else
       
            For X = 1 To Col
                UdData3(UD3, X) = RåData(j, X)
            Next
           
            UD3 = UD3 + 1
     
        End If
    Next j
   
  Sheet4.Range("A1").Resize(Rows, 4).NumberFormat = "@"
  Sheet4.Range("A1").Resize(Rows, Col) = UdData2
  Sheet5.Range("A1").Resize(Rows, 4).NumberFormat = "@"
  Sheet5.Range("A1").Resize(Rows, Col) = UdData3

End Sub

Tal med bestemte værdier har en baggrundsfarve. det er denne farve, som jeg gerne vil have med over i Uddata2
Avatar billede Dan Elgaard Ekspert
26. december 2018 - 11:16 #4
Uden dine data kan jeg ikke rigtigt se, hvad der præcist sker, men...

Hvis du har din  værdi i f.eks. Uddata(x, y) kan du udvide dit array med en dimension, så du har:

Din værdi Uddata (x, y, 1)
Cellens farve i Uddata(x, y, 2)

Du skal blot huske, at 'ReDim' med denne ekstra dimension

ReDim UdData2(Rows, Col, 2)

Igen, med forbehold for, at jeg ikke kender dine præcise intentioner :-)
Avatar billede hubertus Seniormester
26. december 2018 - 14:11 #5
Jeg har aldrig arbejdet med 3 dimensioner, men vil gerne prøve det. jeg sender gerne et eksempel ark, hvis det er ok med dig.
Avatar billede Dan Elgaard Ekspert
26. december 2018 - 21:56 #6
Jeg ved ikke rigtigt, hvad jeg mere kan skrive - jeg har jo vist, både, hvordan man bruger og, hvordan man erklærer Arrays med en tredje dimension...
...hvis du kan indlæse og udlæse til/fra en Array med 2 dimensioner, kan du også gøre det til en Array med 3 dimensioner :-)

Der er ingen forskel...
Avatar billede hubertus Seniormester
27. december 2018 - 22:00 #7
Ud fra det du har skrevet kan jeg god for oprettet og dimensioneret den 3 dimension.
mit problem opstår i det loop, hvor jeg konstatere at det er en numerisk værdi, at få aflæst interior.color og lagt det ind i den 3 dim.
eks. uddata2(ud2, x, z).  ud2 indeholder rækken, x, kolonne, z skal så indeholde tallet for farven. Hvordan får jeg indlæst værdien i z?.
Avatar billede Dan Elgaard Ekspert
28. december 2018 - 08:32 #8
Det skal laves i to linjer:

uddata2(ud2, x, 1) = Cells(ud2, x).Value
uddata2(ud2, x, 2) = Cells(ud2, x).Interior.Color

Og, igen i to linjer, når du indsætter:

Cells(ud2, x).Value = uddata2(ud2, x, 1)
Cells(ud2, x).Interior.Color = uddata2(ud2, x, 2)
Avatar billede hubertus Seniormester
28. december 2018 - 21:35 #9
Hej Dan
Jeg var fokuseret på, at den skulle ind via mit array: Rådata, derfor tænkte jeg ikke på at lægge værdierne ind på din måde – lidt øv, for det har jeg gjort før i andre situationer. 
Jeg har nu en test rutine, der gør præcis det, som jeg ønsker, og så har jeg tilmed selv lært noget med din hjælp. Jeg vil derfor sige mange tak for hjælpen og ønske dig et godt nytår 😊
Avatar billede Dan Elgaard Ekspert
29. december 2018 - 11:21 #10
Ja, man kan nogen gange ikke se skoven for bare træer :-)
Godt du fandt ud af det, og osse godt nytår til dig.
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

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