Microsoft Excel

Herbers Excel/VBA-Archiv

select case im datenfeld | Herbers Excel-Forum


Betrifft: select case im datenfeld von: Steffen
Geschrieben am: 02.12.2009 17:48:13

Guten Abend,

Ich bin seit kurzem dabei mir Funktionen mit Datenfeldern anzueignen . Doch bei einer Sache komme ich nicht zurecht. Ich möchte in einem Datenfeld Inhalte auslesen und wenn Übereinstimmungen sich ergeben soll die Zelle formatiert werden. Mit der für mich üblichen Methode "Select case" war es bisher kein Problem , nur im Datenfeld bekomme ich es nicht hin:

Dim meArray As Variant
Dim LoSpalte As Long, LoZeile As Long, i As Long

With ActiveSheet

LoSpalte = .Cells(1, Columns.Count).End(xlToLeft).Column
LoZeile = .Cells(Rows.Count, 1).End(xlUp).Row
meArray = .Range(.Cells(1, 1), .Cells(LoZeile, LoSpalte))

For i = LBound(meArray, 1) To UBound(meArray, 1)

Select Case meArray(i, 1)
Case "INACTIVE"
meArray(i, 1) = Cells(i, 1).Font.ColorIndex = 5
Case "ACTIVE"
meArray(i, 1) = Cells(i, 1).Font.ColorIndex = 10
Case "INHIBITED"
meArray(i, 1) = Cells(i, 1).Font.ColorIndex = 3
End Select

Select Case meArray(i, 7)
Case "ADVISORY"
meArray(i, 7) = Cells(i, 7).Font.ColorIndex = 2
meArray(i, 7) = Cells(i, 7).Font.Bold = True
meArray(i, 7) = Cells(i, 7).Interior.ColorIndex = 39
Case "CAUTION"
meArray(i, 7) = Cells(i, 7).Font.ColorIndex = 2
meArray(i, 7) = Cells(i, 7).Font.Bold = True
meArray(i, 7) = Cells(i, 7).Interior.ColorIndex = 46
Case "WARNING"
meArray(i, 7) = Cells(i, 7).Font.ColorIndex = 2
meArray(i, 7) = Cells(i, 7).Font.Bold = True
meArray(i, 7) = Cells(i, 7).Interior.ColorIndex = 3
End Select
Next i
.Range(.Cells(1, 1), .Cells(LoZeile, LoSpalte)) = meArray
End with

Es gibt mir dann "Falsch" in dem Datenfeld aus?!

Weiß jemand Rat?

Viele Grüße Steffen

  

Betrifft: Ein ARRAY kan man doch nicht formatieren von: NoNet
Geschrieben am: 02.12.2009 17:59:23

Hallo Steffen,

ein "Datenfeld" (ARRAY) ist doch lediglich ein "Container" für die Werte der Zellen.
Dieses ARRAY kann man nicht formatieren (zumindest nicht Hintergrund unf Schriftfarbe!), denn es handelt sich ja nicht um Zellen (RANGE), die eine Formatierungseigenschaft besitzen ! So formatieren wie Du es möchtest kann man nur Zellen !

Dass als Wert im ARRAY FALSCH erscheint ist logisch, denn Du übergibst als Wert des ARRAY das Ergebnis eines Vergleiches :

meArray(i, 1) = Cells(i, 1).Font.ColorIndex = 5

Der Vergleich Cells(i, 1).Font.ColorIndex = 5 ergibt entweder WAHR, wenn der Zellhintergrund der Farbe 5 entspricht, oder FALSCH, wenn der Zellhintergrund NICHT der Farbe 5 entspricht.

Da Deine Zellen vermutlich nicht dunkelblau formatiert sind, ergibt das für alle/die meisten Zellen den Wert FALSCH !

Gruß, NoNet


  

Betrifft: Das hab ich mir schon fast gedacht.. von: Steffen
Geschrieben am: 02.12.2009 18:32:58

NoNet & Luc?-danke für die Ausführungen!
besteht denn überhaupt die Möglichkeit mit "select case" im Datenfeld eine Auswertung vorzunehmen ? Ich bin von der Schnelligkeit der Arraymethode begeistert und da ich sehr viele Daten zum auswerten habe währe diese Methode für mich die beste.

Grüße Steffen
P.S bastel grad noch an einer Kurzversion zum uploaden...


  

Betrifft: ...Ja, sicher! Kommt ganz darauf an,... von: Luc:-?
Geschrieben am: 03.12.2009 03:45:47

...Steffen,
was du machen bzw vgl willst, denn darauf läuft das ja immer hinaus. Man kann fast alles in ein Feld laden, nur eben nicht fertig formatierte Zellen; also entweder die Inhalte oder die Fmln oder Formatangaben, also Farbwerte, Schriftgrößen usw → also Daten!.
Falls sich auch Objekte (eine komplett formatierte Zelle wäre so etwas) in ein Feld laden lassen sollten (kann ich gerade nicht verifizieren), dürfte das dann aber kaum schneller sein!
Gruß Luc :-?


  

Betrifft: Objekte in Feldern wohl nur als Referenz! owT von: Luc:-?
Geschrieben am: 03.12.2009 03:49:01

:-?


  

Betrifft: Luc?-Danke! hat mich wieder ein Stück von: Steffen
Geschrieben am: 03.12.2009 15:21:06

weiter gebracht im Lehrnfaktor! Ich find die ganze Arraygeschichte unheimlich interessant!



Viele Grüße

Steffen


  

Betrifft: Das ist ja auch zu erwarten,... von: Luc:-?
Geschrieben am: 02.12.2009 18:02:32

...Steffen,
denn du weist ja den Elementen deines Feldes meArray Wahrheitswerte zu!
Bsp: meArray(i, 7) = Cells(i, 7).Font.ColorIndex = 2
...bedeutet nichts anderes als die Frage, ob der Farbindex der Zelle(i,7)=2 ist. Ist er das nicht, erhält Element(i,7) des Feldes den Wert False, sonst True. Wenn du was anderes willst, musst du auch was anderes machen... ;-)
...Aber das können wir ja so nicht wissen!
Gruß Luc :-?


Beiträge aus den Excel-Beispielen zum Thema "select case im datenfeld"