VBA von einem worksheet ins andere den Zellinhalt

Guten Tag,

Ich beschaeftige mich gerade ein wenig mit Excel/VBA (bisher keine grosse Ahnung von gehabt). Dabei hab ich folgendes Problem. Ich hab in meinem einen worksheet einen Zellinhalt den ich wenn eine bestimmte bedingung erfuellt ist in ein anderes Worksheet schreiben moechte.
Folgendes hab ich schon:

Sub Iteration_To_Determine_Temperature()

Dim ws As Worksheet

Set ws = ThisWorkbook.Worksheets(„Estimated Temp“)
Set wsheet = ThisWorkbook.Worksheets(„Calculation“)

If ws.Range(„Q10“).Value >= „1.0009“ Or ws.Range(„Q10“)

Als Bezug nimmt er jetzt aber immer Q10…Q39…!Excel soll
aber Q10 nur bei C10 und X11 nehmen. Und Q11 dann bei C11 und
X12!

Hallo Anna,

sehr klar ist mir da wenig, probiers mal so:

Sub Iteration\_To\_Determine\_Temperature()
Dim wksE As Worksheet, wksC As Worksheet, Zei As Long
Set wksE = ThisWorkbook.Worksheets("Estimated Temp")
Set wksC = ThisWorkbook.Worksheets("Calculation")
For Zei = 10 To 33
 If wksE.Range("Q" & Zei).Value \>= 1.0009 Or wksE.Range("Q" & Zei) 

Gruß
Reinhard

Hallo Reinhard,
entschuldige fuer die spaete antwort aber ich bin gerade auf der anderen Seite der Welt, acht Stunden zeitverschiebung.

Funktioniert leider nicht, dein Programm.
Der Hintergrund meines Makros ist, dass ich Iterationsschritte durchfuehren muss. Dabei soll Excel die Werte im Worksheet „Calculation“ im Zellbereich X11:AI34 ins Worksheet Estimated Temp (Zellbereich C10:N33) kopieren, aber nur wenn im Zellbereich (Q10:AB34, Worksheet estimated temp) die Bedingung gilt das der Wert groesser 1.0009 oder kleiner 0.999 ist. Dabei soll er sich dann eben immer passend Q10 mit dem Wertepaar X11 und C10 anschauen.und dann weiter Q11 mit X12 und C11 etc. Ist das verstaendlicher?
Hab es schon in nem anderen Forum probiert, aber keine Reaktion. Bin um jede Hilfe wirklich dankbar.

Anna

Hab es jetzt nur ein bisschen umgeaendert, weil in der Zeile nach dem Then immer eine Fehlermeldung kam.
Nun klappt es, aber ist trotzdem nicht ganz richtig!
Excel schaut sich als Referenz nur die Zeile Q an, aber des REst muss ja auch sein. Eben im Zellbereich Q10 bis AB33.

Sub Iteration_To_Determine_Temperature()
Dim wksE As Worksheet, wksC As Worksheet, Zei As Long
Set wksE = ThisWorkbook.Worksheets(„Estimated Temp“)
Set wksC = ThisWorkbook.Worksheets(„Calculation“)
For Zei = 10 To 33
If wksE.Range(„Q“ & Zei).Value >= 1.0009 Or wksE.Range(„Q“ & Zei)

Hab es grad probiert, so waere es moeglich, dabei muesste ich aber die If- schleife fuer zwoelf verschiedene Zustaende machen. Mmmmh, geht schon, aber sieht nicht gerade grandios aus das Programm. Leicht zu erkennen, dass es ein unwissender verfasst hat. Gibt es da ne schlauere moeglichkeit?

Sub Iteration_To_Determine_Temperature()
Dim wksE As Worksheet, wksC As Worksheet, Zei As Long
Set wksE = ThisWorkbook.Worksheets(„Estimated Temp“)
Set wksC = ThisWorkbook.Worksheets(„Calculation“)
For Zei = 10 To 33
If wksE.Range(„Q“ & Zei).Value >= 1.0009 Or wksE.Range(„Q“ & Zei) = 1.0009 Or wksE.Range(„L“ & Zei)

So, aehm ja jetzt hab ich des alles mal so ausprobiert und so wirklich, wirklich stimmt das ja nicht. weil angenommen die ersten bedingungen in den ersten spalten werden erfuellt, in den letzten aber nicht, macht Excel nichts mehr, obwohl er doch die Werte der letzten Spalten kopieren sollte kopieren sollte???

Sub Iteration_To_Determine_Temperature()
Dim wksE As Worksheet, wksC As Worksheet, Zei As Long
Set wksE = ThisWorkbook.Worksheets(„Estimated Temp“)
Set wksC = ThisWorkbook.Worksheets(„Calculation“)
For Zei = 10 To 33

If wksE.Range(„Q“ & Zei).Value >= 1.0009 Or wksE.Range(„Q“ & Zei) = 1.0009 Or wksE.Range(„R“ & Zei) = 1.0009 Or wksE.Range(„S“ & Zei) = 1.0009 Or wksE.Range(„T“ & Zei) = 1.0009 Or wksE.Range(„U“ & Zei) = 1.0009 Or wksE.Range(„V“ & Zei) = 1.0009 Or wksE.Range(„W“ & Zei) = 1.0009 Or wksE.Range(„X“ & Zei) = 1.0009 Or wksE.Range(„Y“ & Zei) = 1.0009 Or wksE.Range(„Z“ & Zei) = 1.0009 Or wksE.Range(„AA“ & Zei) = 1.0009 Or wksE.Range(„AB“ & Zei)

Dabei soll Excel die Werte im Worksheet
„Calculation“ im Zellbereich X11:AI34 ins Worksheet Estimated
Temp (Zellbereich C10:N33) kopieren, aber nur wenn im
Zellbereich (Q10:AB34, Worksheet estimated temp) die Bedingung
gilt das der Wert groesser 1.0009 oder kleiner 0.999 ist.

Hallo Anna,

Sub Iteration\_To\_Determine\_Temperature()
Dim wksE As Worksheet, wksC As Worksheet, Zei As Long, Spa As Long
Set wksE = ThisWorkbook.Worksheets("Estimated Temp")
Set wksC = ThisWorkbook.Worksheets("Calculation")
Application.ScreenUpdating = False
With wksE
 .Range("C10:N33").ClearContents
 For Zei = 10 To 33
 For Spa = 0 To 11
 If .Cells(Zei, 17 + Spa).Value \>= 1.0009 Or .Cells(Zei, 17 + Spa).Value 

Gruß
Reinhard

Hallo Reinhard…

vielen, vielen Dank. Werde es morgen mal ausprobieren, weil bin nicht mehr in meinem Office. Bin dir sehr dankbar für deine Hilfe!!! Lass es dich wissen ob es funktioniert:smile:!

Schoenen guten Abend Reinhard,

der debugger spuckt mir die ganze Zeit einen Fehler in der folgenden Zeile aus…mmmmh, versteh ich nicht! scheint mir alles logisch, wo kann da der Fehler sein?

If .Cells(Zei, 17 + Spa).Value >= 1.0009 Or .Cells(Zei, 17 + Spa).Value

Hallo Reinhard, also ich hab es jetzt mal auf ein Minimum vereinfacht. Kommt zumindest keine Fehlermeldung und scheint zu funktionieren! Denkst du ich kann das so lassen, oder ist da ein Fehler drin, der mir nicht auffaellt!?

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“)

'------------------------------------------------------------------------------
'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

Wollte noch folgendes grandios am Ende einfuegen:

If wksE.Range(wksE.Cells(10, 17), wksE.Cells(33, 28)).Value 0.999 And wksE.Range(wksE.Cells(39, 17), wksE.Cells(62, 28)).Value 0.999 Then
MsgBox " Estimated and Calculated Temperatures Agree With Each Other"
End If

Habe ewigst gegoogelt und eigentlich hab ich so manches gefunden, was mir bestaetigt, dass ich gar nicht so falsch liege, aber es will trotzdem nicht richtig sein. Hast du ne Idee woran das liegt?
Wuensche jetzt uebrigens einen guten morgen!

der debugger spuckt mir die ganze Zeit einen Fehler in der
folgenden Zeile aus…mmmmh, versteh ich nicht! scheint mir
alles logisch, wo kann da der Fehler sein?

If .Cells(Zei, 17 + Spa).Value >= 1.0009 Or
.Cells(Zei, 17 + Spa).Value

Excel loescht komplett den Zellbereich wo er eigentlich die Daten aus dem Calculation sheet kopieren sollte und mmmmh Fehlermeldung? Die Zeile ist gelb unterlegt!!!
mmmmh, ich weiß auch nicht so recht?! Bin ein wenig verloren, weil ich nicht weiß wo der Fehler liegt, genauso bei der messagebox scheint es mir voll logisch. Aber scheint es ja nicht zu sein. Wie gesagt sonst funktioniert aber des Programm, glaubst ich kann des so lassen?

Ich hab jetzt mal die Excel Datei hochgeladen, unter folgendem LInk ist sie zu finden:http://rapidshare.com/files/291456892/Calculation_So…
(Hoff des klappt, weil hab sowas noch nie gemacht).
und unter diesem Link ist die Datei wie ich es mal versucht hab!(http://rapidshare.com/files/291458401/Calculation_So…)
Reinhard ich danke dir sehr herzlich für deine Hilfe, wüsste nicht wie weiter ohne dieses Forum!

finden:http://rapidshare.com/files/291456892/Calculation_So…

Hallo Anna,

in Estimated Temp steht in cells(10,17+0), also Q10

#DIV/0“

das liegt an
.Range(„C10:N33“).ClearContents
im Code. Das erzeugt in vielen Blättern DIV/0 was dann über andere Formeln bis zu Q10 zurückkommt.

Über prüfe nochmal ob meine Programmlogik korrekt ist.
Ich übersetze mal folgenden Codeschipsel beim ersten Durchgang durch beide FORs. Dann ist Zei 10 und Spa 0

If .Cells(Zei, 17 + Spa).Value \>= 1.0009 Or .Cells(Zei, 17 + Spa).Value 

Wenn Q10 \>= 1.0009 ODER Q10 

Hello, Hello Reinhard!

Vielen, vielen Dank fuer deine Bemuehungen!!! Werde die Zeile mit Clear.Contents weglassen, so funktioniert alles prima und es ist schon richtig, dass der Wert vom verherigen Makro drinsteht!!!Uuuuh, bin dir echt dankbar!
Will ja dein Wissen nicht ins unermessliche ausschoepfen, aber ich haette da noch die letzte Frage bezueglich meiner Messagebox.

If wksE.Range(wksE.Cells(10, 17), wksE.Cells(33, 28)).Value 0.999 And wksE.Range(wksE.Cells(39, 17), wksE.Cells(62, 28)).Value 0.999 And wksE.Range(wksE.Cells(68, 17), wksE.Cells(91, 28)).Value 0.999 And wksE.Range(wksE.Cells(97, 17), wksE.Cells(120, 28)).Value 0.999 Then
MsgBox " Estimated and Calculated Temperatures Agree With Each Other"
End If

Sehe da einfach nicht was ich falsch gemacht habe??!!!Hab es so eigentlich auch im Internet gefunden!

Woher weisst du eigentlich, dass ich in Adelaide bin…hatte ich nicht wirklich erwaehnt:smile:!
P.S. Ich glaube der Strand wuerde dir bei aktuellen 17Grad auch nicht wirklich wirklich Freude machen! In diesem Sinne geniessen Sie die deutsche Sonne:smile:!
Gruesse Anna

Hallo Anna,

ich haette da noch die letzte Frage bezueglich meiner
Messagebox.

If wksE.Range(wksE.Cells(10, 17), wksE.Cells(33, 28)).Value 0.999 And wksE.Range(wksE.Cells(39, 17),
wksE.Cells(62, 28)).Value 0.999 Then
MsgBox " Estimated and Calculated Temperatures Agree With
Each Other"
End If

Sehe da einfach nicht was ich falsch gemacht habe??!!!

Als w-w-w-Anfrage gesehen hast du
vergessen zu sagen was falsch ist. Also kommt ein fehler, eine Fehlermeldung, was steht drin usw.
Es fehlt die Angabe der Excelversion. In deinem Fall noch die Angabe ob dt. oder engl. Excel.

Der Code selbst kann nicht funktionieren, da ein Zellbereich keinen Wert hat, den haben nur Einzelzellen.

Zum anderen, du benutzt auf einmal eine AND-Verknüpfung. Ist das so korrekt? In meiner Lösung habe ich AND und OR eingebaut, lösche halt die falsche zeile.

Hab es
so eigentlich auch im Internet gefunden!

„eigentlich“? *gg*
Wenn es so ist würde ich die entsprechende Seite nich bookmarken.

Probiers mal so:

Sub tt()
Dim Anz As Integer, wksE As Worksheet
Set wksE = ThisWorkbook.Worksheets("Estimated Temp")
With wksE
 Anz = Zaehle(.Range(.Cells(10, 17), .Cells(33, 28))) \_
 + Zaehle(.Range(.Cells(39, 17), .Cells(62, 28))) \_
 + Zaehle(.Range(.Cells(68, 17), .Cells(91, 28)))
 If Anz = 236 Then MsgBox "..."
End With
End Sub
'
Function Zaehle(Bereich As Range) As Integer
Dim Zelle As Range
For Each Zelle In Bereich
 If Zelle.Value 0.999 Then Zaehle = Zaehle + 1
 'If Zelle.Value \>= 1.0009 Or Zelle.Value 



> Woher weisst du eigentlich, dass ich in Adelaide bin....hatte  
> ich nicht wirklich erwaehnt:smile:!


Ich kann zwischen den Zeilen lesen \*lächel\*
Ich weiß auch welche Schule du dort besuchst.



> P.S. Ich glaube der Strand wuerde dir bei aktuellen 17Grad  
> auch nicht wirklich wirklich Freude machen!


Brrr, da kann ich ja auch hierblieben :frowning:



> In diesem Sinne  
> geniessen Sie die deutsche Sonne:smile:!


Ja, die strahlt hier täglich, dummerweise sind oft massigst Wolken davor :smile:

Gruß
Reinhard

Hey, ich bin jetzt natürlich schon kurz vorm schlafen gehen! Werde deinen Lösungsvorschlag morgen gleich mal testen.
Verwende bei der messagebox AND weil hier beide bedingungen gelten müssen, nicht wie bei der Iteration die eine oder die andere.
Mmmmh, zwischen den zeilen lesen, vielleicht könnte man wegen der Zeitverschiebung auf Adelaide schließen???!Sonst weiß ich nicht wie ich mich verrraten hab:wink:!
Noch mal vielen Dank, ich lasse gewiß bald wieder von mir hören!
Anna

Hallo Anna,

Hey, ich bin jetzt natürlich schon kurz vorm schlafen gehen!

okay, so ein Nachmittagsschläfchen soll ja gesund sein :smile:
Jaja, es gibt da was was sich Zeitverschiebung nennt.

Verwende bei der messagebox AND weil hier beide bedingungen
gelten müssen, nicht wie bei der Iteration die eine oder die
andere.

Auch okay, mir fiel’s halt nur auf.

Mmmmh, zwischen den zeilen lesen, vielleicht könnte man wegen
der Zeitverschiebung auf Adelaide schließen???!Sonst weiß ich
nicht wie ich mich verrraten hab:wink:!

Du bist freigiebig mit deinen Daten. Je nach Flugzeit könnte ich morgen oder übermorgen an deiner Tür klingeln.
Aber keine Sorge, ich klingel nur da wo ich vorher eingelden wurde.

Und sorry, oder eher jaaaaa, es gefällt mir daß du rumrätselst *schwergrins*

Ich lese hier im Rätsel-Brett mit, komme meist nie auf Lösungen, aber macht mir laune über evtl. Lösungen zu grübeln. Diese laune/Spaß ist dann weg wenn ich die Lösung lese.
Also sage ich dir sie nicht, damit du noch Spass am Grübeln haben kannst :smile:)

Gut’s Nächtle.

Gruß
Reinhard

Hallo, Hello Reinhard,

ich habe jetzt folgendes Makro (minimal veraendert zu deinem):
'------------------------------------------------------------------------------
'Messagebox
'------------------------------------------------------------------------------
Dim Sum As Single
With wksE
Sum = Count(.Range(.Cells(10, 17), .Cells(33, 28))) _

  • Count(.Range(.Cells(39, 17), .Cells(62, 28))) _
  • Count(.Range(.Cells(68, 17), .Cells(91, 28))) _
  • Count(.Range(.Cells(97, 17), .Cells(120, 28)))
    If Sum > 1150.848 And Sum 0.999 Then Count = Count + 1
    Next Cell
    End Function

Hab ich glaub noch nicht erwaehnt, Excel ist bei mir auf englisch, deshalb die kleinen veraenderungen. 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)
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.
Kann dir gar nicht sagen, wie dankbar ich dir bin. Denn jetzt tut es, zumindest fast!
Froehliches schlummern noch an den CIA Agenten, anders kann ich mir nicht erklaeren woher du meine Uni weisst:wink:!