Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  Excel
  Anzahl Zeilen als Variable verwenden

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
Autor Thema:  Anzahl Zeilen als Variable verwenden (1088 mal gelesen)
Tammy89
Mitglied



Sehen Sie sich das Profil von Tammy89 an!   Senden Sie eine Private Message an Tammy89  Schreiben Sie einen Gästebucheintrag für Tammy89

Beiträge: 24
Registriert: 28.07.2016

Microsoft Office 2010
Windows 7

erstellt am: 07. Feb. 2017 14:40    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo zusammen,

ich hätte nochmal eine Frage.
Ich habe eine Excel-Tabelle mit verschiedenen Artikeln. Diese Liste kann jederzeit größer werden.
Nun möchte ich beim Hinzufügen eines Artikels nicht jedes Mal mein Makro anpassen, sondern die Anzhal Zeilen als Variable nutzen.

In der Liste mit den Artikeln wird gefiltert und es werden Daten kopiert, per Makro.

Code:
Worksheets("Bestand").Range("B2:B74"). _
    SpecialCells(xlCellTypeVisible).Copy
Worksheets("Berechnung").Range("C15").PasteSpecial xlPasteValues

In der ersten Zeile möchte ich nun das B74 durch eine Variable ersetzen, bzw. die Zahl 74.

Ich habe eine Variable definiert:
Dim b As Long
b = Worksheets("Bestand").Cells(Rows.Count, 1).End(xlUp).Row

Leider schlugt jede Variante fehl, die ich bisher versucht habe.
Worksheets("Bestand").Range("B2:B&b"). _
Worksheets("Bestand").Range("B2:B+b"). _
Worksheets("Bestand").Range("B2:B"&b). _
Worksheets("Bestand").Range("B2:B"+b). _

Kann mir da evtl. jemand weiter helfen?

Anfangs hatte ich anstatt der B74 ein B1000 drin, aber dann bekomme ich an anderen Stellen des Makro Probleme, deshalb wollte ich mich auf die tatsächliche Anzahl Zeilen beziehen.

Danke und Gruß
Tammy

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

runkelruebe
Moderator
Straßen- / Tiefbau




Sehen Sie sich das Profil von runkelruebe an!   Senden Sie eine Private Message an runkelruebe  Schreiben Sie einen Gästebucheintrag für runkelruebe

Beiträge: 8075
Registriert: 09.03.2006

MS-Office 365 ProPlus x86
WIN7(x64)

erstellt am: 07. Feb. 2017 15:16    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Tammy89 10 Unities + Antwort hilfreich

Code:
Sub Beispiel()
Dim a%
a = 25
    Sheets(1).Range("A1:A" & a & "").Interior.Color = 250
End Sub

------------------
Gruß,
runkelruebe          Herr Kann-ich-nich wohnt in der Will-ich-nich-Straße...

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Patrick Weber
Mitglied
Konstruktionstechniker, Admin


Sehen Sie sich das Profil von Patrick Weber an!   Senden Sie eine Private Message an Patrick Weber  Schreiben Sie einen Gästebucheintrag für Patrick Weber

Beiträge: 657
Registriert: 20.11.2006

Win7 Pro SP1 64Bit
HP Z230, Core i5, 8GB RAM, nv Quadro K600
Creo Elements/Direct 19.0 M010
ModelManager 19.0 M010
clisp,VB.net,VBA,AHK,php,javascript

erstellt am: 07. Feb. 2017 15:51    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Tammy89 10 Unities + Antwort hilfreich

Bei Zeichenfolgenverkettung muss das Ampersand beideitig durch Leerzeichen von den zu verkettenden Zeichenfolgen getrennt sein.

Worksheets("Bestand").Range("B2:B" & b). _

Sauberer übrigens, wenn man Zahlen explizit in den Typ String konvertiert:

Worksheets("Bestand").Range("B2:B" & CStr(b)). _


------------------
Patrick

[Diese Nachricht wurde von Patrick Weber am 07. Feb. 2017 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Beverly
Mitglied
Dipl.-Geologe (Rentner)


Sehen Sie sich das Profil von Beverly an!   Senden Sie eine Private Message an Berverly  Schreiben Sie einen Gästebucheintrag für Berverly

Beiträge: 394
Registriert: 11.08.2007

erstellt am: 07. Feb. 2017 17:12    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Tammy89 10 Unities + Antwort hilfreich

Hi,

ich würde es so lösen:

Code:
    Dim lngLetzte As Long
    With Worksheets("Bestand")
        ' letzte belegte Zeile in Spalte A
        lngLetzte = .Columns(1).Find(What:="*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
        .Range(.Cells(2, 2), .Cells(lngLetzte, 2)).SpecialCells(xlCellTypeVisible).Copy
        Worksheets("Berechnung").Range("C15").PasteSpecial xlPasteValues
    End With


Die Benutztung von Cells ist generell, aber insbesondere bei Bereichen, die über eine Variable definiert werden, günstiger, weil Excel intern alle Zellbzeichnungen in der Form Zeilennummer/Spaltennummer ablegt und nicht Spaltenbuchstabe/Zeilnnummer. Bei Verwendung von Range("A2:A" & lngVariable) muss Excel also unnötigerweise erst den Spaltenbuchstaben in die Spaltennummer umrechnen und dann in der gewohnten Weise zusammensetzen was natürlich Zeit kostet. Ist sicher nicht so dramatisch, wenn mann nur einen kurzen Code hat, aber bei umfangreichen Programmen kann das durchaus negativen Einfluss auf die Performance haben.

------------------
Bis später,
Karin

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Tammy89
Mitglied



Sehen Sie sich das Profil von Tammy89 an!   Senden Sie eine Private Message an Tammy89  Schreiben Sie einen Gästebucheintrag für Tammy89

Beiträge: 24
Registriert: 28.07.2016

Microsoft Office 2010
Windows 7

erstellt am: 08. Feb. 2017 10:16    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Super, vielen Dank 

Die Variante von Patrick Weber hat bestens funktioniert

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Bernd P
Ehrenmitglied V.I.P. h.c.
cook-general



Sehen Sie sich das Profil von Bernd P an!   Senden Sie eine Private Message an Bernd P  Schreiben Sie einen Gästebucheintrag für Bernd P

Beiträge: 3358
Registriert: 07.06.2001

erstellt am: 08. Feb. 2017 10:23    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Tammy89 10 Unities + Antwort hilfreich

servus, oder letztezeile = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row gibt die letzte verwendete Zeile überhaupt an.

------------------
<----- Bitte Systeminfo eintragen, warum siehst du hier.

Schöne Grüsse aus der Steiermark  Bernd P.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Beverly
Mitglied
Dipl.-Geologe (Rentner)


Sehen Sie sich das Profil von Beverly an!   Senden Sie eine Private Message an Berverly  Schreiben Sie einen Gästebucheintrag für Berverly

Beiträge: 394
Registriert: 11.08.2007

erstellt am: 08. Feb. 2017 12:54    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Tammy89 10 Unities + Antwort hilfreich

Dann würde ich schon eher

Code:
Cells.Find(What:="*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row


verwenden, weil andernfalls auch Zeilen unterhalb der optisch letzten belegten Zeile gefunden werden, aus deren Zellen Inhalte gelöscht wurden und somit würde der tatsächlich "gewünschte" benutzte Bereich nicht korrekt (weil größer) definiert.

------------------
Bis später,
Karin

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Bernd P
Ehrenmitglied V.I.P. h.c.
cook-general



Sehen Sie sich das Profil von Bernd P an!   Senden Sie eine Private Message an Bernd P  Schreiben Sie einen Gästebucheintrag für Bernd P

Beiträge: 3358
Registriert: 07.06.2001

W10-64bit, AMD Ryzen 7 3700X,32GB RAM, Sapphire Pulse Radeon RX 570 8G G5, Canon TX-3000 MFP, Maus Cherry MW4500, Sub:Infrastructure Design Suite, Office 365

erstellt am: 08. Feb. 2017 14:05    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Tammy89 10 Unities + Antwort hilfreich

servus, thy hab ansonsten die Zellen per Hand gelöscht.

------------------
<----- Bitte Systeminfo eintragen, warum siehst du hier.

Schöne Grüsse aus der Steiermark  Bernd P.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz