Autor
|
Thema: Zelle links-oben und rechts-unten erhalten (1583 mal gelesen)
|
Fritz5002 Mitglied Techniker
Beiträge: 29 Registriert: 23.10.2009 Win XP
|
erstellt am: 30. Nov. 2009 15:15 <-- editieren / zitieren --> Unities abgeben:
Hallo, kann mir jemand einen Tip geben, wie ich aus einem ausgewählten Bereich die Position der Zelle links oben und die von rechts unten erhalten kann? Ich möchte mit der Maus einen Bereich auswählen und diesen anschließend mit Zwischensummen und Gesamtwert berechnen und nach einer bestimmten Vorgabe formatieren lassen. Das Makro muss unter Excel-2000, -2003 und -2007 laufen können. Hab bis heute keine Idee, wie ich an diese Zellpositionen ran komme. Gruß Fritz Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Paulchen Mitglied Bauing./SW-Entwickler
Beiträge: 1227 Registriert: 19.08.2004 Büro: Win10 Enterprise 64bit, Office Professional Plus 2013 - Privat: Linux Mint 15, LibreOffice
|
erstellt am: 30. Nov. 2009 15:49 <-- editieren / zitieren --> Unities abgeben: Nur für Fritz5002
Hallo Fritz, teste diesen Ansatz: Code: Sub auswahl_pos()Dim rgFirst As Range Dim rgLast As Range 'Sicherheitsabfragen If Selection.Cells.Count < 2 Then Exit Sub 'BEREICH, keine einzelne Zelle; bei Bedarf mit Rows/Columns verfeinern If Selection.Cells.Count <> Selection.Rows.Count * Selection.Columns.Count Then Exit Sub 'mehrere Bereiche - z. B. via Strg-Taste - markiert 'Belegen Set rgFirst = Selection.Cells(1) Set rgLast = Selection.Cells(Selection.Cells.Count) 'Kontrolle Debug.Print rgFirst.Address 'zu Testzwecken: Im Direktbereich ausgeben... Debug.Print rgLast.Address '... weiterer Code 'Putzen Set rgFirst = Nothing Set rgLast = Nothing End Sub
------------------ DIN1055.de | Lastannahmen für Anwender NEU: Foren zu DIN 1055 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
startrek Moderator Architekt
Beiträge: 1361 Registriert: 13.02.2003 .
|
erstellt am: 30. Nov. 2009 17:04 <-- editieren / zitieren --> Unities abgeben: Nur für Fritz5002
|
Fritz5002 Mitglied Techniker
Beiträge: 29 Registriert: 23.10.2009 Win XP
|
erstellt am: 30. Nov. 2009 21:23 <-- editieren / zitieren --> Unities abgeben:
Hallo Paulchen, das ist genau das RICHTIGE. An die Möglichkeit das jemand mehrere Bereiche selektiert hatte ich noch garnicht gedacht. Ist für meine Aufgabenstellung auch nicht erwünscht. Damit ist die Verzweigung zum Ausgang für diesen Fall eine sehr gute Ergänzung. Besten Dank. Hab die Units schon abgeschickt. Hallo Startrek, schönen Dank für diese mögliche Ergänzung. Ich werd sie in diesem Fall zwar nicht benötigen, aber es ist eine Möglichkeit für andere Fälle. Man weiss ja nie, ob man es einmal braucht. Gruß Fritz
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Paulchen Mitglied Bauing./SW-Entwickler
Beiträge: 1227 Registriert: 19.08.2004 Büro: Win10 Enterprise 64bit, Office Professional Plus 2013 - Privat: Linux Mint 15, LibreOffice
|
erstellt am: 01. Dez. 2009 14:34 <-- editieren / zitieren --> Unities abgeben: Nur für Fritz5002
Tach, Zitat: Ich werd sie in diesem Fall zwar nicht benötigen...
Fast richtig ;-). Startreks Code ist eine saubere Vereinfachung meines Vorschlages - ich hatte nur .Areas gerade nicht parat. Code: If Selection.Cells.Count < 2 Then Exit Sub If Selection.Cells.Count <> Selection.Rows.Count * Selection.Columns.Count Then Exit Sub 'lässt sich zusammenfasse in --> If Selection.Cells.Count < 2 Or Selection.Areas.Count > 1 Then Exit Sub
Meine Aktion "Zeile x Spalte" ist umständlicher, länger, erfordert eine zusätzliche Berechnung... Mit startreks Vorschlag werden zwei Fliegen mit einer Klappe geschlagen - in einer Zeile: Besser, schneller, übersichtlicher.------------------ DIN1055.de | Lastannahmen für Anwender NEU: Foren zu DIN 1055 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Beverly Mitglied Dipl.-Geologe (Rentner)
Beiträge: 394 Registriert: 11.08.2007
|
erstellt am: 01. Dez. 2009 16:22 <-- editieren / zitieren --> Unities abgeben: Nur für Fritz5002
Hi zusammen, hier noch eine Möglichkeit (auch mit Auslesen bei mehreren selektierten Zellen):
Code: Sub ExckzellenAuslesen() Dim strBereich As String Dim raBereich As Range If Selection.Areas.Count > 1 Then For Each raBereich In Selection.Areas strBereich = strBereich & vbLf & raBereich.Cells(1).Address & " " & raBereich.Cells(raBereich.Cells.Count).Address Next raBereich Else If Selection.Cells.Count = 1 Then strBereich = Selection.Cells(1).Address Else strBereich = Selection.Cells(1).Address & " " & Selection.Cells(Selection.Cells.Count).Address End If End If MsgBox strBereich End Sub
------------------ Bis später, Karin Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Fritz5002 Mitglied Techniker
Beiträge: 29 Registriert: 23.10.2009 Win XP
|
erstellt am: 06. Dez. 2009 18:10 <-- editieren / zitieren --> Unities abgeben:
Einen schönen Abend wünsch ich. Schönen Dank für die Anregungen. Selbst bin ich schon etwas raus aus der Programmierung. Hatte auch erst etwas Probleme mich hier anzumelden. Dann kam laufend was dazwischen. Hier meine gewählte (beforzugte) Version: iZeileOben = Selection.Cells(1).Row iZeileUnten = Selection.Cells(Selection.Cells.Count).Row iSpalteLinks = Selection.Cells(1).Column iSpalteRechts = Selection.Cells(Selection.Cells.Count).Column Das sind alles einfache Variable, keine Objekte. Damit kann ich bei dem weiteren Zellzugriff im direkten Gedankengang die entsprechenden Ausführungen ansteuern. Die Variante
If Selection.Areas.Count > 1 Then.... nutze ich in diesem Fall nur für die sichere Ausgrenzung einer Mehrfachauswahl über die Ctrl-Taste. Das war eine gute Idee. Ihr habt mir sehr geholfen Mit freundlichen Grüßen Fritz
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Fritz5002 Mitglied Techniker
Beiträge: 29 Registriert: 23.10.2009 Win XP
|
erstellt am: 18. Apr. 2010 19:29 <-- editieren / zitieren --> Unities abgeben:
Hallo Beverly, wie es so ist, habe heute noch einmal rein gucken müssen, weil ich jetzt einen Fall habe, wo ich eine Mehrfachauswahl abfragen muss. Besten Dank noch einmal für die Anregungen. Mit der Bereichsabfrage damals habe ich mir eine diverse Summenerfassung gebastelt. Funktioniert bestens, da ich das Makro sehr oft benötige ist es auch eine große Erleichterung. Ich greife mit der Maus die Bereiche, die für eine Summenbildung benötigt werden. Mit der Unterscheidung 1. nur ein Feld (ist das Ergebnis) 2. nur eine Spalte ergibt eine Summe und 3. mehrere Spalten nebeneinander ergeben je eine Summe und eine gemeinsame Summe. Das Ergebnis jeweils immer Fett hervor gehoben und doppelt unterstrichen. Also mit vollständiger Formatierung. Funktioniert einfach bestens. Das zur Info, was dabei rausgekommen ist. Mit der Mehrfachabfrage bin ich jetzt auch etwas schlauer. Habe die Mehrfachabfrage für ein anderes Programm getestet (ich kam mit dem Beispiel gut klar, konnte es auch umstellen, ohne selektieren) und kam zu dem Ergebnis, dass ich einen anderen Weg beschreiten muss, der variabler ist. Der oder die Bereiche könnten sich irgend wann verändern und dann müßte ich das Programm umschreiben. Ich mache es mit einfacher Abfrage und Verzweigungsmöglichkeit über eine Hilfsdatei, in der die Wege dann beliebig variieren können. Trotzdem vielen Dank für die Unterstützung. Beste Grüße von Fritz
[Diese Nachricht wurde von Fritz5002 am 19. Apr. 2010 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |