Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

Arrayfelder auf Gleichheit prüfen

Betrifft: Arrayfelder auf Gleichheit prüfen von: Stefanie
Geschrieben am: 29.10.2014 12:23:50

Hallo ihr Profis :-)

ich möchte gerne mein Array auf gleiche Inhalte überprüfen.
Also in dem Array wird die Zeile 2 eingelsen. In dieser steht z.B.,

Zeile:      Hund, Katze, Katze, Maus, Hund, usw.
Halsband:          x                     x
Hundefutter:       x                     x
...
 


Jetzt möchte ich den Array durchlaufen und sobald der Inhalt (z.B., Hund) doppelt vorkommt sollen diese spalten verbunden werden. Weil die Kreuze beim Hund immer die selben sind.
Ich hab bis jetzt folgenden Quellcode:

-Das hier ist die Zeile wo steht Hund, Katze, etc.

arrayGleich = Range(Cells(2, 8), Cells(2, 200))
For lZeileGleich = 1 To UBound(arrayGleich) 'alle Zeilen
             For lSpalteGleich = 1 To UBound(arrayGleich, 2) 'alle Spalten
                  
If arrayGleich(lZeileGleich, lSpalteGleich)   =arrayGleich(lZeileGleich + 1, lSpalteGleich + 1)  _

Then
                  MsgBox "Gleicher Wert wurde gefunden"
                  End If
                  
                  
                  
            Next lSpalteGleich
Next lZeileGleich
Danke für eure Hilfe!
VG

  

Betrifft: AW: Arrayfelder auf Gleichheit prüfen von: fcs
Geschrieben am: 29.10.2014 13:56:04

Hallo Stefanie,

ich kann zwar in etwa nachvollziehen was du möchtest, aber welchen Sinn soll das machen eine Tabelle durch verbundene Zellen in den Zeilen zu zerfleddern?

Nachfolgend ein Makro das deine Wünsche zufriedenstellen sollte.
Es muss eine weitere innere Schleife eingebaut werden, die die Namen jeweils bis zum Ende vergleicht, um einen doppelten Wert zu finden.

Gruß
Franz

Sub aaTest()
  Dim arrayGleich, lZeileGleich, lSpalteGleich, lSpalteGleich2
  'Zellbereich von H2 bis zum Ende der Liste nach rechts
  arrayGleich = Range(Cells(2, 8), Cells(Cells(Rows.Count, 1).End(xlUp).Row, Cells(2, Columns. _
Count).End(xlToLeft).Column))
  For lZeileGleich = 2 To UBound(arrayGleich) 'alle Zeilen
      'Spalten abarbeiten
      For lSpalteGleich = 1 To UBound(arrayGleich, 2) 'alle Spalten
      'Werte mit restlichen Werten in Zeile vergleichen
      For lSpalteGleich2 = lSpalteGleich + 1 To UBound(arrayGleich, 2) 'alle Spalten
        'Werte in Zeile 1 vergleichen
        If arrayGleich(1, lSpalteGleich) = arrayGleich(1, lSpalteGleich2) Then
          'Prüfen, ob "x" in beiden Zellen in der Zeile
          If arrayGleich(lZeileGleich, lSpalteGleich) = "x" _
                  And arrayGleich(lZeileGleich, lSpalteGleich2) = "x" Then
              MsgBox "Gleicher Wert wurde gefunden"
              Application.DisplayAlerts = False
              Range(Cells(lZeileGleich + 1, lSpalteGleich + 7), _
                    Cells(lZeileGleich + 1, lSpalteGleich2 + 7)).Merge
              Application.DisplayAlerts = True
              Exit For
          End If
        End If
      Next lSpalteGleich2
      Next lSpalteGleich
  Next lZeileGleich
End Sub




  

Betrifft: AW: Arrayfelder auf Gleichheit prüfen von: Stefanie
Geschrieben am: 03.11.2014 07:48:44

Naja ich hab hier das Beispiel mit den Tieren genannt, da ich mein tatsächliches Beispiel nicht öffentlich machen darf. Aber das hat schon Sinn. Vielleicht auf das Beispeil mit dem Hund bezogen.

Es gibt mehrere Hunde Rassen und deswegen muss ich die Zellen verbinden weil die Rasse in einer weiteren Zelle noch darüber steht.

Jedenfalls muss es leider so sein.

Werde jetzt deine Antwort mal nachvollziehen in Ruhe und Danke dir ganz herzlich!!

Hilft mir sehr weiter!


  

Betrifft: AW: Arrayfelder auf Gleichheit prüfen von: Stefanie
Geschrieben am: 03.11.2014 08:07:29

Funktioniert super ich danke dir !!!!


  

Betrifft: Ich halte dein Bsp ja für fiktiv, ... von: Luc:-?
Geschrieben am: 01.11.2014 21:09:52

…Stefanie,
und dich, nebenbei, für unhöflich, da du bisher (und wohl auch sonst öfter) kein Feedback gegeben hast (bzw gibst).
Solche VerbundZellen sind idR per sé nur sinnvoll, wenn dadurch gleiche Einträge in einer Listen­Spalte nur einmal erscheinen sollen, um die übliche Tabellen­form zu erreichen. Dabei ist es wg möglicher Filterungen besser, die mehrfachen Werte in ihren Zellen zu belassen (eine Verbund­Zelle kann trotzdem erzeugt wdn!).
Da hier aber die Einträge zu den Daten stets gleich sind, dürfte es besser sein, die Duplikate zu entfernen, nicht die betroffenen Zellen zu verbinden. Dies könnte mit dem gleichen Tool-Set erfolgen, mit dem auch gleich­inhaltige Zellen verbunden wdn können, falls diese Zellen aufeinander­folgend in einer Spalte angeordnet sind, was ggf durch Transposition (MTRANS) und Sortierung erreicht wdn kann.
Nähere Infos nur bei bekundetem Interesse!
Gruß, Luc :-?


  

Betrifft: AW: Ich halte dein Bsp ja für fiktiv, ... von: Stefanie
Geschrieben am: 03.11.2014 07:45:42

Ich habe eigentlich fast immer geantwortet. Sorry ich beschäftige mich halt 3 Tage in der Woche damit und komme dann nicht immer gleich zum Antworten.

Die Zellen muss ich verbinden aber vielen Dank für deinen Tipp.


  

Betrifft: AW: Ich halte dein Bsp ja für fiktiv, ... von: Stefanie
Geschrieben am: 03.11.2014 08:12:15

Sorry Luc, hast mir doch so oft geholfen. Ich wollte nicht unhöflich sein!! Bin immer sehr dankbar für deine Hilfe. Werde in Zukunft immer antworten :-))


 

Beiträge aus den Excel-Beispielen zum Thema "Arrayfelder auf Gleichheit prüfen"