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

min mit vba

min mit vba
01.05.2007 12:57:00
kirsche
hallo leute,
wieder mal stehe ich vor einem problem und hoffe auf eure hilfe.
in ein tabellenblatt übertrage ich daten von spalte A - I. die zeilenmenge ist variabel. mal sind es 10 datensätze mal aber auch 99 oder mehr.in spalte A befinden sich Artikelnummern, welche auch mehrfach vorkommen können. nun möchte ich am ende der einträge die kleinste zahl aus spalte A anzeigen. das wollte ich mit der min-formel lösen, leider kenne ich den darüber liegenden bereich nicht und komme da irgendwie nicht weiter.
die zelle ermittle ich mit:
Cells(ActiveCell.Row + 1, 1).Select
und dort soll diese formel dann wirksam werden, wobei die R[-45] eine variable größe ist
ActiveCell.FormulaR1C1 = "=MIN(R[-3]C:R[-45]C)"
vielleicht hat ja jemand eine idee, mir qualmt schon seit stunden der kopf und bei der recherche habe ich leider auch nichts passendes gefunden.
viele grüße kirsche

19
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: min mit vba
ransi
HAllo
Wenn das deine Daten sind :
Tabelle1

 A
1Daten
292
340
446
513
627
737
872
914
1016
1116
1219
1346
1422
1521
1660
1780
1887
1958
2087


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4
Lass diesen Code mal laufen:
' **********************************************************************
' Modul: Tabelle1 Typ: Element der Mappe(Sheet, Workbook, ...)
' **********************************************************************

Option Explicit


Public Sub test()
Dim erste_Freie As Range
Set erste_Freie = Range("A65536").End(xlUp).Offset(1, 0)
erste_Freie.Formula = "=min(A2:" & erste_Freie.Offset(-1, 0).Address & ")"
End Sub

Reicht dir das damit du weiterarbeiten kannst ?
ransi

Anzeige
AW: min mit vba
01.05.2007 13:27:00
kirsche
hallo ransi,
das hat super funktioniert, da wäre ich mit meinen minimalen vba-kenntnissen ja im leben nicht drauf gekommen. hab recht herzlichen dank. nun stehe ich aber vor dem nächsten problem. in excel selbst habe ich es gelöst bekommen, aber da es über vba laufen soll habe ich das P im gesicht.
eine zeile tiefer soll die nächst größere zahl ermittelt werden.
formel in excel:=WENN(MAX(J:J)=MAX(A$7:A7); "";KGRÖSSTE(J:J;ZÄHLENWENN(J:J;">"&A7)))
wobei ich hier meine artikelnummern noch in spalte j stehen hatte
kannst du mir dabei vielleicht auch helfen?
gruss kirsche

Anzeige
AW: Folgefrage - Formel nächste Zeile
01.05.2007 19:43:58
Luc:-?
Hallo Kirsche,
in Ransi's Pgm als vorletzte Zeile... erste_Freie.Offset(1, 0).FormulaLocal = "=WENN(MAX(J:J)=MAX(A$7:A7);"""";KGRÖSSTE(J:J;ZÄHLENWENN(J:J;"">""&A7)))"


...einsetzen.
Gruß Luc :-?

AW: Folgefrage - Formel nächste Zeile
01.05.2007 19:51:00
kirsche
hallo luc,
bei dieser formel hatte ich die artikelnummern noch in spalte j stehen, nun stehen sie aber in a und darunter soll die zusammenrechnung stattfinden, dadurch gibt es den bereich (J:J) und (A7) nicht mehr. dieser müßte ähnlich angesprochen werden, wie in dem code von ransi und da hapert es mächtig bei mir. ich habe mir auch schon überlegt, eine hilfstabelle anzulegen?
gruß kirsche

Anzeige
AW: Folgefrage - Formel nächste Zeile
01.05.2007 21:13:01
Gerd
Hallo kirsche, Hallo Luc

Public Sub test()
Dim erste_Freie As Range
Set erste_Freie = Range("A65536").End(xlUp).Offset(1, 0)
erste_Freie.Formula = "=min(A2:" & erste_Freie.Offset(-1, 0).Address & ")"
erste_Freie.Offset(1, 0).Formula = "=SMALL(A2:" & erste_Freie.Offset(-1, 0).Address & ",2)" _
_
b>
End Sub
Grüße Gerd

AW: Folgefrage - Formel nächste Zeile
01.05.2007 21:29:00
kirsche
hallo gerd,
das funktioniert ja super. ich war schon dabei mir ne hilfstabelle zu bauen, da ich nicht weiter kam, aber nun freu ich mich voll. danke ;-)
nun dachte ich, ich könnte das ganze erweitern, aber da scheiter ich doch glatt wieder. ich denke, für small muß ich was anderes einsetzten? um die nächstgrößere zahl zu ermitteln?
gruss kirsche

Anzeige
AW: Folgefrage - Formel nächste Zeile
02.05.2007 21:26:00
Gerd
Hallo kirsche,
für "SMALL" nicht, aber "dahinter" beim Rang-Argument.
Falls alle Werte "gedreht" werden sollen, könntest Du auch den Range kopieren u. mit der
Sort-Methode arbeiten.

Public Sub test()
Dim erste_Freie As Range, i As Long
Set erste_Freie = Range("A65536").End(xlUp).Offset(1, 0)
For i = 1 To Range("A65536").End(xlUp).Row - 1  '# oder z.B.  .. to 5
erste_Freie.Offset(i - 1, 0).Formula = _
"=SMALL(A2:" & erste_Freie.Offset(-1, 0).Address & "," & i & ")"
Next
End Sub


Gruß Gerd

...und wenn ihr FormulaLocal verwendet...
03.05.2007 03:51:00
Luc:-?
...könnt ihr auch den dt. Formeltext verwenden!
Gruß Luc :-?

Anzeige
AW: ...und wenn ihr FormulaLocal verwendet...
03.05.2007 07:35:00
Gerd
Hallo Luc,
ja. Ich habe mir halt angewöhnt, in der Originalsprache zu bleiben.
Da ich kein Formelexperte bin, wäre für mich die interessantere Frage,
ob man die For...Next-Schleife durch eine Array-Formel ersetzen könnte.
Gruß Gerd

AW: ...und wenn ihr FormulaLocal verwendet...
03.05.2007 20:57:00
kirsche
hallo gerd,
ich habe deinen code ausprobiert und er funktioniert auch. es gibt nur einen haken dabei, wenn die artikelnummer mehrfach vorkommt, dann erscheint sie auch mehrfach auf der zusammenführung und das sollte gerade eben nicht sein ;-((
trotzdem danke für deine mühe, macht echt spass hier im forum.
gruss dörte

Anzeige
AW: KdNr'n
03.05.2007 22:08:00
Gerd
Hallo Dörte,
der Haken ist in der Excel-Formel "KKleinste" eingebaut.
So z.B. kriegst die Duplikate wieder raus.
Die Formeln werden durch ihre Werte ersetzt, da sie bei nachträglichen Änderungen "oben" nicht mehr
stimmen bzw. wieder Wiederholungen liefern würden.
Falls in A1 eine Überschrift wäre, ginge alles mit viel kürzerem Code.
Probiere deshalb auch den Spezialfilter aus, den man ebenfalls per VBA steuern kann. :-)

Public Sub test()
Dim erste_Freie As Range, i As Long
Set erste_Freie = Range("A65536").End(xlUp).Offset(1, 0)
For i = 1 To Range("A65536").End(xlUp).Row - 1  '# oder z.B.  .. to 5
erste_Freie.Offset(i - 1, 0).Formula = _
"=SMALL(A2:" & erste_Freie.Offset(-1, 0).Address & "," & i & ")"
Next
For i = Range("A65536").End(xlUp).Row To erste_Freie.Offset(1, 0).Row Step -1
If Cells(i, 1).Value = Cells(i - 1, 1).Value Then
'doppelte löschen
Cells(i, 1).Delete shift:=xlUp
Else
'Formeln wieder entfernen
Cells(i, 1).Value = Cells(i, 1).Value
End If
Next
'Formel in erster Zelle entfernen
erste_Freie.Value = erste_Freie.Value
End Sub


Gruß Gerd

Anzeige
AW: KdNr'n
03.05.2007 22:18:36
kirsche
hallo gerd,
das funzt nicht, in der zweiten zeile springt der debugger an. :-((
es gibt überschriften, zeile 1-7 das hatte ich im vorherigen code immer angepasst.
gruss dörte

AW: KdNr'n
03.05.2007 23:21:59
Gerd
Hallo Dörte,
heißt dies eine Überschrift in "A1", in "A2 bis "A6" Werte, in "A7" eine neue Überschrift für den Extrakt?
Können diese beiden Überschriften identisch sein ?
Gruß Gerd

AW: KdNr'n
03.05.2007 23:31:59
kirsche
hallo gerd,
ich lade mal ne datei hoch, so sieht der kopf der tabelle dann aus.
https://www.herber.de/bbs/user/42226.xls
gruss dörte

Anzeige
...Im Prinzip ja! Notfalls Evaluate mit...
04.05.2007 04:29:00
Luc:-?
...englischer Formel als Textargument, Gerd.
Gruß Luc :-?

AW: Artikelnummernliste
04.05.2007 20:04:00
Gerd
Hallo Luc,
bei meinen dürftigen Formelkenntnissen bedeutet "im Prinzip" leider auch "theoretisch".
Aber diese Aufgabenstellung hier müsste formel-, schleifen- u. hoffentlich fehlerfrei zu lösen sein.
Hallo Dörte,
deine Beispieldatei enthält leider keine Beispielswerte. Für den folgenden Code ist es
zwingend erforderlich, dass die zu "holenden" Daten eine Überschriftenzeile haben u.
keine Lücken zwischendrin.
Ich habe unterstellt, die Überschriftenzeile ist die Zeile 5, dann kommen die auszuwertenden
Artikelnummern am Stück.

Sub test
Dim ez As Long, lz As Long, ez2 As Long
ez= 5
lz= Cells(ez,1).End(xlDown).Row
ez2= lz+ 1
Range("A" & ez & ":" & "A" & lz).AdvancedFilter Action:=xlFilterCopy, copytorange:=Range("A" &  _
ez2), _
Unique:=True
Range("A" & ez2 & ":" & "A" & Cells(ez2, 1).End(xlDown).Row).Sort Key1:= Cells(ez2,1), _
Order1:=xlAscending, Header:= xlYes
Cells(ez2,1).Delete shift:=xlUp
End Sub


Grüße Gerd

Anzeige
AW: Artikelnummernliste
04.05.2007 22:46:00
kirsche
hallo gerd,
ist ja lustig, nun funzt es aber meine 2. & 3. überschrift wird nun auch noch mit übertragen. das sollte eigentlich nicht sein. ich schick dir mal den ganzen code.

Private Sub Worksheet_Activate()
'alte einträge löschen
Range("K7:N2500").ClearContents
Range("A7:I2500").ClearContents
Range("A7:I7").Copy
Range("A8:I2500").Select
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
'übersichtsbeleg
Dim Aletzte As Long, i As Long, j As Long
Dim wks3 As Worksheet, wks4 As Worksheet
Application.ScreenUpdating = False
Set wks3 = Sheets("Eingabe")
Set wks4 = ActiveSheet
j = 7
Aletzte = IIf(IsEmpty(wks3.Range("A65536")), wks3.Range("A65536").End(xlUp).Row, 65536)
For i = 4 To Aletzte
' 4 = Spalte der Lieferantennummer anpassen gegebenenfalls
'1 = Zeile und 1 = Spalte der Lieferantennummer
If wks3.Cells(i, 20).Value = wks4.Cells(3, 1).Value Then
'j = ab zeile 7 übertragen
wks3.Range("E" & i & ":H" & i).Copy
wks4.Range("A" & j & ":D" & j).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks _
:=False, Transpose:=False
wks3.Range("M" & i & ":N" & i).Copy
wks4.Range("E" & j & ":F" & j).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks _
:=False, Transpose:=False
wks3.Range("J" & i & ":K" & i).Copy
wks4.Range("G" & j & ":H" & j).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks _
:=False, Transpose:=False
wks3.Range("D" & i).Copy
wks4.Range("I" & j).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,  _
SkipBlanks _
:=False, Transpose:=False
j = j + 1
End If
Next i
'gesamtübersichtsbeleg
'erste freie zelle ermitteln und überschrift eintragen und formatieren
Dim lLetzte  As Long
lLetzte = IIf(Range("A65536")  "", 65536, Range("A65536").End(xlUp).Row)
Range("A" & lLetzte + 1).Value = "R e t o u r e  -  G e s a m t b e l e g"
Range("I" & lLetzte + 1).Value = "Sammelretoure 1 x monatlich"
Range("A" & lLetzte + 2).Value = "fFZ art.Nr."
Range("B" & lLetzte + 2).Value = "Artikelbezeichnung"
Range("C" & lLetzte + 2).Value = "Inhalt/Ein"
Range("D" & lLetzte + 2).Value = "heit"
Range("E" & lLetzte + 2).Value = "Gesamt-Menge"
Range("F" & lLetzte + 2).Value = "Lief.Art.Nr."
With Range("A" & lLetzte + 1).Font
.Size = 16
.FontStyle = "Fett"
.Underline = xlUnderlineStyleSingle
End With
With Range("A" & lLetzte + 1)
.HorizontalAlignment = xlLeft
.VerticalAlignment = xlCenter
End With
With Range("I" & lLetzte + 1).Font
.Size = 10
.FontStyle = "Fett"
End With
With Range("I" & lLetzte + 1)
.HorizontalAlignment = xlRight
.VerticalAlignment = xlCenter
End With
'zusammenführung der einzelübersicht
Dim ez As Long, lz As Long, ez2 As Long
ez = 6  'überschrift steht in zeile 6
lz = Cells(ez, 1).End(xlDown).Row
ez2 = lz + 1
Range("A" & ez & ":" & "A" & lz).AdvancedFilter Action:=xlFilterCopy, copytorange:=Range("A" &  _
_
ez2), _
Unique:=True
Range("A" & ez2 & ":" & "A" & Cells(ez2, 1).End(xlDown).Row).Sort Key1:=Cells(ez2, 1), _
Order1:=xlAscending, Header:=xlYes
Cells(ez2, 1).Delete shift:=xlUp
End Sub


ich hab mal geguckt aber nicht herrausfinden können, woran es liegt. ;-((
danke für deine unterstützung.
gruss kirsche

AW: Artikelnummernliste
04.05.2007 23:33:55
Gerd
Hallo kirsche,
für einen Volltest fehlt mir die Datenbasis, so dass es mir nicht gelungen ist, diesen Fehler zu erzeugen.
2. u. 3. Überschrift, in den Zellen B6 + C6 ?
Hast Du verbundene Zellen?
Gruß Gerd

AW: Artikelnummernliste
04.05.2007 23:55:15
kirsche
hallo gerd,
ich hab meine tabelle mit daten gezipt und lade sie mit hoch, ich hoffe das geht auch mit zip-dateien, denn sonst wäre sie zu groß.
https://www.herber.de/bbs/user/42265.zip
gruss kirsche

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige