Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Excel Makro

Forumthread: Excel Makro

Excel Makro
25.09.2015 15:57:46
Christoph
Ein Hallo an die Excel Profis,
ich komme einfach nicht weiter bei meinem Problem.
Daher wende ich mich vertrauensvoll hier ans Forum.
Ich suche innerhalb einer Zeile (die immer 13 Spalten breit ist) jeweils den Max-Wert (mit der Funktion Max()).
Basierend auf dem gefunden Max-Wert ermittle ich die Zellen.Addresse, welche ich in einer Hilfsspalte anzeige.
(=Zeichen(Vergleich(Max(F4:R4);F4:R4;0)+69) & Zeile()
Soweit sogut .. und nun komme ich zum Problem.
Aus der ermittelten Zelle (welche den MaxWert besitzt), muss ich den Kommentar auslesen und in die 3 Zelle der Zeile (in meinem Bsp also C4) schreiben.
Das gilt mir letztlich nicht
Hier mal mein 'Versuch'

i = 0
x = 4
For i = 1 To 31
'das ist die Hilfsspalte, mit der Zieladresse mittels Formel ermittelt
Range("T" & x).Value
xcde = Range("T" & x).Value
'springen zur Zieladdresse
ActiveCell.Offset(0,-17).Select
'ZielAdresse auslesen
MyAdr = Selection.Address
hier ....? irgendetwas wie ? das u.a. funktioniert so nicht
Range(MyAdr) = ActiveWorkbook.ActiveSheet.Range(xcde).Comment.Text
x = x + 1
Next i

Letztlich scheitere ich am Schreiben des Kommentar in die Zeiladresse.
Hat jemand eine Idee oder einen Tip, wie man das lösen kann ?
Danke schon einmal im voraus
Gruss
Chris

Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Excel Makro
25.09.2015 16:36:39
hary
Moin
Geht auch ohne Hilsspalte mit der Formel.
Teste mal.
Sub neu()
Dim a As Variant
Dim i As Long
For i = 4 To 35
a = Application.Match(Application.Max(Range("F" & i & ":R" & i)), Rows(i), 0)
If IsNumeric(a) Then '--Trefferspaltenummer
If Not Cells(i, a).Comment Is Nothing Then '--wenn Kommentar vorhanden
Cells(i, 3) = Cells(i, a).Comment.Text '--eintragen in SpalteC
End If
End If
Next
End Sub

Dein Code angepasst,laeuft abewr wenn kein Kommentar drin ist auf einen Fehler.
i = 0
x = 4
For i = 1 To 31
'das ist die Hilfsspalte, mit der Zieladresse mittels Formel ermittelt
xcde = Range("T" & x).Value
'springen zur Zieladdresse
Range("T" & x).Offset(0, -17).Select
'ZielAdresse auslesen
MyAdr = Selection.Address
'hier ....? irgendetwas wie ? das u.a. funktioniert so nicht
Range(MyAdr) = ActiveWorkbook.ActiveSheet.Range(xcde).Comment.Text
x = x + 1
Next i

gruss hary

Anzeige
AW: und noch mit find
25.09.2015 17:00:28
hary
Moin nochemal
Geht auch mit find.
Dim zelle As Range
Dim i As Long
For i = 4 To 35
Set zelle = Rows(i).Find(What:=Application.Max(Range("F" & i & ":R" & i)), LookIn:=xlValues,  _
lookat:=xlWhole)
If Not zelle Is Nothing Then
If Not zelle.Comment Is Nothing Then
Cells(i, 3) = zelle.Comment.Text
End If
End If
Next

gruss hary

Anzeige
AW: Excel Makro
25.09.2015 16:52:54
matthias
Hallo Chris,
das mit dem Selectieren kannst du weglassen, völlig unnötig.
For Zeile = 1 To 31
Adresse = CStr(Range("T" & Zeile).Value
Range("C" & Zeile).Value = Range(Adresse).Comment.Text
Next Zeile 

Als erstes wird aus der Zelle T ein Text generiert (CStr = Convert-String). Dieser Text dient als Grundlage für deine Zell-Adresse in der anderen Range-Anweisung. Von dieser möchte ich aber nicht der Wert (Value) sondern den Kommentartext. Das wird dann in Zelle C als Wert geschrieben.
Allerdings kannst du dir das mit dem "Zeichen" in deiner Formel sparen. Man kann nämlich Spalten auch in VBA mit numerischen Werten angeben. Dann nennt sich das nicht Range, sondern Cells(Zeile, Spalte). Vorallem bei Spalten mit mehr als einem Buchstaben wird deine Formel dir nicht mehr weiterhelfen können
Hast du in Spalte T also nur folgende Formel stehen: "=Vergleich(Max(F4:R4);F4:R4;0)"
so kannst du im Makro schreiben:
For Zeile = 1 To 31
Spalte = 5 + Range("T" & Zeile).Value
Range("C" & Zeile ).Value = Cells(Zeile , Spalte).Comment.Text
Next Zeile 

lg Matthias

Anzeige
AW: Excel Makro
25.09.2015 17:01:16
matthias
Nachdem ich das von Hary gelesen habe mit dem Fehler:
Dim Zeile As Long, Adresse As String, Kommentartext As String
For Zeile = 1 To 31
Adresse = CStr(Range("T" & Zeile).Value)
If Range(Adresse).Comment Is Nothing Then
Kommentartext = ""
Else
Kommentartext = Range(Adresse).Comment.Text
End If
Range("C" & Zeile).Value = Kommentartext
Next Zeile

Anzeige
AW: Excel Makro
26.09.2015 10:43:49
Christoph
Hallo Harry, hallo Matthias,
vielen Dank für die schnellen Antworten / Lösungen. Beide Varianten funktionieren.
Das Beste daran ist, dass a) mein aktuelles Problem somit gelöst ist und b)ich mit diesen Ansätzen eine ganze Menge ableiten (lernen) kann.
Nochmals Danke
Gruss Chris
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige