tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
5
ZUGRIFFE
445
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    DasBinIch132 Tutorials.de Gastzugang
    Hallo ihr vielen Programmierer-Spezies,

    bis jetzt hab ich immer nur n bisschen mit Excel-Funktionen hantiert, aber jetzt möchte ich einen Kontoplan erstellen, der sich mit den 0815-Formeln nicht mehr realisieren lässt.

    Wie gesagt, es soll ein Kontoplan werden.
    Im Tabellenblatt 1 habe ich eine Eingabe eingerichtet. D.h.
    B3= Datum der Bewegung
    D3= Bemerkung
    F3= Betrag der Bewegung
    H3= Konto der Bewegung

    Nun möchte ich, das die Werte anhand des Wertes in H3 in das entsprechende Tabellenblatt eingetragen werden. Z.b. Wert 1 = Sparkasse (=Tabellenblatt 2), Wert 2 = Volksbank (=Tabellenblatt 3) usw.
    Das klappt bis jetzt sehr gut.
    Auch die Funktion der anschließenden Sortierung habe ich noch hinbekommen.
    (D.h. wenn ich eine Bewegung am 01.06. habe und eine am 01.03 die ich im später eintrage, dann ist es in der richtigen zeitlichen Reihenfolge in den entsprechenden TBlättern sortiert.)

    Mein Problem: In den Tabellenblättern möchte ich in der Spalte B den aktuellen Kontostand sehen.
    Nur nach dem Sortieren muss er dementsprechend jede Zelle B die nach dem neu eingetragenen Datum liegt aktualisieren/neu berechnen.

    So solls aussehen:

    1 2 3 4
    A 01.01.2009 100,-€ Anfangsbestand 0,-€
    B 02.02.2009 A2+B4 Bewegung #1 5,-€
    C ......

    Hier mein derzeitiger Code:

    Sub Daten_eintragen()
    Dim Zeile
    Dim Zeilr
    'nur wenn in B3 und D3 etwas drinsteht dann eintragen
    If [b3] <> "" And [d3] <> "" Then
    'Tabellenblatt ermitteln
    If [h3] = "1" Then
    Sheets("SPK").Select
    'letzte benutzte Zeile ermitteln + 1
    Zeile = Cells(Rows.Count, 1).SpecialCells(xlLastCell).Row + 1
    Zeilr = Cells(Rows.Count, 1).End(xlUp).Row
    'Daten eintragen
    Cells(Zeile, 1) = Sheets("Eingabe").Range("b3").Value
    Cells(Zeile, 2) = Cells(Zeilr, 2) + Sheets("Eingabe").Range("f3").Value
    Cells(Zeile, 3) = Sheets("Eingabe").Range("d3").Value
    Cells(Zeile, 4) = Sheets("Eingabe").Range("f3").Value
    Cells(Zeile, 5) = Sheets("Eingabe").Range("h3").Value

    'Sortieren
    Range(Cells(1, 1), Cells(Rows.Count, 5)).Sort _
    Key1:=Range("A1"), Order1:=xlAscending, Header:=xlNo, _
    OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
    SortMethod:=xlPinYin, DataOption1:=xlSortNormal


    'Eingaben löschen
    Sheets("Eingabe").Select
    [b3] = ""
    [d3] = ""
    [f3] = ""
    [h3] = ""
    'letzte Zeile in sichtbaren Bereich holen
    Cells(Zeile, 1).Select
    Else
    'Tabellenblatt ermitteln
    If [h3] = "2" Then
    Sheets("2.VoBa").Select
    ........

    Habt Ihr ne Idee oder Verbesserungs-/Vereinfachungsvorschlägen?

    Vielen Dank im Voraus!

    DasBinIch132
     

  2. #2
    DasBinIch132 Tutorials.de Gastzugang
    Noch ne kleine Anmerkung;
    für routinierte VBAler scheint das n Kinderspiel zu sein, hab grad folgende Ansatz bekommen:

    FOR x=0 TO dataArray.Ende - 1
    dataArray[x+1][b] = dataArray[x][b] + dataArray[x+1][c] END FOR

    Leider weiß ich nicht ganz wie ich das einsetzen kann bzw. was es letztendlich bewirkt ..

    MfG DasBinIch132
     

  3. #3
    DasBinIch132 Tutorials.de Gastzugang
    Kann man das evtl. auch mit 'ner 0815-Excelformel machen?
    Ich könnte doch in die Spalte B die Formel B1+D2 eingeben und das das für jede Spalte bis 65537 eintragen.
    Dann müsste ich nur die zwei Bereiche A1:A65537 und C1:E65537 sortieren.
    Würde das gehen?

    Ich habs gerade probiert, indem ich in die Sortierfunktion ein "&" eingefügt habe.
    Allerdings meckert Excel dann... Habe ihr ne Idee?

    MfG DasBinIch 132
     

  4. #4
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    Hab dir zwar keine Lösung, da ich Programmierer und nicht Excel-Bastler bin. Jedoch solltest du dein Code formatiert in [VB]...[/VB] setzen, damit sie für die Forenuser lesbar sind (formatiert mit sauberem einrücken). Das Zeug ist sonst einfach unlesbar.

    FOR .. TO .. END FOR ist eine Schleife. Mach dich mal klug darüber.

    Nachtrag
    Irgendwie hat dein Code keine END IF......
    Geändert von Yaslaw (21.12.09 um 15:13 Uhr)
     
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

  5. #5
    DasBinIch 132 Tutorials.de Gastzugang
    Hier mein derzeitiger Code:
    Code vb:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    
    Sub Daten_eintragen()
    Dim Zeile
    Dim Zeilr
    'nur wenn in B3 und D3 etwas drinsteht dann eintragen
    If [b3] <> "" And [d3] <> "" Then
    'Tabellenblatt ermitteln
    If [h3] = "1" Then
    Sheets("SPK").Select
    'letzte benutzte Zeile ermitteln + 1
    Zeile = Cells(Rows.Count, 1).SpecialCells(xlLastCell).Row + 1
    Zeilr = Cells(Rows.Count, 1).End(xlUp).Row
    'Daten eintragen
    Cells(Zeile, 1) = Sheets("Eingabe").Range("b3").Value
    Cells(Zeile, 2) = Cells(Zeilr, 2) + Sheets("Eingabe").Range("f3").Value
    Cells(Zeile, 3) = Sheets("Eingabe").Range("d3").Value
    Cells(Zeile, 4) = Sheets("Eingabe").Range("f3").Value
    Cells(Zeile, 5) = Sheets("Eingabe").Range("h3").Value
     
    'Sortieren
    Range(Cells(1, 1), Cells(Rows.Count, 5)).Sort _
    Key1:=Range("A1"), Order1:=xlAscending, Header:=xlNo, _
    OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
    SortMethod:=xlPinYin, DataOption1:=xlSortNormal
     
     
    'Eingaben löschen
    Sheets("Eingabe").Select
    [b3] = ""
    [d3] = ""
    [f3] = ""
    [h3] = ""
    'letzte Zeile in sichtbaren Bereich holen
    Cells(Zeile, 1).Select
    Else
    'Tabellenblatt ermitteln
    If [h3] = "2" Then
    Sheets("2.VoBa").Select
    ........

    Hier meine Idee fürs sortieren (die nicht funktioniert):

    Code vb:
    1
    2
    3
    4
    5
    
    'Sortieren
    Range((Cells(1, 1), Cells(Rows.Count, 1)) & (Cells(Rows.Count, 3), Cells(Rows.Count, 5)).Sort _
    Key1:=Range("A1"), Order1:=xlAscending, Header:=xlNo, _
    OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
    SortMethod:=xlPinYin, DataOption1:=xlSortNormal

    Vielen Dank im Voraus!

    DasBinIch132
     

  6. #6
    DasBinIch132 Tutorials.de Gastzugang
    Hab die Lösung!!
    Code vb:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    
    Sub Daten_eintragen()
    Dim Zeile As Long, Z As Long
    'nur wenn in B3 bis H3 etwas drinsteht dann eintragen
    If [b3] = "" Or [d3] = "" Or [f3] = "" Or [h3] = "" Then Exit Sub
    'Tabellenblatt ermitteln
    With Worksheets(Range("H3").Value)
       'letzte benutzte Zeile ermitteln + 1
       Zeile = .Cells(Rows.Count, 1).End(xlUp).Row + 1
       'Daten eintragen
       .Cells(Zeile, 1) = Range("b3").Value
       .Cells(Zeile, 3) = Range("d3").Value
       .Cells(Zeile, 4) = Range("f3").Value
       'Sortieren
       .Range("A2:D" & Zeile).Sort _
          Key1:=.Range("A1"), Order1:=xlAscending, Header:=xlNo, _
             OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
                SortMethod:=xlPinYin, DataOption1:=xlSortNormal
       .Cells(2, 2) = .Cells(2, 4)
       If Zeile <> 2 Then
          .Range("B3:B" & Zeile).Formula = "=B2+D3"
          .Range("b2:B" & Zeile).Value = .Range("b2:B" & Zeile).Value
       Else
          .Range("B2") = .Range("D2")
       End If
       'Eingaben löschen
       Range("B3,D3,F3,H3").ClearContents
       MsgBox "Eingetragen"
       Range("B3").Value = Date
    End With
    End Sub

    Danke für eure Hilfe ... -.-
     

Ähnliche Themen

  1. Java Quellcode "Übung Kontostand"
    Von eduard07 im Forum Java
    Antworten: 2
    Letzter Beitrag: 13.12.06, 08:40