Thema Datum  Von Nutzer Rating
Antwort
30.12.2012 21:32:41 timi
Solved
31.12.2012 19:05:29 Trägheit
NotSolved
01.01.2013 20:33:35 Gast42162
NotSolved
01.01.2013 21:02:54 Gast47955
NotSolved
01.01.2013 21:20:56 Gast86138
NotSolved
02.01.2013 01:15:50 timi
NotSolved
02.01.2013 11:31:16 Trägheit
NotSolved
02.01.2013 23:14:17 timi
NotSolved
02.01.2013 23:20:59 timi
NotSolved
03.01.2013 14:02:37 Gast6953
NotSolved
03.01.2013 15:01:58 timi
NotSolved
03.01.2013 14:57:02 Trägheit
NotSolved
03.01.2013 15:10:18 timi
NotSolved
03.01.2013 15:29:29 Gast38708
NotSolved
03.01.2013 15:39:36 timi
NotSolved
03.01.2013 16:09:25 Gast87080
NotSolved
03.01.2013 16:28:22 timi
NotSolved
03.01.2013 22:16:00 Trägheit
NotSolved
03.01.2013 23:50:02 timi
NotSolved
04.01.2013 14:35:53 Gast69606
NotSolved
04.01.2013 15:13:57 timi
NotSolved
04.01.2013 18:47:41 Trägheit
NotSolved
04.01.2013 19:17:00 timi
NotSolved
05.01.2013 06:47:18 Trägheit
Solved
05.01.2013 11:03:27 timi
NotSolved
05.01.2013 18:05:58 Trägheit
NotSolved
05.01.2013 18:22:01 timi
NotSolved
05.01.2013 13:43:31 alex
NotSolved
Rot Dringend Hilfe mit der Umformatierung der Daten
05.01.2013 20:46:23 Trägheit
NotSolved
06.01.2013 00:59:12 alex
NotSolved
06.01.2013 15:12:10 Gast47772
NotSolved
06.01.2013 15:45:40 alex
NotSolved
07.01.2013 19:06:01 Gast50417
NotSolved
03.01.2013 23:56:30 timi
NotSolved

Ansicht des Beitrags:
Von:
Trägheit
Datum:
05.01.2013 20:46:23
Views:
1276
Rating: Antwort:
  Ja
Thema:
Dringend Hilfe mit der Umformatierung der Daten

Das dürfte möglich sein... aber zuerst ein mal etwas in anderer Sache. ;)

Es ist nicht die feine Art in einem fremden Thema mit einem neuen hereinzuschneien (auch wenn sie sich ähneln). Bitte beim nächsten mal also ein neues eröffnen. So bleiben die Themen innerhalb übersichtlich und man wird nicht mittendrin abgelenkt. ;)

So, nun zur Frage:


Option Explicit

'Konstanten zum "anspringen" der Spalten, rel. zur TYPE-Spalte (in Datenquelle)
Private Const C_OFFSET_YEAR& = 1
Private Const C_OFFSET_VALUES& = 2
Private Const C_OFFSET_NUMBERS& = 3

'Fehler - Konstanten
Private Const C_ERR_TYPENAME_NOT_FOUND& = vbObjectError + &H1
Private Const C_ERR_TOMANYHITS& = vbObjectError + &H2
Private Const C_ERR_NODATE& = vbObjectError + &H3

Sub Transp()
  
  Dim wksD          As Excel.Worksheet
  Dim rngTypeD      As Excel.Range
  Dim rngYearD      As Excel.Range
  Dim rngCellD      As Excel.Range
  Dim rngCellS      As Excel.Range
  Dim strErrDescr   As String
  Dim lngErrNum     As Long
  
  Set wksD = Tabelle2
  
  For Each rngTypeD In wksD.Range(wksD.Range("A2"), wksD.Columns("A").End(xlDown)).Cells
    For Each rngYearD In wksD.Rows(1).SpecialCells(xlCellTypeConstants, xlNumbers).Cells
      
      Set rngCellD = wksD.Cells(rngTypeD.Row, rngYearD.Column)
      rngCellD.Clear 'lösche Inhalt, Kommentar, Format, ... kurz: Alles
      
      If FetchData(Typename:=Trim$(rngTypeD.Text), _
                    DataType:=Trim$(rngTypeD.Offset(, 1).Text), _
                    Year:=Trim$(rngYearD.Text), _
                    DateCell:=rngCellS, _
                    ErrNumber:=lngErrNum, _
                    ErrDescription:=strErrDescr) _
      Then
        rngCellD.Value = rngCellS.Value
        rngCellD.Hyperlinks.Add rngCellD, Address:="", SubAddress:=rngCellS.Address(External:=True), ScreenTip:="Gehe zu Quelle..."
        rngCellD.ClearFormats 'wir entfernen mal die Hyperlink-Formatierung (der Hyperlink selbst bleibt bestehen)
        
      ElseIf lngErrNum = C_ERR_NODATE Then
      'hier wurde kein passender Eintrag gefunden
        rngCellD.Value = 0
        
      Else
      'Wenn ein Fehler auftrat, wird dies durch "die-Farbe-der-Gefahr" kennlich gemacht ... kurz: ROT
        rngCellD.Font.Color = vbRed
        rngCellD.Font.Bold = True
        rngCellD.Value = CVErr(xlErrNA)
        rngCellD.AddComment strErrDescr 'Fehlerbeschreibung als Zellen-Kommentar
      End If
      
    Next
  Next
  
  'Kleine Nachricht auf Bildschirm ausgeben.
  '(Damit der Nutzer weiß wann er wieder die Maus zu befummeln hat) ;)
  Call MsgBox("Fertig", vbInformation)
  
End Sub

Private Function FetchData( _
    ByVal Typename As String, ByVal DataType As String, ByVal Year As String, _
    ByRef DateCell As Excel.Range, _
    ByRef ErrNumber As Long, _
    ByRef ErrDescription As String _
) As Boolean
  
  'Korrektur Data Type
  If StrComp(DataType, "Value", vbTextCompare) = 0 Then
    DataType = "Values"
  ElseIf StrComp(DataType, "Number", vbTextCompare) = 0 Then
    DataType = "Numbers"
  End If
  
  Dim wks           As Excel.Worksheet
  Dim rngType       As Excel.Range
  Dim rngDataType   As Excel.Range
  Dim rngYear       As Excel.Range
  Dim rng           As Excel.Range
  Dim str           As String
  
  Set wks = Tabelle1 'Datenquelle
  
  'zuerst suchen wir nach allen passenden Einträgen in der Spalte TYPE
  With wks.Columns("A")
    Set rng = .Find(Typename, LookIn:=xlValues, LookAt:=xlWhole)
    If Not rng Is Nothing Then
      str = rng.Address
      Do
        If Not rngType Is Nothing Then
          Set rngType = Union(rngType, rng)
        Else
          Set rngType = rng
        End If
        Set rng = .FindNext(rng)
      Loop While rng.Address <> str
    End If
  End With
  
  If rngType Is Nothing Then
    ErrNumber = C_ERR_TYPENAME_NOT_FOUND
    ErrDescription = "Der Typ '" & Typename & "' wurde im Arbeitsblatt '" & wks.Name & "' nicht gefunden."
    Exit Function
  End If
  
  'nun suchen wir innerhalb der gefundenen Einträge, nach dem passenden Jahr
  With rngType.Offset(, C_OFFSET_YEAR)
    Set rng = .Find(Year, LookIn:=xlValues, LookAt:=xlWhole)
    If Not rng Is Nothing Then
      str = rng.Address
      Do
        If Not rngYear Is Nothing Then
          Set rngYear = Union(rngYear, rng)
        Else
          Set rngYear = rng
        End If
        Set rng = .FindNext(rng)
      Loop While rng.Address <> str
    End If
  End With
  
  If rngYear Is Nothing Then
  'kein Eintrag mit dem vorgegebenen Jahr gefunden
    ErrNumber = C_ERR_NODATE
    ErrDescription = "Für den Typ '" & Typename & "' existiert im Arbeitsblatt '" & wks.Name & "' kein Eintrag."
    Exit Function
  ElseIf rngYear.Cells.Count > 1 Then
  'mehr als ein Eintrag mit dem vorgegebenen Jahr gefunden
    ErrNumber = C_ERR_TOMANYHITS
    ErrDescription = "Zu viele Einträge des Typs '" & Typename & "' in Arbeitsblatt '" & wks.Name & "' für das Jahr " & Year & " gefunden (" & rngYear.Cells.Count & " Treffer)."
    Exit Function
  End If
  
  'auf einen Eintrag reduzieren
  Set rngType = Intersect(rngType, rngYear.Offset(, -C_OFFSET_YEAR))
  
  'nun gilt es nur noch den Data Type zu berücksichtigen
  If wks.Range("A1").Offset(, C_OFFSET_VALUES).Text = DataType Then
    Set DateCell = rngType.Offset(, C_OFFSET_VALUES)
  ElseIf wks.Range("A1").Offset(, C_OFFSET_NUMBERS).Text = DataType Then
    Set DateCell = rngType.Offset(, C_OFFSET_NUMBERS)
  Else
    ErrDescription = "Data Type '" & DataType & "' konnte in Arbeitsblatt '" & wks.Name & "' nicht gefunden werden."
    Exit Function
  End If
  
  FetchData = True
  
End Function

Gruß, Trägheit


Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:



  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
30.12.2012 21:32:41 timi
Solved
31.12.2012 19:05:29 Trägheit
NotSolved
01.01.2013 20:33:35 Gast42162
NotSolved
01.01.2013 21:02:54 Gast47955
NotSolved
01.01.2013 21:20:56 Gast86138
NotSolved
02.01.2013 01:15:50 timi
NotSolved
02.01.2013 11:31:16 Trägheit
NotSolved
02.01.2013 23:14:17 timi
NotSolved
02.01.2013 23:20:59 timi
NotSolved
03.01.2013 14:02:37 Gast6953
NotSolved
03.01.2013 15:01:58 timi
NotSolved
03.01.2013 14:57:02 Trägheit
NotSolved
03.01.2013 15:10:18 timi
NotSolved
03.01.2013 15:29:29 Gast38708
NotSolved
03.01.2013 15:39:36 timi
NotSolved
03.01.2013 16:09:25 Gast87080
NotSolved
03.01.2013 16:28:22 timi
NotSolved
03.01.2013 22:16:00 Trägheit
NotSolved
03.01.2013 23:50:02 timi
NotSolved
04.01.2013 14:35:53 Gast69606
NotSolved
04.01.2013 15:13:57 timi
NotSolved
04.01.2013 18:47:41 Trägheit
NotSolved
04.01.2013 19:17:00 timi
NotSolved
05.01.2013 06:47:18 Trägheit
Solved
05.01.2013 11:03:27 timi
NotSolved
05.01.2013 18:05:58 Trägheit
NotSolved
05.01.2013 18:22:01 timi
NotSolved
05.01.2013 13:43:31 alex
NotSolved
Rot Dringend Hilfe mit der Umformatierung der Daten
05.01.2013 20:46:23 Trägheit
NotSolved
06.01.2013 00:59:12 alex
NotSolved
06.01.2013 15:12:10 Gast47772
NotSolved
06.01.2013 15:45:40 alex
NotSolved
07.01.2013 19:06:01 Gast50417
NotSolved
03.01.2013 23:56:30 timi
NotSolved