Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
784to788
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
784to788
784to788
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

addieren von Werten mit VBA

addieren von Werten mit VBA
31.07.2006 20:33:28
Werten
Guten Abend zusammen,
habe ein Problem in VBA. Ich habe eine Lagerverwaltung in Excel gebastelt.
Datei: Lieferschein.xls
Blatt: Lieferschein
Zellen: T19:V86 enthält gelieferte Positionen
T19:V19 = Überschrift: Artikelnummer, Bezeichnung, Menge
Datei: Bestand.xls
Blatt: Tabelle1
Spalte: i - enthält Summe aller Verkäufe je Artikelnummer (2532 Datensätze)
bisherige Berechnung mit Funktion "Summewenn" unter Bezug auf Historie-Datei
(Historie enthält alle einzelnen gelieferten Artikel - wird aber aufgrund der Datenmenge extrem langsam)
Also habe ich versucht innerhalb VBA die Verkäufe direkt zu berechnen. Den Profi's wird es jetzt grausen... aber ich lerne noch
'Hilfstabelle leeren
Windows("bestand.xls").Activate
Sheets("help").Select
Cells.Select
Selection.ClearContents
'Verkaufte Positionen kopieren und in Hilfstabelle übertragen
Windows("Lieferschein.xls").Activate
Sheets("lieferschein").Range("T19:V86").Select
Range(Selection, Selection.End(xlDown)).Copy
Windows("bestand.xls").Activate
Sheets("help").Select
Range("a1").Select
Selection.PasteSpecial Paste:=xlValues
Dim PosQ1
Dim Hlp As Worksheet, Art As Worksheet
Set Hlp = Sheets("Help")
Set Art = Sheets("Tabelle1")
'Lieferschein - 1.Artikelnummer suchen kopieren
Hlp.Select
zeile1 = 2
Do Until Hlp.Cells(zeile1, 1) = ("")
Hlp.Select
If Cells(zeile1, 1) "" Then
PosQ1 = Cells(zeile1, 1).Value
Cells(zeile1, 1).Copy
' in Bestandsliste wechseln und Artikelnummer suchen
Art.Select
Cells.Find(What:=PosQ1, After:=ActiveCell, LookIn:=xlFormulas _
, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False).Select
'in Zelle "Verkauf aktueller Monat" wechseln
ActiveCell.Offset(0, 8).Select
'Addition bisheriger Wert "Verkauf aktueller Monat" + Menge aus aktuellem Lieferschein (Hilfstabelle)
'
ActiveCell = ActiveCell.Value + Hlp.Cells(zeile1, 3).Value 'funktioniert nur innerhalb einer Datei
'
Else
Exit Sub
End If
'nächste Zeile verkaufte Artikel prüfen und berechnen
zeile1 = zeile1 + 1
Loop
Das ganze funktioniert aber nur wenn ich die gelieferten Artikel in die Bestandsdatei auf eine Hilfstabelle kopiere.
Jetzt nun meine Frage. Wie kann ich diese Berechnung ohne die Hilfstabelle durchführen - wie referenziere ich die Berechnung zwischen 2 verschiedenen Dateien.
Hoffentlich habe ich mich nicht zu kompliziert ausgedrückt.
Schon mal besten Dank im Voraus.
Gruss
Ralf

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: addieren von Werten mit VBA
31.07.2006 21:49:32
Werten
Hallo, Ralf,
Deine Aufgabe könntest Du mit einem Array lösen, wenn die drei Spalten T, U und V in den Zeilen 19 bis 86 einen gemeinsamen Datentyp besitzen (andernfalls wäre eine Lösung mit Buneutzerdefinierten Typen oder aver drei Datenvektoren notwendig).
Ich gehe also davon aus, dass der Datentyp aller Zellen im Bereich T19:V86 vom Typ Integer sind.

Sub Lieferscheinauswertung()
Windows("bestand.xls").Activate
Windows("Lieferschein.xls").Activate
'kann entfallen Verkaufte Positionen kopieren und in LS-Datenfeld übertragen
Dim LS(68, 3) As Integer 'Datenfeld für die Zellen T19:V86
'Speichere Werte aus dem Bereich T19:V86 in das Datenfeld LS
i = 0
For r = 19 To 86
j = 0
For c = 19 To 22
j = j + 1
LS(i, j) = Cells(r, c)
Next c
Next r
Dim PosQ1
' Dim Hlp As Worksheet
' Set Hlp = Sheets("Help")  --- wird ersetzt Durch das Feld LS
Dim Art As Worksheet
Set Art = Sheets("Tabelle1")
'Lieferschein - 1.Artikelnummer suchen kopieren
'Hlp.Select
zeile1 = 1 'Zeile im Datenfeld LS(zeile 1...68,spalte 1...3)
Art.Select
Do Until LS(zeile1, 1) = "" OR zeile1 > 68
'Hlp.Select
'      If LS(zeile1, 1) <> "" Then 'bereits in DO-Until-Bedingung enthalten
PosQ1 = LS(1, 1).Value
' in Bestandsliste wechseln und Artikelnummer suchen
Cells.Find(What:=PosQ1, After:=ActiveCell, LookIn:=xlFormulas _
, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False).Select
'in Zelle "Verkauf aktueller Monat" wechseln
ActiveCell.Offset(0, 8).Select
'Addition bisheriger Wert "Verkauf aktueller Monat" + Menge aus aktuellem Lieferschein (LS)
ActiveCell = ActiveCell.Value + LS(zeile1, 3).Value     'funktioniert nur innerhalb einer Datei
'        Else
'            Exit Sub
'        End If
'nächste Zeile verkaufte Artikel prüfen und berechnen
zeile1 = zeile1 + 1
Loop
End Sub

Ich hoffe, dass es so funktioniert wie ich mir vorstelle - bitte also erst an einer Kopie prüfen - und Du die Schritte nachvollziehen kannst und ggf. Deiner Aufgabe anpassen kannst, ansonsten bitte bei Fragen fragen!
Gruß,
Uwe
Anzeige
AW: addieren von Werten mit VBA
31.07.2006 22:00:09
Werten
Hallo Uwe,
besten Dank. Werde deinen Vorschlag mal ausprobieren
Gruss
Ralf
AW: addieren von Werten mit VBA - Korrektur
31.07.2006 22:16:51
Werten
Korrekturen, nach einer vereinfachten Prüfung - da Grundlagendatenblätter nicht vorhanden.

Sub Lieferscheineauswertung()
Dim LS(68, 3) As Integer 'Datenfeld für die Zellen T19:V86
Windows("bestand.xls").Activate
'Verkaufte Positionen kopieren und in /*Hilfstabelle*/ LS übertragen
Windows("Lieferschein.xls").Activate
Sheets("lieferschein").Select
'Speichere Werte aus dem Bereich T19:V86 in das Datenfeld LS
i = 0
For r = 19 To 86
i = i + 1
j = 0
For c = 20 To 22
j = j + 1
LS(i, j) = Cells(r, c)
Next c
Next r
Dim PosQ1
' Dim Hlp As Worksheet
' Set Hlp = Sheets("Help")  --- wird ersetzt Durch das Feld LS
Dim Art As Worksheet
Set Art = Sheets("Tabelle1")
'Lieferschein - 1.Artikelnummer suchen kopieren
'Hlp.Select
zeile1 = 1
Do Until LS(zeile1, 1) = 0
'Hlp.Select
'If LS(zeile1, 1) <> "" Then
PosQ1 = LS(1, 1)
' in Bestandsliste wechseln und Artikelnummer suchen
Art.Select
Cells.Find(What:=PosQ1, After:=ActiveCell, LookIn:=xlFormulas _
, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False).Select
'in Zelle "Verkauf aktueller Monat" wechseln
ActiveCell.Offset(0, 8).Select
'Addition bisheriger Wert "Verkauf aktueller Monat"
'+ Menge aus aktuellem Lieferschein (LS)
ActiveCell = ActiveCell.Value + LS(zeile1, 3)  'funktioniert nur innerhalb
einer Datei
'Else
'    Exit Sub
'End If
'nächste Zeile (in LS() )verkaufte Artikel prüfen und berechnen
zeile1 = zeile1 + 1
Loop
End Sub

Anzeige
AW: addieren von Werten mit VBA
01.08.2006 10:12:45
Werten
Hallo Ralf,
Schritt eins - dein Code ohne "activate" u. ohne "select":
Dim PosQ1 As String
Dim Hlp As Worksheet, Art As Worksheet
Dim Gefunden As Long
Set Hlp = Workbooks("bestand.xls").Worksheets("Help")
Set Art = Workbooks("bestand.xls").Sheets("Tabelle1")
'Hilfstabelle leeren
Hlp.Columns("A:C").ClearContents
'Verkaufte Positionen kopieren und in Hilfstabelle übertragen
Workbooks("Lieferschein.xls").Worksheets("lieferschein").Range("T19:V86").Copy _
Workbooks("bestand.xls").Worksheets("help").Range("A1").PasteSpecial(Paste:=xlValues)
'Lieferschein - 1.Artikelnummer suchen kopieren
zeile1 = 2
Do Until Hlp.Cells(zeile1, 1) = ""
If Hlp.Cells(zeile1, 1) "" Then
PosQ1 = Hlp.Cells(zeile1, 1).Value
' in Bestandsliste Zeile der Artikelnummer suchen
Gefunden = Art.Range("A1:A2533").Find(What:=PosQ1, LookIn:=xlFormulas _
, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False).Row
'Addition bisheriger Wert "Verkauf aktueller Monat" +
'Menge aus aktuellem Lieferschein (Hilfstabelle)
Art.Cells(Gefunden, 9).Value = Art.Cells(Gefunden, 9).Value + Hlp.Cells(zeile1, 3).Value
Else
Exit Sub
End If
'nächste Zeile verkaufte Artikel prüfen und berechnen
zeile1 = zeile1 + 1
Loop
Gruß
Gerd
Anzeige
AW: addieren von Werten mit VBA
01.08.2006 20:50:46
Werten
Hallo Gerd,
besten Dank für die Tips. Habe schon vermutet dass mann das ganze eleganter - ohne selects - machen kann. Setze mich gleich daran und probiere es aus.
Gruss
Ralf
AW: addieren von Werten mit VBA
01.08.2006 22:48:24
Werten
Hallo Ralf,
vielleicht gehts auch ohne Hilfstabelle.
Die Find-Methode musst Du ggf. noch ausformulieren.
Warum Du bei der Suche nach Artikelnummern in der Bestandstabelle
in Formeln suchst, ist an mir vorbeigegangen.
Das wäre dann der nächste Schritt.
Wenn 's noch zu langsam läuft, dann bräuchtest Du in der Tat noch Datenfelder.

Sub Neue_Zahlen_eintragen()
Dim Lief As Worksheet, Art As Worksheet, Gefunden As Long, zeile As Long
Set Lief = Workbooks("Lieferschein.xls").Worksheets("lieferschein")
Set Art = Workbooks("bestand.xls").Worksheets("Tabelle1")
zeile = 20
Do Until Lief.Cells(zeile, 20) = "" Or zeile > 86
If Lief.Cells(zeile, 22) > 0 Then
On Error GoTo Errorhandler
Gefunden = Art.Range("A1:A2533").Find(CStr(Cells(zeile, 20).Value)).Row
Art.Cells(Gefunden, 9).Value = Art.Cells(Gefunden, 9).Value + _
Lief.Cells(zeile, 22).Value
End If
Errorhandler:
If Err.Number > 0 Then
Lief.Cells(zeile, 20).Font.Color = vbRed
MsgBox "Artikel-Nr. " & Lief.Cells(zeile, 20) & _
" ist im Bestand nicht vorhanden! "
Err.Clear
End If
zeile = zeile + 1
Loop
End Sub

Gruß
Gerd
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige