Wie ermittelt man in Excel (VBA) den Zelleninhalt bei verbundenen Zellen?

Inhalt bei verbundenen Zellen nicht immer erkannt. - (programmieren, Microsoft, Microsoft Excel)

4 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Hallo. quick & dirty:

Private Sub Worksheet_Activate()
  Dim iRow As Integer
  iRow = 4
  Do

    Worksheets("Test").Cells(iRow, 5) = Worksheets("Test").Cells(iRow, 1).MergeArea.Cells(1, 1).Value
    Worksheets("Test").Cells(iRow, 7) = Worksheets("Test").Cells(iRow, 2).MergeArea.Cells(1, 1).Value

    iRow = iRow + 1
    If iRow > Worksheets("Test").UsedRange.Rows.Count + Worksheets("Test").Cells(iRow, 1).MergeArea.Rows.Count Then Exit Do
  Loop
End Sub

Ausnahme, wenn letzte Zeile B verbunden ist letzte Zeile A aber nicht!!

Woher ich das weiß:Berufserfahrung – Softwareentewickler / Unternehmensberater bei CSDIT iR

maxbreak 
Fragesteller
 29.02.2012, 19:18

Danke, schaut beim ersten Test doch sehr gut aus!
Warum hast Du die Abbruchbedingung für die Schleife verändert?

0
geri3d  29.02.2012, 21:14
@maxbreak

Lass es weg, dann merkst du es. Dann werden die letzten verbundenen Zeilen nicht gezählt. UsedRange erkennt nicht ob die letzte Zeile verbunden ist.

0
maxbreak 
Fragesteller
 29.02.2012, 22:42
@geri3d

UsedRange ist in dem obigen Beispiel 17. Von daher füllt er genau bis zur richtigen Zeile 17 auf, wenn ich MergeArea.Rows.Count in der Abbruchbedinung weglasse. Wenn die Bedingung drin lasse, zählt er bis zur Zeile 19 und damit eigentlich zu weit!?

0
maxbreak 
Fragesteller
 29.02.2012, 22:49
@maxbreak

Ich habe jetzt noch in der Spalte B die Zeilen 18-23 verbunden und in der Spalte A diese Zeilen nicht verbunden. Auch dann ermittelt er die Werte bis zu Zeile 23 ohne die erweiterte Abbruchbedingung.

0
geri3d  29.02.2012, 22:59
@maxbreak

Hab es mir noch mal angeschaut. Du hast recht.

If iRow > Worksheets("Test").UsedRange.Rows.Count Then Exit Do

reicht völlig.

0

Deine Erwartungen werden nicht erfüllt.

Wenn man Zellen (mit Inhalt) verbindet, wird man gewarnt, dass der erste Wert verwandt wird. Wenn man das bestätigt (muss man ja), werden ausser dem ersten Wert ALLE anderen Werte gelöscht. Ja, gelöscht, weg, wie nie da gewesen.

EXCEL geht sogar so weit, dass es, wenn der verbundene Bereich mit einer Leerzelle beginnt, nach "Verbinden über Auswahl" und sogleich Rückgängigmachung des Befehls, den Inhalt der zweiten Zelle (die erste mit Inhalt) in die erste (bisher leere Zelle) verschiebt.

Also wird die Spalte B in dem Beispiel, trotz VBA-Abfrage, leer bleiben.

PS: ob eine Zelle verbunden ist, beantwortet der Befehl "ActiveCell.MergeCells"

Gruß aus Berlin

Woher ich das weiß:Hobby – Jahrelanges programmieren.

maxbreak 
Fragesteller
 29.02.2012, 10:23

Danke für die Antwort. Vieles ergibt sich ja schon aus der Fragestellung.
Es muß aber doch eine Möglichkeit geben, den gesuchten Wert anstatt Blank in einer bestimmten Zelle zu ermitteln? Das wäre eigentlich die Frage bzw. das Problem.

ActiveCell.MergeCells könnte ja schon mal ein erster Schritt sein. Damit würde man dann wissen, daß es sich um eine verbundene Zelle handelt. Wie bekommt man dann raus in welcher Zelle der gesuchte Wert steht? Gibt es vieleicht einen Befehl, der die oberste linke Ecke (Zelle) einer verbundenen Zelle zurückgibt?

0
Private Sub Worksheet_Activate()

  Dim iRow As Integer
  iRow = 4
  Do
    If Cells(iRow, 5) <> "" Then
       Cells(iRow, 5) = Cells(iRow, 1)
    Else
       Cells(iRow, 5) = Cells(iRow - 1, 5)
    End If

    If Cells(iRow, 7) <> "" Then
       Cells(iRow, 7) = Cells(iRow, 2)
    Else
       Cells(iRow, 7) = Cells(iRow - 1, 7)
    End If

  iRow = iRow + 1

 Loop Until iRow > Sheets("Test").UsedRange.Rows.Count


End Sub

maxbreak 
Fragesteller
 29.02.2012, 22:44

Ist leider nicht das was ich wollte. Man muß schon Mergearea verwenden.

0

Tja, ich habe nichts weiter gefunden, was die obere Ecke definieren kann.

Lediglich, dass mit "ActiveCell.MergeArea.Count" die Anzahl der verbundenen Zellen ermittelt wird.

PS: Wie kann man eigentlich den in der Frage befindlichen Text des VBA-Monitors hier in diese Seiten reinbekommen?

Gruß aus Berlin

Woher ich das weiß:Hobby – Jahrelanges programmieren.

maxbreak 
Fragesteller
 29.02.2012, 14:34

Wenn man hier eine Frage erstellt, kann man ein oder mehrere Bilder mit hochladen.

Die Bilder mußt Du halt vorher erzeugen:

Eine mögliche Vorgehensweise:
Bildschirmhardcopy z. B. mit "Drucken"-Taste vom Excel-Fenster erstellen.
Hardcopy in Bildbearbeitungsprogramm einfügen. (z. B. Paint)
Evlt. Bild nachbearbeiten/zuschneiden.
Bild im jpeg-Format abspeichern.
Bild mit Hochladen.

Meinst Du das?

0