Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

VBA - minimalen Wert in Zeile suchen und Spaltenüberschrift ausgeben

Frage Microsoft Microsoft Office

Mitglied: fitzin

fitzin (Level 1) - Jetzt verbinden

17.04.2012 um 15:44 Uhr, 7084 Aufrufe, 9 Kommentare

Hallo,

ich bräuchte ein Makro, mit dem pro Zeile der geringste Wert (ev. zusätzlich auch der 2. und 3. geringste Wert) ermittelt wird und die Spaltenüberschrift ausgegeben wird. Kann mir da bitte jemand weiterhelfen?

lg fitzin
Mitglied: NetWolf
17.04.2012 um 16:00 Uhr
Moin Moin,

Zeilen haben keine Spaltenüberschriften! Das was du wünscht kann also nicht funktionieren.

btw benötigst du für einzelne Werte kein VBA, dass kann Excel i.d.R. auch ohne

Grüße aus Rostock
Wolfgang
(Netwolf)
Bitte warten ..
Mitglied: mak-xxl
17.04.2012 um 16:25 Uhr
Moin fitzin,

wenn Du z.B. in die Zelle 'A1' die Formel
=KKLEINSTE(A2:IV2;1)
schreibst, so wird aus der gesamten 2. Zeile der Tabelle der kleinste Wert gefunden. Die '1' in der Formel steht für die Rangfolge, also ergibt hier eine '2' den zweitkleinsten Wert.

Soll es komplett in einer Zeile bleiben, so muss in Zelle 'A2' die Formel
=KKLEINSTE(B2:IV2;1)
die dann die kleinste Zahl aus dem Rest der Zeile 2 findet.

Soll das Ganze pro Spalte funktionieren, so lautet die Formel
=KKLEINSTE(A2:A65536;1)
die, wie o.a., aber für die Spalte 'A' funktioniert.

Freundliche Grüße von der Insel - Mario
Bitte warten ..
Mitglied: fitzin
17.04.2012 um 16:32 Uhr
Dass eine Zeile keine Spaltenüberschrift haben kann, ist mir klar. Aber der geringste Wert einer Zeile, der z.B. in Spalte F steht, schon...

Meine Matrix besteht aus über 12.000 Zeilen und ca. 50 Spalten. Den geringsten Wert pro Zeile kann ich einfach mit der Min-Funktion ermitteln. Aber ich bräuchte eine Funktion oder eben ein Makro, das mir angibt, in welcher Spalte dieser Zeilen-Minimalwert steht.
Bitte warten ..
Mitglied: fitzin
17.04.2012 um 16:41 Uhr
Danke für deine Antwort, allerdings liegt mein Hauptproblem darin, wie ich die Spalte ermitteln kann, in der dieser Minimalwert steht. Mit WVerweis komm ich nicht weiter, weil der gesuchte Wert nicht in der ersten Zeile liegt, sondern eben in der 2., 3., 4. etc.
Bitte warten ..
Mitglied: mak-xxl
17.04.2012 um 19:45 Uhr
Moin fitzin,

nachfolgenden Quellcode auf das Modulblatt des betreffenden Tabellenblattes kopieren.
01.
Sub ZeileMinimumAdresse()                       ' Suche Minimum von links beginnend 
02.
 
03.
Dim strRange As String                          ' Bereich Zeile von B bis IV 
04.
Dim i As Long 
05.
Dim intMinNr As Integer 
06.
Dim objWks As Object                            ' Tabellenblatt mit Werten 
07.
 
08.
With Application 
09.
     
10.
    Set objWks = .ThisWorkbook.Worksheets(1)    ' erstes Tabellenblatt 
11.
     
12.
    intMinNr = 1                                ' das wievielte Minimum (Rang) 
13.
     
14.
    For i = 1 To objWks.Range("B:B").End(xlUp).Row 
15.
         
16.
        On Error Resume Next                    ' eventuelle Leerzeilen erzeugen Fehler 
17.
         
18.
        strRange = "B" & i & ":IV" & i          ' Spalte A: Adresse des Minimums 
19.
         
20.
        objWks.Cells(i, 1) = objWks.Range(strRange).Find(.WorksheetFunction.Small(objWks.Range(strRange), intMinNr), LookAt:=xlWhole, LookIn:=xlValues).Address 
21.
     
22.
    Next i 
23.
     
24.
End With 
25.
 
26.
On Error GoTo 0                                  ' Fehlerbehandlung wieder Standard 
27.
 
28.
End Sub
Die Routine geht davon aus, das Spalte 'A' frei ist, hier wird je Zeile die Zelladresse des ersten von links gefundenen Minimums des in der Variable 'intMinNr' festgelegten Ranges dieser Zeile eingetragen.

[Edit]
Achtung: Bitte Zeile 14 ersetzen durch:
For i = 1 To objWks.Range("B" & Rows.Count).End(xlUp).Row
@76109:
Dank für den Hinweis!
[/Edit]

Freundliche Grüße von der Insel - Mario
Bitte warten ..
Mitglied: NetWolf
17.04.2012 um 20:12 Uhr
Moin Moin,

mal so am Rande, wäre es nicht einfacher für dich, das Ganze mit der bedingten Formatierung zu erledigen?

Grüße aus Rostock
Wolfgang
(Netwolf)
Bitte warten ..
Mitglied: 76109
17.04.2012 um 20:20 Uhr
Hallo Mario!

Sorry, aber mit dieser Codezeile
01.
For i = 1 To objWks.Range("B:B").End(xlUp).Row
wirst Du wenig Erfolg haben, weil das To-Ergebnis immer 1 ist

Du musst die Zelle angeben, vonderaus nach oben auf die 1. belegte Zelle gezählt wird.
01.
Wks.Cells(Wks.Rows.Count, "B").End(xlUp).Row
Bedeutet: Von der letzten Zeile aus gesehen, die erste belegte Zelle (von unten nach oben) finden.


Gruß Dieter


PS.
Das .End bezieht sich nicht auf die Letzte Zeile eines Sheets, sondern nur auf eine letzte Zelle mit Inhalt (von oben nach unten oder von unten nach oben).

Beispiel: Zeile 1-5 ist belegt, Zeile 6 ist eine Leerzeile und die Zeilen 7-10 sind wieder belegt, dann:
01.
Line = Cells(1,"B").End(xlDown).Row   'Ab Zeile 1:  Ergebnis = 5 
02.
 
03.
Line = Cells(10,"B").End(xlUp).Row   'Ab Zeile 10:  Ergebnis = 7
Bitte warten ..
Mitglied: mak-xxl
17.04.2012 um 21:09 Uhr
Moin didi1954,

und da man vorab nicht weiß, welche Zeile die letztbelegte ist und welche Excel-Version der Anwender hat, macht man es eben so:

Range("B" & Rows.Count).End(xlUp).Row
oder so:

Cells(Rows.Count, "B").End(xlUp).Row
es sei, denn, man macht Fehler beim Kopieren, so wie ich oben ...

Freundliche Grüße von der Insel - Mario
Bitte warten ..
Mitglied: fitzin
17.04.2012 um 21:46 Uhr
Vielen Dank für eure Hilfe! Funktioniert perfekt - genau was ich gesucht habe
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (25)

Frage von M.Marz zum Thema Windows Server ...

SAN, NAS, DAS
gelöst HP-Proliant Microserver Betriebssystem (14)

Frage von Yannosch zum Thema SAN, NAS, DAS ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Windows 7
Verteillösung für IT-Raum benötigt (12)

Frage von TheM-Man zum Thema Windows 7 ...