Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1196to1200
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

[Array] Jedes 2. Element löschen ?

[Array] Jedes 2. Element löschen ?
Matthias
Hallo,
ich habe hier ein Meßgerät, dessen Meßdaten ich bisher immer mit folgendem VBA-Code auf den Computer einlesen konnte:
instrument.WriteString ":CALC1:DATA:FDAT?"
array1() = instrument.ReadList()
Range("I10:I" & UBound(array1) + 10) = Application.WorksheetFunction.Transpose(array1)
array1() enthält die Meßwerte, quasi in einer langen Zeile. In der letzten Zeile wird das Array transponiert, damit ich es direkt in eine Spalte in Excel einfügen kann.
Das Problem: Wir haben ein neues Gerät und das liefert für jedes 2. Element den Wert '0'. Die Ergebnisse sehen also z.B. so aus "0.43, 0, 0.23, 0, 0.99, 0, 0.35, 0". Das stört natürlich.
Kann ich diese Nullen irgendwie löschen ? Eigentlich müßte ich ja nur jedes 2. Arrayelement rausstreichen ?
AW: [Array] Jedes 2. Element löschen ?
02.02.2011 16:37:35
Rudi
Hallo,
das musst du in ein anderes Array umschaufeln.
Motto:
dim Arr2(1 to ubound(Array1)/2, 1 to 1)
for i=lbound(array1) to ubound(array1) Step 2
n=n+1
arr2(n,1)=array1(i)
next i
arr2 musst (darfst) du dann auch nicht mehr transponieren.
Gruß
Rudi
du kannst natürlich auch ...
02.02.2011 16:41:11
Rudi
Hallo,
diese Prozedur
instrument.ReadList()
anpassen.
Gruß
Rudi
AW: [Array] Jedes 2. Element löschen ?
02.02.2011 16:50:32
Josef

Hallo Matthias,
probier mal.
array1 = Filter(array1, ",", True, 1)

Range("I10").Resize(UBound(array1) + 1, 1) = Application.Transpose(array1)


Gruß Sepp

Anzeige
schöne Funktion
02.02.2011 17:00:44
Rudi
Hallo Sepp,
kannte ich bislang nicht. Werd ich mir merken.
In dem vorliegenden Fall aber grenzwertig. Das wirft ja nicht unbedingt jeden zweiten Wert raus.
Gruß
Rudi
wenn sein Beispiel stimmt, dann ...
02.02.2011 17:29:31
Josef

Hi Rudi!
... werden alle 0en rausgeworfen, da ich davon ausgehe, das die Messwerte alle mit einem Komma ausgegeben werden.
Sonst hat er ja Alternativen;-))

Gruß Sepp

Anzeige
AW: wenn sein Beispiel stimmt, dann ...
02.02.2011 19:35:21
Rudi
Hallo,
wenn man die Nullen rauswerfen will, sollte man dann den Spieß nicht umdrehen?
Array1=Filter(Array1, 0, False, 1)
Gruß
Rudi
dann schmeißt er aber auch 0,93 raus! o.T.
02.02.2011 19:41:01
Josef
Gruß Sepp

AW: [Array] Jedes 2. Element löschen ?
02.02.2011 17:45:31
Matthias
Vielen Dank für die Antworten !
Die Methode von Sepp ist natürlich genial, wobei sie allerdings bei mir nicht funktioniert; ich erhalte die Fehlermeldung "Typen unverträglich" , sobald die Zeile mit der Filter-Funktion erreicht wird.
Da wir hier in der Firma aus irgendwelchen unerklärlichen Gründen die Office-Hilfe nicht installiert haben, werde ich das ganze erst zuhause weiterverfolgen.
ah, ich sehe gerade: Die Meßwerte befinden sich ja bereits in array1 (vom Typ Variant). Im Fenster für Überwachungsausdrücke sieht das dann wie folgt aus:
array1(0) = 0,422
array1(1) = 0
array1(2) = 0,252
array1(3) = 0
Das Trennzeichen innerhalb der Zahlen ist also das Komma, aber wie werden intern die einzelnen Elemente voneinander getrennt, also z.B. array1(0) und array1(1) ?
Anzeige
Array
02.02.2011 19:32:04
Rudi
Hallo,
aber wie werden intern die einzelnen Elemente voneinander getrennt, also z.B. array1(0) und array1(1) ? 

Kannst du dir wie ein Regal vorstellen. Für jedes Element ein Fach.
Gruß
Rudi
OT Vba-Hilfe
02.02.2011 19:42:19
Reinhard
Hallo Matthias,
"Da wir hier in der Firma aus irgendwelchen unerklärlichen Gründen die Office-Hilfe nicht installiert haben"
dann muß da jmd. der alle Rechte hat, das Office-Setup nochmal starten und die Vba-Hilfe installieren, sie steht nicht unter Excel sondern bei Office Allgemein oder wie das heißt.
Gruß
Reinhard
ARRAY auf die Hälfte komprimieren
02.02.2011 16:52:03
NoNet
Hallo Matthias,
hier ein Beispiel-Code, wie Du das Array komprimieren kannst :
Sub Array_Komprimieren()
Dim arT(), intI As Integer
ReDim arT(10)
For intI = LBound(arT) To UBound(arT)
'nur jedes 2. ARRAY-Element mit Wert>0 befüllen :
If intI Mod 2 Then
arT(intI) = 0 'jeden 2.Wert mit 0 befüllen
Else
arT(intI) = 100 + intI
End If
Next
MsgBox Join(arT, vbLf), , "Alt" 'Komplettes Array mit Zeilenumbruch anzeigen
'Nur jeden zweiten Wert in neues Array übernehmen
For intI = LBound(arT) To UBound(arT) / 2
arT(intI) = arT(intI * 2)
Next
ReDim Preserve arT(UBound(arT) / 2) 'Array auf die Hälfte reduzieren
MsgBox Join(arT, vbLf), , "Neu" 'Komplettes NEUES Array mit Zeilenumbruch anzeigen
End Sub
Gruß, NoNet
Anzeige
oder per Dictionary
02.02.2011 17:07:37
Rudi
Hallo,
dein Code abgewandelt:
Sub Array_Komprimieren()
Dim arT(), intI As Integer, oArr As Object
ReDim arT(10)
Set oArr = CreateObject("scripting.dictionary")
For intI = LBound(arT) To UBound(arT)
'nur jedes 2. ARRAY-Element mit Wert>0 befüllen :
If intI Mod 2 Then
arT(intI) = 0 'jeden 2.Wert mit 0 befüllen
Else
arT(intI) = 100 + intI
End If
Next
MsgBox Join(arT, vbLf), , "Alt" 'Komplettes Array mit Zeilenumbruch anzeigen
'Nur jeden zweiten Wert in neues Array übernehmen
For intI = LBound(arT) To UBound(arT) Step 2
oArr(intI) = arT(intI)
Next
MsgBox Join(oArr.items, vbLf), , "Neu" 'Komplettes NEUES Array mit Zeilenumbruch anzeigen
End Sub

Gruß
Rudi
Anzeige

303 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige