Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1016to1020
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Bitte um Hilfe bei Array und Schleifen

Bitte um Hilfe bei Array und Schleifen
20.10.2008 15:02:00
chris
Hallo VBA experten,
ich bin schon öfter hier gewesen und weiß das einem hier immer geholfen wird.
Deshalb habe ich heute eine frage und hoffe ihr könnt mir helfen.
Ich bin gerade dabei ein makro zu bauen.
Und wollte hier einmal nachfragen wie ihr das machen würdet um dem ganzen auch eine hohe Geschwindigkeit zu geben weil bei mir auch viele daten vorhanden sind.
Hier meine Aufgabe die ich schaffen muss.
Ich habe in einer bestimmten Spalte werte untereinander stehen.
diese habe ich mir gedacht schreibe ich in ein Arry.
Aber nur wenn in einer anderen Spalte(7) eine Zahl steht die größer ist als 0.
Wie mache ich das am geschicktesten ?
Vielen Dank für eure Hilfe.
Hier der Code den ich bis jetzt habe:
Option Explicit

Sub hole_daten()
Dim z As Integer 'Zähler für Schleife
Dim x As Integer 'Zähler für Schleife
Dim inNr() As String 'Array Container für nunmern
Dim ii As Integer 'Zähler für Anzahl Werte in Array
'Schleife um die Spalte zu finden in der die benötigten Werte stehen(ob prüfung i.o oder nicht
For z = 1 To 255
If Datendatei.Worksheets("Messdaten").Cells(19, z).Value = "0 = i.O." Then
GoTo Spalte_gefunden
End If
Next
MsgBox ("Datei nicht OK - Bitte eine andere Datei wählen"), vbCritical, "abbruch"
Exit Sub
Spalte_gefunden:
ii = 0
For x = 21 To Datendatei.Worksheets("Messdaten").Cells(Rows.Count, z).End(xlUp).Row
If Datendatei.Worksheets("Messdaten").Cells(x, z).Value > 0 Then
inNr(ii) = Datendatei.Worksheets("Messdaten").Cells(x, z).Value
ii = ii + 1
Else
End If
Next
'und hier müsste ich z.b die ganzen einzelwerte aus dem Array inNr in eine leere Tabelle ü _
bergeben.
End Sub


14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Bitte um Hilfe bei Array und Schleifen
20.10.2008 15:11:15
Beverly
Hi Chris,
weshalb erst in ein Array einlesen? Übertrage die Werte doch sofort, wenn die Bedingung erfüllt ist, nach diesem Prinzip

For x = 21 To Datendatei.Worksheets("Messdaten").Cells(Rows.Count, z).End(xlUp).Row
If Datendatei.Worksheets("Messdaten").Cells(x, z).Value > 0 Then
Worksheets("Neue_Tabelle").Cells(ii, 1) = Datendatei.Worksheets("Messdaten").Cells(x, z) _
.Value
ii = ii + 1
End If
Next x




AW: Bitte um Hilfe bei Array und Schleifen
20.10.2008 15:17:11
chris
Hallo Karin,
danke für den Tipp.
Aber bei vielen tausenden datein geht das mit einem Array schneller.
Deshalb möchte ich das ganz mit einem Array lösen.
Danke und bitte um weitere Hilfe!
gruß Chris
Anzeige
AW: Bitte um Hilfe bei Array und Schleifen
20.10.2008 15:33:00
Rudi
Hallo,
probier mal:

Sub hole_daten()
Dim z As Integer 'Zähler für Schleife
Dim x As Integer 'Zähler für Schleife
Dim inNr()  'Array Container für nunmern
Dim ii As Integer 'Zähler für Anzahl Werte in Array
Dim iRows As Long
'Schleife um die Spalte zu finden in der die benötigten Werte stehen(ob prüfung i.o oder  _
nicht
On Error Resume Next
z = Application.Match("0 = i.O.", Datendatei.Worksheets("Messdaten").Rows(19), 0)
On Error GoTo 0
If IsError(z) Then
MsgBox ("Datei nicht OK - Bitte eine andere Datei wählen"), vbCritical, "abbruch"
Else
With Datendatei.Worksheets("Messdaten")
iRows = .Cells(Rows.Count, z).End(xlUp).Row
ReDim inNr(1 To 1, 1 To iRows)
For x = 21 To iRows
If .Cells(x, z).Value > 0 Then
ii = ii + 1
inNr(ii) = .Cells(x, z).Value
End If
Next x
End With
ReDim Preserve inNr(1 To 1, 1 To ii)
'und hier müsste ich z.b die ganzen einzelwerte aus dem _
Array inNr in eine leere Tabelle übergeben.
Sheets("Daten").Cells(Rows.Count, 1).End(xlUp).Offset(1, 1).Resize(ii, 1) =  _
WorksheetFunction.Transpose(inNr)
End Sub


Gruß
Rudi

Anzeige
AW: Bitte um Hilfe bei Array und Schleifen
20.10.2008 16:34:00
chris
Danke Rudi teste ich morgen!
Vielen dank
AW: Bitte um Hilfe bei Array und Schleifen
20.10.2008 20:22:11
chris
Hallo Rudi,
ich muss doch noch mal offen stellen.
Vielleicht kannst du mir das beantworten.Obwohl ich mir sicher bin das du das kannst.
In diesen beiden Zeilen dimensionierst du wie ich sehe das array.
iRows = .Cells(Rows.Count, z).End(xlUp).Row
ReDim inNr(1 To 1, 1 To iRows)
Aber das Problem was ich jetzt sehe ist ja das der Wert in iRows ja höher ist als das Array wirklich groß ist weil ja nicht jede zeile eine 0 enthält.Muss ich danach das Array wieder kleiner dimensionieren ?
iRows = .Cells(Rows.Count, z).End(xlUp).Row
Ich habe mir schon überlegt mit Redim preserve zu Arbeiten aber das bremst ja weider total.
Danke noch einmal für deine Hilfe.
Würde mich natürlich auch über andre Hilfen freuen falls Rudi nicht mehr da ist.!
Danke an alle !
gruß Chris
Anzeige
AW: Bitte um Hilfe bei Array und Schleifen
20.10.2008 20:32:00
Uduuh
Hallo,

Muss ich danach das Array wieder kleiner dimensionieren ? 


Genau das passiert hier:


End With
ReDim Preserve inNr(1 To 1, 1 To ii)



aber das bremst ja weider total.


Ein einmaliges ReDim ist zwar nicht sehr schön, aber auch nicht weiter tragisch. Schlimmer wäre es, das Array bei jedem Treffer neu zu dimensionieren.
Gruß aus’m Pott
Udo

AW: Bitte um Hilfe bei Array und Schleifen
20.10.2008 21:19:00
chris
Danke auch dir vielmals.
Das war mir alles nicht so klar.
Vielen Dank und schönen Abend !
Anzeige
AW: Bitte um Hilfe bei Array und Schleifen
20.10.2008 21:19:34
chris
Danke auch dir vielmals.
Das war mir alles nicht so klar.
Vielen Dank und schönen Abend !
Tatsächlich?
20.10.2008 15:40:43
Jürgen
Hallo Chris,
Du meinst also, erst die Daten aus einer Zelle in ein Array zu lesen und dann aus dem Array in die Zelle zu schreiben geht schneller als Daten ohne Umweg von einer in eine andere Zelle zu transferieren?
Ich würde Dir empfehlen, den Vorschlag von Karin zu verfolgen - das erspart Dir zudem, das Problem mit der richtigen Dimensionierung des Arrays lösen zu müssen, das Du in Deinem Codebeispiel noch nicht berücksichtigt hast.
Gruß, Jürgen
AW: Tatsächlich?
20.10.2008 16:42:27
Rudi
Hallo,

Du meinst also, erst die Daten aus einer Zelle in ein Array zu lesen und dann aus dem Array in  _
die Zelle zu schreiben geht schneller als Daten ohne Umweg von einer in eine andere Zelle zu transferieren?


Das ist definitiv so. Noch schneller geht's wenn man das Array nicht aus Zellen, sondern aus einem anderen Array füllt.
Gruß
Rudi

Anzeige
AW: Tatsächlich?
20.10.2008 18:06:58
chris
Danke für deine Unterstützung Rudi.
AW: Bitte Hilfe
21.10.2008 07:46:17
chris
Hallo guten morgen an alle, ich benötige Hilfe.
habe den Code gerade getestet und es kommt ein fehler.HIER:
inNr(ii) = .Cells(x, z).Value
Es kommt: Laufzeitfehler 9 Index auserhalb des des gültigen Bereichs.
Ich glaube es liegt an dieser Zeile:ReDim inNr(1 To 1, 1 To iRows)
Aber ich denke Rudi weiß schon warum er nicht einfach so schreibt:
ReDim inNr(iRows)
Danke gruß Chris
AW: Bitte Hilfe
21.10.2008 12:32:00
Rudi
Hallo,
mein Fehler.
inNr(1, ii) = .Cells(x, z).Value
Gruß
Rudi
AW: Bitte Hilfe
21.10.2008 14:11:36
chris
Dankeschön !
Schönen Tag noch !

299 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige