2016-05-31 2 views
0

Also habe ich ein Problem, wo ich feststecke und kann keinen Weg finden, es zu lösen. Mein Code ist im Voraus erklärt, aber das Hauptproblem ist, dass ich eine glättende Exponentialfunktion mit ATPVBAEN nach Abschnitten anwenden muss, da Daten nicht immer vorhanden sind, obwohl meine x-Achse für jede Messung progressiv sein muss und einige übersprungen werden können. wie unten angezeigt: 0 34,5 2 40,6 4 41,5 10 30,4 12 32,9 Da ich in einem Satz von Daten exponentielle Glättung verwenden muß, so programmatisch zugegriffen I in der folgenden Form des ATPVBAEN Add- in Excel zur Verfügung gestellt. Vorbereitung meiner Daten:Wie kann man ATPVBAEN in einem Datensatz mit übersprungenen Daten innerhalb derselben Spalte anwenden?

Dim plan As Worksheet 
    Set plan = ThisWorkbook.Sheets("PLANILLA") 
    Dim plan2 As Worksheet 
    Set plan2 = ThisWorkbook.Sheets("FILTER") 
    Dim data As Worksheet 
    Set data = ThisWorkbook.Sheets("DATA") 

Erste Versetzungen und Werte Bewältigungs von Originaldaten extrahiert werden, bevor er exponentielle Glättung verwendet wird.

k = data.Range("C2", data.Range("C2").End(xlDown)).Rows.Count 'Find last index x axis column 
p = k + 15 'Set offset 
plan2.Range("K16", "K" & p).Value = data.Range("E2", "E" & k + 1).Value 'Copy values 
plan2.Range("L16", "L" & p).Value = data.Range("E2", "E" & k + 1).Value 
plan2.Range("M16", "M" & p).Value = data.Range("F2", "F" & k + 1).Value 

Nun betreiben ich die Funktion, die mir die Daten glätten zu tun erlaubt, Daten in der Zeile L (destination) Anordnen, um die Daten aus der Spalte D unter Verwendung von (Ursprung). So endlich habe ich die folgenden:

Application.Run "ATPVBAEN.XLAM!Expon", plan2.Range("L16", "L" & p), plan2.Range("D16", "D" & p), smoothVal, False, False, False 

Hier ist, wo ich einen Weg brauche, in dem ich die Funktion in den Abschnitten anwenden kann, weil ich Daten, die einige Zellen überspringen, so dass sie leer. Das Problem ist, dass Excel leere Daten als 0 annimmt und meine Messungen auf eine sehr schlechte Weise beeinflusst werden. Gibt es eine Arbeit um die ATPVBAEN durch Teile wie in einer for-Schleife anzuwenden (Setzen Sie bei jeder Schleife den Anfang und das Ende mit den Variablen p und k wie oben)? Wie kann ich erkennen, wo der Anfang und das Ende jeder Teilmenge von Daten innerhalb der Spalte liegt? Da die Zeile:

(…, data.Range("C2").End(xlDown)).Rows.Count 

scheint keine effektive Lösung zu sein.

Mein Code funktioniert sehr, wenn ich die volle Länge der Spalte mit einem fortlaufenden Datensatz verwende, aber ich möchte es ermöglichen, mit Datensätzen zu arbeiten, die Daten übersprungen haben. Vielen Dank !!

+0

Die Daten, die früher angezeigt wurden, zeigen folgendes: x Achse 0-12 Messungen die zweite Reihe. Das tut mir leid. – newToStackOverflow

+0

Ist es möglich, 'ATPVBAEN.XLAM! Expon 'auszuführen, indem Sie ein Array anstelle eines Bereichs übergeben? Dann könnten Sie den Bereich zuerst in ein Array übergeben, die Größe des Arrays ändern und alle Nullen entfernen und diese Arrays dann an das Makro weiterleiten, das Sie haben. Übrigens, willst du nur alle Nullen aus der Spalte D oder aus der Spalte L entfernen oder wenn beide beide Null sind? – Ralph

+0

Ja, ich könnte versuchen, das Makro stattdessen mit einem Array aufzurufen. Nullen können in leere Zellen eingefügt werden, und ignorieren Sie sie dann, wenn Sie das Array aus der Spalte nehmen ... Das wäre ein guter Ansatz, ich werde versuchen, es zu kodieren und ich werde Sie das Ergebnis wissen lassen – newToStackOverflow

Antwort

0

So ist die Lösung und ein Weg, um zu arbeiten, ist die folgende: Verwenden Sie eine Schleife über Daten zu durchlaufen, bis wir wissen, gibt es keine linken Untergruppen. Überspringen Sie die Subsets, die eine Moduloperation ausführen, um die Erinnerung an die Interationszählung zu erhalten.

Do While reachMax > k 'Control how many times I can iterate over data 

     init = prev = k 
     counter = counter + 1 

    k = data.Range("E" & 1, data.Range("E" & init).End(xlDown)).Rows.Count 'Find last index of column 
    p = k + 15 'Set offset because we are working with data of other sheet 

     If (counter Mod 2) = 1 Then 'Able to skip subsets with no data 
     Application.Run "ATPVBAEN.XLAM!Expon", plan2.Range("K" & prev + 14, "K" & p), plan2.Range("C" & prev + 14, "C" & p), smoothVal, False, False, False 
     End If 

Loop 

Offensichtlich setzen wir die Variablen reachMax mit den x-Achse letzten Daten, und K mit der Indexnummer der y-Achsen-Daten, in dieser in Spalten angeordnet C (destination) und K (origin)

Verwandte Themen