Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1448to1452
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
Inhaltsverzeichnis

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

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

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

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
Anzeige

301 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige