Kommentar per VBA in eine Zelle schreiben

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
Frame
Bild

Betrifft: Kommentar per VBA in eine Zelle schreiben
von: Lukas
Geschrieben am: 27.11.2015 22:09:11

Hallo zusammen,
ich habe eine Excel-Mappe die aus mehreren Tabellenreitern besteht. Ich habe euch mal eine vereinfachte Version angehängt.
Ein Tabellenreiter "Übersicht" fasst quasi den Umsatz nach Segmenten für die einzelnen Quartale zusammen.
in den anderen Tabellenreitern, die jeweils den Namen des Segmentes haben, enthalten eine örtliche Angabe (Bundesländer) des Umsatzes. Dort steht einfach nur drin, wo der Umsatz erfolgte.
Ich würde nun gerne in jeder Zelle des Reiters "Übersicht", wo eine Zahl drin steht, ein Kommentar eingefügt bekommen, in dem drin steht wie sich der Betrag auf die Bundesländer aufteilt.
Händisch würde das enorm fiel Zeit in Anspruch nehmen. Leider kenne ich mich mit VBA nur sehr schlecht aus. Kann mir da jemand helfen, wie ich das mit VBA quasi automatisch erledigen kann?
Schön wäre, wenn der Umsatz eines Bundeslandes null beträgt, diese Angabe im Kommentar nicht erscheint und wenn unter "Baden-Würtemberg" ein oder zwei weitere Bundesländer hinzugefügt werden, diese dann auch im Kommentar erscheinen.
Beispiel:
im Tabllenreiter Übersicht sollte in Zelle D3 folgender Kommentar erscheinen:
- Berlin: 121,91 €
- Nordrhein-Westfalen 672,15 €
- Baden-Würtemberg 595,75 €
Vielen Dank schon mal, für jede Hilfe
https://www.herber.de/bbs/user/101857.xlsx

Bild

Betrifft: AW: Kommentar per VBA in eine Zelle schreiben
von: Sepp
Geschrieben am: 27.11.2015 22:19:30
Hallo Lukas,
und wie kommen deine Daten in die Tabelle Zusammenfassung? Per VBA? Dann solltest du den Code zeigen.

Gruß Sepp


Bild

Betrifft: AW: Kommentar per VBA in eine Zelle schreiben
von: Lukas
Geschrieben am: 27.11.2015 22:39:29
Hallo Sepp,
In welche Tabelle "Zusammenfassung"? Meinst du "Übersicht"? Die werden in er Original-Datei über ein Add-In per EPM aus einer Datenbank eingelesen. Da muss man nur die Dimensionen (Konto und Zeit) in der Zeile bzw. Spalte eingeben und dann findet Excel die Zahlenwerte automatisch.
Gruß

Bild

Betrifft: AW: Kommentar per VBA in eine Zelle schreiben
von: Sepp
Geschrieben am: 27.11.2015 23:20:51
Hallo Lukas,
für deine Beispieldatei.

' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Sub Kommentare()
Dim rng As Range, rngI As Range
Dim objSh As Worksheet
Dim varRet As Variant
Dim lngRow As Long, lngC As Long
Dim strComment As String

With Sheets("Übersicht")
  Set rng = .Range("B3:B" & Application.Max(3, .Cells(.Rows.Count, 2).End(xlUp).Row))
  .Cells.ClearComments
  For Each rngI In rng
    If SheetExist(rngI.Text) Then
      Set objSh = Sheets(rngI.Text)
      For lngC = 4 To Application.Max(4, .Cells(2, .Columns.Count).End(xlToLeft).Column)
        varRet = Application.Match(.Cells(2, lngC), objSh.Rows(2), 0)
        If IsNumeric(varRet) Then
          strComment = ""
          For lngRow = 5 To Application.Max(5, objSh.Cells(.Rows.Count, 4).End(xlUp).Row)
            If objSh.Cells(lngRow, 4) <> "" Then
              If objSh.Cells(lngRow, varRet) <> "" Then
                If IsNumeric(objSh.Cells(lngRow, varRet)) Then
                  strComment = strComment & objSh.Cells(lngRow, 4) & String(30 - _
                    Len(objSh.Cells(lngRow, 4)) - Len(Format(objSh.Cells(lngRow, varRet), "0.00")), _
                    " ") & Format(objSh.Cells(lngRow, varRet), "0.00") & vbCrLf
                End If
              End If
            End If
          Next
          strComment = strComment & "Gesamt" & String(24 - Len(Format(objSh.Cells(3, varRet), _
            "0.00")), " ") & Format(objSh.Cells(3, varRet), "0.00")
          .Cells(rngI.Row, lngC).AddComment strComment
          .Cells(rngI.Row, lngC).Comment.Shape.TextFrame.Characters.Font.Size = 10
          .Cells(rngI.Row, lngC).Comment.Shape.TextFrame.Characters.Font.Name = _
            "Lucida Sans Typewriter"
          .Cells(rngI.Row, lngC).Comment.Shape.TextFrame.AutoSize = True
        End If
      Next
    End If
  Next
End With

Set rng = Nothing
Set objSh = Nothing
End Sub

Private Function SheetExist(ByVal sheetName As String, Optional Wb As Workbook) As Boolean
Dim wks As Object
On Error GoTo ERRORHANDLER
If Wb Is Nothing Then Set Wb = ThisWorkbook
For Each wks In Wb.Sheets
  If LCase(wks.Name) = LCase(sheetName) Then SheetExist = True: Exit Function
Next
ERRORHANDLER:
SheetExist = False
End Function

Gruß Sepp


Bild

Betrifft: AW: Kommentar per VBA in eine Zelle schreiben
von: Lukas
Geschrieben am: 28.11.2015 08:49:36
Guten Morgen Sepp,
boah, super! Vielen Dank!
Ich hätte nun aber doch noch eine Bitte...könntest du mir den Code etwas erläutern? Habe nämlich so gut wie keine VBA-Kenntnisse, aber ich würde diese doch gerne erweitern.
Gruß
Lukas

Bild

Betrifft: AW: Kommentar per VBA in eine Zelle schreiben
von: Sepp
Geschrieben am: 28.11.2015 09:50:59
Hallo Lukas,
anbei deine Datei. Im Code findest du einige Kommentare, ich habe den Code noch ein wenig erweitert, um die Kommentare etwas 'hübscher' darzustellen.
https://www.herber.de/bbs/user/101860.xlsm

Gruß Sepp


Bild

Betrifft: AW: Kommentar per VBA in eine Zelle schreiben
von: Lukas
Geschrieben am: 28.11.2015 10:41:56
Hallo Sepp,
vielen vielen Dank nochmal!
Gruß
Lukas

 Bild

Beiträge aus den Excel-Beispielen zum Thema "Kommentar per VBA in eine Zelle schreiben"