Guten Abend zusammen,
mir wurde von einem Bekannten eine Frage im Zusammenhang mit einer Berechnung in Excel gestellt,die ich nun an Euch Profis weiter geben möchte.
Folgender Sachverhalt:
In den Zellen A1-A4,A5-A8 usw. stehen Zahlen,die zusammen gehören.
Nun möchte mein Bekannter,dass ihm die einzelnen Ergebnisse dieser Bereiche immer in derselben Zelle z.B E5 angezeigt wird,wenn der Curser sich in einer Zelle des jeweiligen Bereichs befindet.
Ist dies mit geringen Aufwand realisierbar?
Ich könnte mir vorstellen, dass es machbar ist, indem ich jedem Bereich einen Namen vergebe. Mehr fällt mir im Moment dazu nicht ein.
Danke schonaml im Voraus für Eure Ideen.
Lg Frank
P.S. Verwendet wird Excel 2003
Grüezi Blondie
mir wurde von einem Bekannten eine Frage im Zusammenhang mit
einer Berechnung in Excel gestellt,die ich nun an Euch Profis
weiter geben möchte.
…und warum meldet sich der ‚Bekannte‘ dann nicht gleich selbst hier…? 
In den Zellen A1-A4,A5-A8 usw. stehen Zahlen,die zusammen
gehören.
Nun möchte mein Bekannter,dass ihm die einzelnen Ergebnisse
dieser Bereiche immer in derselben Zelle z.B E5 angezeigt
wird,wenn der Curser sich in einer Zelle des jeweiligen
Bereichs befindet.
Ist dies mit geringen Aufwand realisierbar?
Man könnte das SelectionChange()-Event verwenden und darin dann auswerten in welchem Bereich die Zellenmarkierung steht.
Abhängig davon dann das Ergebnis der (noch zu bestimmenden) Berechnung in E5 ausgeben lassen.
Das könnte als erstes Grundgerüst dann mal so aussehen:
Private Sub Worksheet\_SelectionChange(ByVal Target As Range)
With Range("E5")
If Target(1, 1).Column = 1 Then
Select Case Int((Target(1, 1).Row - 0.5) / 4) + 1
Case 1
.Value = "Bereich 1"
Case 2
.Value = "Bereich 2"
Case 3
.Value = "Bereich 3"
Case Else
.Value = "ausserhalb der Bereiche"
End Select
Else
.Value = "ausserhalb der Bereiche"
End If
End With
End Sub
Mit freundlichen Grüssen
Thomas Ramel
Guten Morgen Thomas,
weil das meine Idee war,Euch zu fragen und er sich nicht auskennt mit Foren.
Gehe ich denn in der Annahme richtig,dass ich jeden Bereich deklarieren muss,d.h jedem Bereich einen Namen zuordnen muss?
Lg Frank
Grüezi Frank
Gehe ich denn in der Annahme richtig,dass ich jeden Bereich
deklarieren muss,d.h jedem Bereich einen Namen zuordnen muss?
Warum triffst Du Annahmen und testest den Code nicht erstmal?
Ich habe die Bereiche in 4-er Blöcke unterteilt wie das gefragt war.
Namen habe ich keine vergeben.
Wenn Du etwas anderes willst, dann formuliere bitte detailliert und schlüssig was Du möchtest.
Mit freundlichen Grüssen
Thomas Ramel
Hallo Thomas,
das habe ich ja. aber mehr als das in Zelle E5 „Bereich1“ ausgegeben wird passiert nicht.
Da dies von mir jetzt nun nur Beispiel-Zellen waren hoffe ich,dass man den Code den tatsächlichen Zellen später anpassen kann
Lg Frank
Grüezi Fank
das habe ich ja. aber mehr als das in Zelle E5 „Bereich1“
ausgegeben wird passiert nicht.
Hmmm, und Du bist dir sicher, dass Du die Zellenmarkierung in Spalte A auch rauf und runter bewegt hast?
…das kann ich nämlich nicht so recht glauben - vielmehr warst Du wohl nur im Bereich A1:A4…
Da dies von mir jetzt nun nur Beispiel-Zellen waren hoffe
ich,dass man den Code den tatsächlichen Zellen später anpassen
kann
Na, dann mal viel Spass…
Mit freundlichen Grüssen
Thomas Ramel
Hallo Thomas,
sorry,natürlich gilt entsprechendes für Bereich 2, Bereich 3 und ausserhalb des Bereichs. Nur in A1-A4 habe ich Zahlen eingegeben.
Das funktioniert also soweit.
Dein viel Spass beruhigt mich jetzt nicht sehr…fg
Lg Frank
Grüezi Frank
sorry,natürlich gilt entsprechendes für Bereich 2, Bereich 3
und ausserhalb des Bereichs. Nur in A1-A4 habe ich Zahlen
eingegeben.
Das funktioniert also soweit.
Na, dann ist ja soweit bisher alles in Ordnung
Dein viel Spass beruhigt mich jetzt nicht sehr…fg
Ich kann ja nicht wissen was da ‚berechnet‘ werden soll, weil Du das nach wie vor verschweigst. Was sind denn ‚die Ergebisse dieser Bereiche‘ wie Du das im ersten Beitrag formuliert hast?
Und ich kann dir auch nicht sagen, wie das für andere Bereiche aussehen soll, weil ich auch diese nicht kenne.
Ich kann also nur beantworten, was Du fragst - wenn dich das nicht beruhigt, so kann ich da leider bisher nicht weiterhelfen…
Mit freundlichen Grüssen
Thomas Ramel
Hi Thomas,
es handelt sich um die Bereiche F8-F11,F13-F16, usw. bis F158-F161.
Entsprechendes gilt für die Spalten M,T,AA,AH,AO,AV,BC,BJ,BQ. Soll aber irgendwann einaml noch auf die Spalten BY,CF,CM,CT und DA erweitert werden.
In einer neuen Tabbi wäre das kein Problem.Ich einfach ne Zusatzspalte nehmen und gut wäre.
Lg Frank
Grüezi Frank
es handelt sich um die Bereiche F8-F11,F13-F16, usw. bis
F158-F161.
Entsprechendes gilt für die Spalten M,T,AA,AH,AO,AV,BC,BJ,BQ.
Soll aber irgendwann einaml noch auf die Spalten BY,CF,CM,CT
und DA erweitert werden.
Wattn das für eine Auswertung?
Sowas könnte man wohl angehen wird aber vermutlich auf eine Art ‚Spaghetti-Code‘ hinauslaufen in dem die einzelnen Bereiche abgeklappert werden.
In einer neuen Tabbi wäre das kein Problem.Ich einfach ne
Zusatzspalte nehmen und gut wäre.
Dann erweitert die bestehende Tabelle doch ebenfalls.
…zu die einzelnen Ergebnisse dieser Bereiche ist damit aber nach wie vor nichts gesagt…
Mit freundlichen Grüssen
Thomas Ramel
Hallo Thomas,
die einzelnen Zahlen werden noch mit Zahlen aus anderen Spalten summiert und in einer andern Zelle als Endergebnis ausgegeben.
Da es nun aber vorkommen kann dass zuerst Zahlen in der anderen Zelle eingegeben werden,würde das Ergebnis dieser Zellen(z.B F8-F11) verfälscht werden.
Wie gesagt,es war nur mal eine Idee,ob sich sowas relativ einfach bewerkstelligen lässt. Aber wie ich sehe,ist das doch ein grösserer Aufwand.
Noch mehr Spalten möchte er halt nicht einfügen.
Lg Frank
es handelt sich um die Bereiche F8-F11,F13-F16, usw. bis
F158-F161.
Entsprechendes gilt für die Spalten M,T,AA,AH,AO,AV,BC,BJ,BQ.
Soll aber irgendwann einaml noch auf die Spalten BY,CF,CM,CT
und DA erweitert werden.
Hallo Frank,
Erweiterungen in den Arrays in der vorgebenen Zugehörigkeit der Indexpositionen. Also „F“ wird in E5 angezeigt, M in E6 usw.
Option Explicit
Private Sub Worksheet\_SelectionChange(ByVal Target As Range)
Dim Ber, Ziel, Index As Integer, I, Wert
If Target.Count 1 Then Exit Sub
If Target.Row 161 Then Exit Sub
Ber = Array("F", "M", "T", "AA", "AH")
Ziel = Array("E5", "E6", "E7", "E8", "E9")
Index = -1
For I = LBound(Ber) To UBound(Ber)
If Target.Column = Range(Ber(I) & 1).Column Then
Index = I
Exit For
End If
Next I
If Index = -1 Then Exit Sub
Wert = Application.Sum(Target.Offset(-Target.Row Mod 4, 0).Resize(4, 1))
Range(Ziel(Index)).Value = Wert
End Sub
Gruß
Reinhard
Hallo Reinhard,
habe deinen Code getestet. Für den Bereich F8-F11 funktioniert er tadellos. Beim Bereich F13-F16 fehlt eine Zahl. Ist aber auch klar,da der Code immer 4 Zeilen zusammen addiert.
Jede 5. Zelle enthält aber keine Daten und müsste so übersprungen werden.Also F8-F11,F13-F16 usw. bilden jeweils ein Bereich
LG Frank
habe deinen Code getestet. Für den Bereich F8-F11 funktioniert
er tadellos. Beim Bereich F13-F16 fehlt eine Zahl. Ist aber
auch klar,da der Code immer 4 Zeilen zusammen addiert.
Jede 5. Zelle enthält aber keine Daten und müsste so
übersprungen werden.Also F8-F11,F13-F16 usw. bilden jeweils
ein Bereich
Hallo Frank,
Private Sub Worksheet\_SelectionChange(ByVal Target As Range)
Dim Ber, Ziel, Index As Integer, I, Wert
If Target.Count 1 Then Exit Sub
If Target.Row 161 Then Exit Sub
Ber = Array("F", "M", "T", "AA", "AH")
Ziel = Array("E5", "E6", "E7", "E8", "E9")
Index = -1
For I = LBound(Ber) To UBound(Ber)
If Target.Column = Range(Ber(I) & 1).Column Then
Index = I
Exit For
End If
Next I
If Index = -1 Then Exit Sub
Wert = Application.Sum(Target.Offset(-(Target.Row + 2) Mod 5, 0).Resize(4, 1))
Range(Ziel(Index)).Value = Wert
End Sub
Gruß
Reinhard
Guten Morgen Reinhard,
im Namen meines Bekannten soll ich dir an dieser Stelle seinen herzlichsten Dank aussprechen. Klappt alles wunderbar und übertrifft sogar seine Erwartungen.
Auch ich möchte mich bei Dir bedanken,dass du dir die Mühe gemacht hast und eine Superlösung in kurzer Zeit gefunden hast.
Nochmals vielen Dank dafür.
LG Frank
Hallo Reinhard,
eine frage ineressenhalber von mir.
Wie kann ich anhand dieses Codes am besten lernen und verstehen,was der Code Schritt für Schritt jetzt eigentlich genau macht?
Hast Du ne Idee?
Lg Frank
Wie kann ich anhand dieses Codes am besten lernen und
verstehen,was der Code Schritt für Schritt jetzt eigentlich
genau macht?
Hast Du ne Idee?
Hallo Frank,
Basic ist du gehst Zeile für Zeile durch und checkst die Code-Anweisungen in der Hilfe.
Z.B. mit der Maus den Curser in die Codeanweisung wie „Count“ stellen und F1…
Oder in der Vba-Hilfe bei Index nach count suchen.
In meinem Code steht
Target.Count
Das ist abgekürzt, konkret (gleichwertig) schriebe man
Target.Cells.count
Über F1 müßtestmußt du dir dann klar sein was diese Befehlszeile
If Targt.count 1 then exit sub
macht.
Der Sinn warum es da im Code steht und warum es gleich oben im Code steht muß sich dadurch nicht automatisch erschließen.
Wichtig ist nur daß du die Codezeile interpretieren kannst.
Warum kann man dir dann leicht erklären.
Ich weiß aus eigener Erfahrung, für einen NochNichtVollProfiInVba
ist die Kombination aus Offset, mod und resize ein echtes Kapierproblem, nix schlimmes, ist normal, ging mir auch so und ich las sowas mit „Hä“ und vielen Fragezeichen im Kopf.
Also gehe bitte den Code durch, schau bei jedem Befehl was er so macht und versuche dann jede Codezeile komplett zu verstehen.
Dann frage hier gezielt nach und ich und/oder andere erkläutern dir dann warum diese Codezeile genauso aussieht wie sie ist und was darin geschieht.
Und wenn du z.B. nicht weißt was ein Ereigniscode ist (dies ist einer) dann frag das auch nach.
Gruß
Reinhard