VBA von einem worksheet ins andere den Zellinhalt

Hallo Anna,

Hab ich glaub noch nicht erwaehnt, Excel ist bei mir auf
englisch, deshalb die kleinen veraenderungen.

mein Code läuft auch auf englischem Excel-Vba.

Vba ist auch im deutschen Excel-Vba auf englisch. Nicht in den Variablennamen, da kann man machen was man will. Ich nehme da gerne deutsche Begriffe, denn so sehe ich in langen Codes gleich, aha, was von mir oder eine Vba-Methode.

Du könntest das auch tun. Aber evtl. sollen den Code auch englischsprachige lesen/kriegen, die können natürlich mut Zaehle und Anz (für Anzahl) nix anfangen erstmal.

Insofern okay wenn du engl. Namen wählst. Leider hast du genau die falschen erwischt, grad weil sie so richtig sind :frowning:

Denn Count, Sum, Area sind Namen die auch Vba selbst kennt und benutzt.
Über kurz oder lang kann das zu Problemen führen und es macht den Code sowieso viel schwieriger zu lesen.

Nimm myCell, myCount, mySum, myArea oder wenn schon denn schon fast perfekt:

rngCell, intCount, sngSum, rngArea.

Das nähert sich schon der „ungarischen Notation“, wird im Internet erläutert. Dann kann auch ein Chinese oder Franzose den Code flüssig lesen, weil sich Vbaler weltweit daran halten.

Wenn du dich
fragst woher die 1150.848 und die 1152.152 kommen, die hab ich
gewaehlt weil der kleinste wert wenn man alle zellen
aufaddiert 1150.848 (0.999mal4mal 288) sein kann…(dito
groesster wert)

Warum hast du nicht meinen Code so gelassen? Die Variable Anz mußt du dann nur auf 288 oder nicht überprüfen.

Ich habe das mit dem Function Count nicht ganz verstanden. Bin
ich richtiger in der Annahme, dass er damit nur die Werte
addiert, die groesser 0.999 und kleiner 1.001 sind.
Des Count= Count+1 versteh ich nicht so recht.

Es wird die Anzahl der Zellen ermittelt/aufaddiert, nicht deren Inhalt.

Dafür müßtest du es so machen:

Function Count(Area As Range) As Single
Dim Cell As Range
For Each Cell In Area
 If Cell.Value 0.999 Then Count = Count + Cell.Value
Next Cell
End Function

Froehliches schlummern noch an den CIA Agenten, anders kann
ich mir nicht erklaeren woher du meine Uni weisst:wink:!

Tipp: Jeder der deine Datei herunterlädt weiß das auch alles :smile:

Gruß
Reinhard

Guten morgeeeeeen!

Soooo, sieht nun mein aktuelles Makro aus. Mmmmh, naja generell passt es schon, nur das es manchmal ne Interation nicht hinkriegt und Estimated und Calculated einfach nicht uebereinstimmen wollen, egal wie oft ich den Makro durchlaufen lasse! Woran koennte des liegen.
Wegen den 1150 blaaaaaaa, also Excel soll schon den Wert der Zelle nehmen und ich hab ja vier unterschiedliche Temperature und des jeweils 288 mal. Excel soll schauen, dass in allen Zellen die Werte groesser 0.999 und kleiner 1.001 sind. Glaub des ist manchmal echt verwirrend meine Erklaerung.
Reinhard ich moechte dir nochmal herzlich danken ohne deine Hilfe waere ich nie so weit gekommen!

Sub Iteration_To_Determine_Temperature()
Dim wksE As Worksheet, wksC As Worksheet, Row As Long, Column As Long
Set wksE = ThisWorkbook.Worksheets(„Estimated Temp“)
Set wksC = ThisWorkbook.Worksheets(„Calculation“)
Application.ScreenUpdating = False

'------------------------------------------------------------------------------
'Iteration To Determine Water Temperature
'------------------------------------------------------------------------------

For Row = 10 To 33
For Column = 0 To 11
If wksE.Cells(Row, 17 + Column).Value >= 1.001 Or _
wksE.Cells(Row, 17 + Column).Value = 1.001 Or _
wksE.Cells(Row, 17 + Column).Value = 1.001 Or _
wksE.Cells(Row, 17 + Column).Value = 1.001 Or _
wksE.Cells(Row, 17 + Column).Value 1150.848 And sngSum 0.999 Then intCount = intCount + rngCell.Value
Next rngCell
End Function

P.S. Ab jetzt werde ich mit meinen Daten viel vorsichtiger umgehen:smile:!

Guten Morgen Anna,

Mmmmh, naja
generell passt es schon, nur das es manchmal ne Interation
nicht hinkriegt und Estimated und Calculated einfach nicht
uebereinstimmen wollen, egal wie oft ich den Makro durchlaufen
lasse!

Schau mal hier, da wirste sicher fündig:
http://excelformeln.de/formeln.html?gruppe=10

Oder nimm Summewenn() und addiere alle zellen die >1,009 sind, davon ziehst du Summewenn aller zellen ab, die

Hallo Reinhard,

schoen bloed dieses Zeitversetzte schreiben. Aber auch schoen gut, dass ich nicht bei einer Studentenkontaktboerse bin:smile:!

Will nur nochmal sicher gehen, dass ich den folgenden Teil deines Programms richtig verstanden habe:

Dim sngSum As Single
With wksE
sngSum = intCount(.Range(.Cells(10, 17), .Cells(33, 28))) _

  • intCount(.Range(.Cells(39, 17), .Cells(62, 28)))
    If sngSum > 575.424 And sngSum 0.999 Then intCount = intCount + rngCell.Value
    Next rngCell
    End Function

Mit der function, addiert er dann schon nur die Zellen auf die beide Bedingungen (value ,1.001 und value .0.999)erfuellen! Stimmt des? Warum muss (rngArea as Range) in der Klammer stehen? Mmmmh, ich glaub so ganz hab ich es eindeutig noch nicht durchschaut!
Der schweigende Gentleman verraet durch sein schweigen schon zuviel, deswegen ein letzter Erklaerungsversuch.
Ich teile ja Estimated durch Calculated, die am Ende der Rechnung uebereinstimmen sollen! Mit einer Genauigkeit von 0.001%. Des soll aber fuer alle 288 Zellen gelten (hier schaetze ich zwei Temp ab) deswegen insgesamt 567 zellen. Jede Zelle ist quasi ne eigene kleine Rechnung fuer sich. Aber ich will am ende das alle Rechnungen stimmen. In allen Zellen soll am Ende ein Wert kleiner wie 1.001 und groesser wie 0.999 drinstehen und wenn das stimmt, soll die Msgbox erblinken!
Reinhard, ich kann mich nicht oft genug bedanken!
DANKE!

Hallo Anna,

Mit der function, addiert er dann schon nur die Zellen auf die
beide Bedingungen (value ,1.001 und value .0.999)erfuellen!
Stimmt des?

Ja, du hast es ja so festgelegt.

Warum muss (rngArea as Range) in der Klammer
stehen?

Weil du eine BDF geschrieben hats. Eine benutzerdefinierte funktion.
Sie steht jetzt auch oben in Excel bei Einfügen—Funktion–Benutzerdefiniert.
Und alle Funktionen in Excel haben Klammern. In den Klammern stehen dnn die parameter oder halt auch nix wie bei Zeile() äh Row().

Ich teile ja Estimated durch Calculated, die am Ende der
Rechnung uebereinstimmen sollen! Mit einer Genauigkeit von
0.001%.

Ich glaube daran liegt es. Excel rechnet mit 15 Zahlenstellen genau.
Daß du vielleicht über Format–Zellen eingestellt hast Zahl mit 3 Nachkommastellen ändert daran nix.

Wenn du nun 288 * ,999 rechnest und dieses Ergebnis vergleichst mit dem was du erhälst wenn du 288 Zellen addierst in denen ,999 ANGEZEIGT wird so weichen die Ergebnisse voneinander ab.

Die gleiche Problematik hat man auch wenn man eine 4 die man in eine Zelle eingibt mit einer anderen Zelle vergleicht in der auch eine 4 angezeigt wirde, deren wahrer Inhalt aber 4,0000001234 ist, da sie mit Formeln berechnet wurde.

Für dich sind die Zellen gleich, für Excel nicht.

Abhilfe,

nicht so vergleichen:
If Range(„A1“).Value = Range(„B1“).Value Then
sondern z.B. so
If Abs(Range(„A1“).Value - Range(„B1“).Value)

So, hier geschwind ich wieder…ausnahmsweise noch am gleichen Tag wieder!
Mmmmmh, also Zellenzahlen. Du meinst er soll dann einfach die Zellen zaehlen, wo eine Zahl im Bereich 0.999 und 1.001 drinsteht?!
Ja,mmmmh wenn ich dich richtig verstehe dann denke ich muss ich zugeben, dass da wohl eindeutig die bessere Lösung waere!!!
Ich werde morgen testen. Berichten und wenn es tut dann hab ich glaube ich soweit keine Fragen mehr!
Ich sag dann aber nochmal tchüss!

So lieber Reinhard,

ich verbeuge mich erstmal recht herzlich und sage nochmal Dankeschoen. der erste Vorschlag nur die Zellen zu zaehlen war sehr schlau und ich denke ich stand ein bisschen auf dem Schlauch! Soweit funktioniert alles:smile:!
Keine Fragen mehr…aber sobal wat is komm ich hundertpro wieder auf dieses Forum zurueck!
Thank you!

ah, ich trau mich gar nicht, aber was ist denn hier schon wieder falsch???
Das kann doch nicht so schwer sein, aber fuer mich wohl schon!
Sub Initial_Value()
Dim wksE As Worksheet
Set wksE = ThisWorkbook.Worksheets(„Estimated Temp“)
If wksE.Range(„C67:N90“).Value

ah, ich trau mich gar nicht, aber was ist denn hier schon
wieder falsch???
If wksE.Range(„C67:N90“).Value „10“

MsgBox 2 > 10
End Sub

Gruß
Reinhard

Um zu erklären, was ich dem Herr Excel überhaupt sagen wollte, ich wollte ihm sagen, dass wenn in dem Zellbereich nur eine zelle einen negativen Wert hat dann Msgbox! Geht aber nicht mit meinem grandiosen Makro!

Um zu erklären, was ich dem Herr Excel überhaupt sagen wollte,
ich wollte ihm sagen, dass wenn in dem Zellbereich nur eine
zelle einen negativen Wert hat dann Msgbox! Geht aber nicht
mit meinem grandiosen Makro!

Hallo Anna,

Sub Initial\_Value()
Dim wksE As Worksheet, Zelle As Range
Set wksE = ThisWorkbook.Worksheets("Estimated Temp")
For Each Zelle In wksE.Range("C67:N90")
 If Zelle.Value 

Gruß
Reinhard

Vielen Dank Reinhard,

klappt alles! Nochmal vielen, vielen DAnk fuer deine Hilfe!

Anna!