Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Höchsten Wert ermitteln und niedrigere löschen (VBA)
#11
Hallo,

@joshua
Um es noch einmal klar zu stellen, ich wollte keinen wertenden Vergleich anstellen (ausser mit der Aussage das attilas Makro das effektiver Excel Makro ist).
Ich wollte dir nur aufzeigen, dass die Makros unterschiedliche Verhalten haben, auch wenn sie in deinem Beispiel die gleichen Ergebnisse liefern.
Du solltest sie nicht einfach übernehmen wenn sie nicht vollständiog erklärt oder von dir verstanden wurden.

@atilla
1) Du löscht keine Zeilen im Sinne des Kontextmenus "Zeilen löschen", sondern du entfernst den Inhalt dieser Zellen(ClearContents). Ob du zuerst den Inhalt des gesamten Bereiches löschst und dann mit weniger Daten überschreibst oder den gesamte Bereich überschreibst mit Leerzeilen am Ende ist für die Aussage, dass die Formate nicht mitverschoben werden doch uninteressant.

2) Mein Makro kopiert und leert auch Spalten nach der 17. Spalte. Die von dir aufgeführte Konstante wird nur genutz für die Ermittlung des Maximums, da ich innerhalb des Arrays nicht mit Q arbeiten kann..

3) Wenn ich den Begriff " CurrentRegion" parat gehabt hätte, hätte ich ihn auch genutz.
Es ist doch wahrscheinlicher, dass neben und unter einer Liste noch zusätzliche Daten stehen, als dass Leerzeilen innerhalb der Liste vorhanden sind.
Auf jeden Fall muss Joshua entscheiden was das Makro berücksichtigen soll.
helmut

Für mich ist die Möglichkeit in Excel an Zellen und Bereichen Namen zu vergeben die wichtigste Funktionalität.
Sie macht Formeln und den VBA-code verständlicher. Für Makros gilt die Regel: "Nur über benannte Bereiche auf den Inhalt der Zellen zugreifen."
Und wofür sind Regeln da? Um nachzudenken bevor man sie bricht.





Antworten Top
#12
Hast du überhaupt versucht das Makro zo verstehen ?


Code:
Sub M_snb()
    sn = sheet1.Range("A1:Q1").Offset([match(max(Q1:Q200),Q1:Q200,0)] - 1).Value
    sheet1.cells(1).currentregion.offset(1).clearcontents
    sheet1.cells(1,2).resize(,17)=sn
End Sub
Antworten Top
#13
Hallo snb,


man kann auch zurückfragen, hast Du versucht die Aufgabe zu verstehen.

Man muss offensichtlichen Laien etwas mehr entgegenkommen, denke ich.


Folgendes ist gegeben:

Arbeitsblatt mit dem Namen 'Tabelle2'
 ABCDEFGHIJKLMNOPQ
1                 
2AutoMotorGetriebeLüfterAutoMotorGetriebeLüfterAutoMotorGetriebeLüfterAutoMotorGetriebeLüfter1
3AutoMotorGetriebeLüfterAutoMotorGetriebeLüfterAutoMotorGetriebeLüfterAutoMotorGetriebeLüfter1
4AutoMotorGetriebeLüfterAutoMotorGetriebeLüfterAutoMotorGetriebeLüfterAutoMotorGetriebeLüfter2
5AutoMotorGetriebeLüfterAutoMotorGetriebeLüfterAutoMotorGetriebeLüfterAutoMotorGetriebeLüfter2
6AutoMotorGetriebeLüfterAutoMotorGetriebeLüfterAutoMotorGetriebeLüfterAutoMotorGetriebeLüfter2
7AutoMotorGetriebeLüfterAutoMotorGetriebeLüfterAutoMotorGetriebeLüfterAutoMotorGetriebeLüfter13
8AutoMotorGetriebeLüfterAutoMotorGetriebeLüfterAutoMotorGetriebeLüfterAutoMotorGetriebeLüfter23
9AutoMotorGetriebeLüfterAutoMotorGetriebeLüfterAutoMotorGetriebeLüfterAutoMotorGetriebeLüfter33
10AutoMotorGetriebeLüfterAutoMotorGetriebeLüfterAutoMotorGetriebeLüfterAutoMotorGetriebeLüfter43
11AutoMotorGetriebeLüfterAutoMotorGetriebeLüfterAutoMotorGetriebeLüfterAutoMotorGetriebeLüfter1
12AutoMotorGetriebeLüfterAutoMotorGetriebeLüfterAutoMotorGetriebeLüfterAutoMotorGetriebeLüfter1
Diese Tabelle wurde mit Tab2Html (v2.4.1) erstellt. ©Gerd alias Bamberg

Dein Makro in deutsche Schreibweise angepasst :

Code:
Sub M_snb()
   sn = Tabelle1.Range("A1:Q1").Offset([match(max(Q1:Q200),Q1:Q200,0)] - 1).Value
   Tabelle1.Cells(1).CurrentRegion.Offset(1).ClearContents
   Tabelle1.Cells(1, 2).Resize(, 17) = sn
End Sub


und das ist das Ergebnis:

Arbeitsblatt mit dem Namen 'Tabelle1'
 ABCDEFGHIJKLMNOPQR
1 AutoMotorGetriebeLüfterAutoMotorGetriebeLüfterAutoMotorGetriebeLüfterAutoMotorGetriebeLüfter13
2                  
Diese Tabelle wurde mit Tab2Html (v2.4.1) erstellt. ©Gerd alias Bamberg
Gruß Atilla
Antworten Top
#14
Ganz schön ätzend dieser Etzel.

Aus  Wikipedia zu Attila:
Zitat:Als legendäre Figur König Etzel  lebte Attila ...
helmut

Für mich ist die Möglichkeit in Excel an Zellen und Bereichen Namen zu vergeben die wichtigste Funktionalität.
Sie macht Formeln und den VBA-code verständlicher. Für Makros gilt die Regel: "Nur über benannte Bereiche auf den Inhalt der Zellen zugreifen."
Und wofür sind Regeln da? Um nachzudenken bevor man sie bricht.





Antworten Top
#15
Es geht um die Methode; anpassen hilft immer beim Verstehen eines Codes.
Vorschläge sind nicht nur für der TS, doch für alle heutige und künftige Besucher (nicht nur Laien).
NB. VBA ist nichts für Laien.

Ich bin sicher dass der TS keine Mühe geleistet hat den Vorschlag zu verstehen.

Code:
Sub M_snb()
   Range("A2:Q2") = Range("A1:Q1").Offset([match(max(Q1:Q100),Q1:Q100,0)-1]).Value
   Range("A3:Q200").ClearContents
End Sub
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste