Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Kommentar per VBA in eine Zelle schreiben

Kommentar per VBA in eine Zelle schreiben
27.11.2015 22:09:11
Lukas
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

Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Kommentar per VBA in eine Zelle schreiben
27.11.2015 22:19:30
Sepp
Hallo Lukas,
und wie kommen deine Daten in die Tabelle Zusammenfassung? Per VBA? Dann solltest du den Code zeigen.
Gruß Sepp

AW: Kommentar per VBA in eine Zelle schreiben
27.11.2015 22:39:29
Lukas
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ß

Anzeige
AW: Kommentar per VBA in eine Zelle schreiben
27.11.2015 23:20:51
Sepp
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

Anzeige
AW: Kommentar per VBA in eine Zelle schreiben
28.11.2015 08:49:36
Lukas
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

AW: Kommentar per VBA in eine Zelle schreiben
28.11.2015 09:50:59
Sepp
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

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

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Kommentare per VBA in eine Zelle schreiben


Schritt-für-Schritt-Anleitung

  1. Öffne die Excel-Datei und drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Füge ein neues Modul hinzu:

    • Klicke im Menü auf Einfügen und wähle Modul.
  3. Kopiere den folgenden VBA-Code in das 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
  4. Schließe den VBA-Editor und kehre zu Excel zurück.

  5. Führe das Makro aus:

    • Gehe zu EntwicklertoolsMakros, wähle Kommentare und klicke auf Ausführen.

Häufige Fehler und Lösungen

  • Fehler: Kommentar wird nicht hinzugefügt.

    • Überprüfe, ob die Tabelle "Übersicht" und die Segmenttabellen vorhanden sind. Stelle sicher, dass die Namen exakt übereinstimmen.
  • Fehler: Excel meldet einen Laufzeitfehler.

    • Vergewissere dich, dass die Daten in den Tabellen korrekt eingegeben sind und keine leeren Zellen in den relevanten Bereichen vorhanden sind.

Alternative Methoden

Wenn Du VBA nicht verwenden möchtest, kannst Du auch Excel-Formeln verwenden, um Kommentare in Zellen anzuzeigen. Eine einfache Möglichkeit ist die Nutzung von KONKATENIEREN oder TEXTVERKETTEN, um die Daten aus verschiedenen Zellen zusammenzuführen.


Praktische Beispiele

Hier ist ein Beispiel, wie der Kommentar für eine Zelle aussehen könnte:

  • In Zelle D3 könnte der Kommentar folgendermaßen aussehen:
    Berlin: 121,91 €
    Nordrhein-Westfalen: 672,15 €
    Baden-Württemberg: 595,75 €
    Gesamt: 1389,06 €

Du kannst die Formatierung im VBA-Code anpassen, um die Darstellung nach Deinen Wünschen zu gestalten.


Tipps für Profis

  • Du kannst den VBA-Code anpassen, um weitere Informationen hinzuzufügen, wie z.B. die prozentuale Verteilung der Umsätze.
  • Überlege, die Schriftgröße und den Schriftstil der Kommentare zu ändern, um sie hervorzuheben.
  • Nutze das Application.ScreenUpdating-Objekt, um die Bildschirmaktualisierung während der Ausführung des Makros zu deaktivieren, was die Ausführungsgeschwindigkeit erhöhen kann.
Application.ScreenUpdating = False
' Dein Code hier
Application.ScreenUpdating = True

FAQ: Häufige Fragen

1. Wie kann ich den Kommentar in einer anderen Zelle einfügen? Du kannst den Code anpassen, indem Du die Zellenreferenz in der .Cells()-Methode änderst.

2. Ist es möglich, mehrere Kommentare in einer Zelle zu haben? In Excel ist es nicht möglich, mehrere Kommentare in einer Zelle zu haben. Du kannst jedoch die Kommentare so formatieren, dass sie alle relevanten Informationen enthalten.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige