Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
796to800
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
796to800
796to800
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Makro zur Fehlerkorrektur

Makro zur Fehlerkorrektur
30.08.2006 13:16:06
Rudi
Hi!
Ich habe ein brennendes Problem:
Es gibt ein Makro zur Messfehlerkorrektur, das per Suchschleife eine Spalte nach unten durchsucht.
Zu finden gilt es Werte über "+/- 0,5". So weit kein Problem.
Es beginnt hier:
Sobald eine betroffene Zelle gefunden wird, soll das Programm automatisch
- den Wert der 13. Zelle oberhalb bzw.
- den Wert der 13. Zelle unterhalb
(etwa mit: ActiveCell.Row()- 13 bzw. +13)
der aktiven Zelle erfassen und daraus einen Durchschnitt errechnen. Dieser soll dann statt dem Fehlerwert in der aktiven Zelle eingetragen werden.
Es wäre ganz super wenn jemand einen Lösungsansatz bzw. Vorschlag
parat hätte!
Lg und danke im Voraus,
Rudi

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro zur Fehlerkorrektur
30.08.2006 13:41:10
EtoPHG
Hallo Rudi,
Als Ansatz: Rechtsklick auf Zelle testet Wert und fragt ggf. zur Anpassung.

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
If Target.Value > 0.5 Or Target.Value < -0.5 Then
If Target.Row >= 13 And _
Target.Offset(-13, 0).Value <> 0 And _
Target.Offset(13, 0).Value <> 0 Then
If vbYes = MsgBox("Aktive Zelle wird geändert!", vbYesNo, "Wert ändern!") Then
Target.Value = (Target.Offset(-13, 0).Value + Target.Offset(13, 0).Value) / 2
Cancel = True
End If
Else
MsgBox "Mind. einer der Offsetwerte ist 0 !", vbOKOnly + vbExclamation, "Wert NICHT geändert!"
End If
End If
End Sub

Gruss Hansueli
Anzeige
AW: Makro zur Fehlerkorrektur
30.08.2006 14:00:21
Rudi
Vielen Dank für die rasche Antwort!
Sieht sehr gut aus, nur sollte die Suche und Korrektur
ohne zutun des Anwenders ablaufen.
Ist es möglich, dass das Programm nach Finden der betroffenen Zelle selbstständig
die Berechnung ausführt?
Lg,
Rudi
AW: Makro zur Fehlerkorrektur
30.08.2006 14:48:09
EtoPHG
Hallo Rudi,
Ist es möglich...
(Fast) nichts ist unmöglich...
Aber die Fragen sind:
a) Soll das nur für die bestimmte Spalten (z.b. die, der aktiven Zelle) gelten ?
b) Was soll mit Werten geschehen, deren Zeilen-Offset-Werte (-13,+13) NICHT existieren ?
c) Was soll mit Werten geschehen, deren Zeilen-Offset-Werte (-13,+13) Null sind ?
d) Was soll geschehen, wenn der errechnete Durchschnitt wiederum >0.5 oder Gruss Hansueli
Anzeige
AW: Makro zur Fehlerkorrektur
30.08.2006 15:17:47
Rudi
Hallo Hansueli,
Naja, für mich ich als totalen VBA-Anfänger ist vieles unmöglich ;-)
Also:
a)Die Suche soll nur für einen bestimmten Bereich gelten, in meinem Fall von E40:F250
b)Werte bei denen keine Offset-Werte existieren sollten den nachfolgenden +13 bzw. vorergehenden -13 Wert annehmen (sieht jedoch nach einem großen Aufwand aus, müssen daher nicht unbedingt berücksichtigt werden
c)Offset-Werte=0 sollten gleich behandelt werden wie >0.5 bzw. d)Bei dieser Art der Messung ist die Wahrscheinlichkeit dafür sehr gering daher kann das ruhig erlaubt sein (sollte es tatsächlich vorkommen, kann der Fehler auch "manuell" abgeschätzt werden)
Vielen Dank für deine Hilfe und Geduld!
Lg,
Rudi
Anzeige
AW: Makro zur Fehlerkorrektur
30.08.2006 16:10:02
EtoPHG
Hallo Rudi,
Also: Kopiere folgende Makro in ein Modul.
Ev. die kommentierten Zeilen anpassen, falls Bereich oder Werte ändern und laufen lassen.

Sub ChangeToAverage()
Dim dBelow, dAbove As Double
Dim sOffsetM, sOffsetP, sCntA, sCntC As Single
Dim rThisRange, rCell As Range
rThisRange = "E40:F250" ' Dieser Bereich wird abgesucht
dBelow = -0.5           ' Werte kleiner werden geändert
dAbove = 0.5            ' Werte grösser werden geändert
sOffsetM = -13          ' Position Wert Minus-Zeilenrichtung
sOffsetP = 13           ' Position Wert Plus-Zeilenrichtung
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.Calculation = xlCalculationManual
sCntA = 0
sCntC = 0
For Each rCell In ActiveSheet.Range(rThisRange)
If rCell.Value > dAbove Or rCell.Value < dBelow Then sCntA = sCntA + 1
If rCell.Row > ActiveSheet.Range(rThisRange).Row + sOffsetP - 1 And _
rCell.Row < ActiveSheet.Range(rThisRange).Row + ActiveSheet.Range(rThisRange).Rows.Count + sOffsetM Then
If rCell.Value > dAbove Or rCell.Value < dBelow Then
rCell.Value = (rCell.Offset(sOffsetM, 0).Value + rCell.Offset(sOffsetP, 0).Value) / 2
sCntC = sCntC + 1
End If
End If
Next
Application.ScreenUpdating = True
Application.EnableEvents = True
Application.Calculation = xlCalculationAutomatic
' Eventuell weglassen, wenn keine Meldung erwünscht !
MsgBox sCntC & " Zellen geändert!" & vbCrLf & _
sCntA & " Zellen haben noch einen Wert ausserhalb des Limits!", vbOKOnly, "Änderungen gemacht!"
End Sub

Gruss Hansueli
Anzeige
AW: Makro zur Fehlerkorrektur
30.08.2006 18:52:32
Rudi
Einfach unglaublich!
Ich habs zwar noch nicht ausprobiert, da ich erst morgen wieder an die Datei komm,
aber vielen vielen dank für den großen Aufwand!
Echt toll!
Lg,
Rudi
AW: Makro zur Fehlerkorrektur
30.08.2006 18:59:05
Rudi
Einfach unglaublich!
Ich habs zwar noch nicht ausprobiert, da ich erst morgen wieder an die Datei komm,
aber vielen vielen dank für den großen Aufwand!
Echt toll!
Lg,
Rudi
VBA-freier Vorschlag
31.08.2006 15:07:19
Klaus
https://www.herber.de/bbs/user/36316.xls
Hallo Rudi,
unabhängig von EtoPHG's Lösung habe ich mal eine reine Formellösung gebastelt.
Dein Problem hab ich vereinfacht, nimmt nur den Mittelwert aus den letzen-nächsten 4, aber komplett dynamisch und anpassbar. Vielleicht hilfts dir ja weiter.
Gruß,
Klaus M.vdT.
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige