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

Forumthread: Fehler 13 "Typen unverträglich"

Fehler 13 "Typen unverträglich"
André
Moin zusammen,
ich stehe mal wieder mit VBA auf Kriegsfuß. Ich möchte aus einer Liste mit Zahlen die fehlenden _ Zahlen filtern und untereinander in eine andere Tabelle schreiben. Hierzu habe ich folgendes kleines Script geschrieben:

01    Dim DSNummern As Range
02    Set DSNummern = Range("DSNummer")
03    Dim I As Integer
04
05    Kleinster = Application.WorksheetFunction.min(Range("DSNummer"))
06
07    For Each Zelle In DSNummern
08        If Zelle.Value > Kleinster Then
09            If Zelle.Value > Zelle.Offset(-1, 0).Value + 1 Then
10                For I = 1 To Zelle.Value - Zelle.Offset(-1, 0).Value - 1
11                        ActiveCell.Value = Zelle.Offset(I * -1, 0).Value + 1
12                        ActiveCell.Offset(1, 0).Range("A1").Select
13                Next
14            End If
15        End If
16    Next

Lasse ich das laufen, bricht VBA mit Fehler 13 "Typen unverträglich" in Zeile 11 ab. Was mache ich falsch?
Zusatzfrage: kann ich den Ausdruck in Zeile 05 vereinfachen? Kann ich direkt die kleinste Nummer aus DSNummern abfragen, ohne über die Worksheet-Funktion min zu gehen?
Zusatzfrage 2: wie kann ich DSNummern numerisch sortieren? Für den Fall, daß die Liste mal nicht aufsteigend sortiert ist.
Gruß, André
Anzeige

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

Betreff
Benutzer
Anzeige
AW: Fehler 13 "Typen unverträglich"
23.07.2009 15:19:46
Helmut
Hallo André,
Frage 1: wahrscheinlich steht in der Zelle.Offset(I * -1,0) keine Zahl
Frage 2: nein, welches Problem besteht mit WorksheetFunction?
Frage 3: Zeichne den Sortiervorgang mit dem Macro Recorder auf und passe das Ergebnis an oder google nach Sortieralgorithmen, i.e. Bubble Sort
Gruß
Helmut
Anzeige
AW: Fehler 13 "Typen unverträglich"
23.07.2009 15:33:27
André
Hallo Helmut
zu 1. doch, in der Zelle steht eine Zahl, denn wenn ich zum Test Zelle.Offset(-1,0) benutze, kommt kein Fehler
zu 2. kein Problem, ich dachte nur, es ginge vllt. auch andres
zu 3. ich möchte nicht die Ausgabe sortieren, sondern das Array in dem die Eingabewerte stehen. Ggf. Ist nämlich die Usprungsliste unsortiert, diese darf ich aber nicht sortieren.
Gruß, André
Anzeige
AW: Fehler 13 "Typen unverträglich"
23.07.2009 16:05:47
Helmut
zu 1: Der Fehler entsteht, weil Zelle.Offset(I * -1,0) aus dem Range DSNummer herauswandern kann.
zu 3: Ein Array kommt in Deinem Code nicht vor. Mein Vorschlag: lies die Eingabewerte in ein VBA Array ein, sortiere dies, z.B. Bubble Sort, und Gründe Deine Verarbeitung auf diesem Array.
AW: Fehler 13 "Typen unverträglich"
24.07.2009 10:10:31
André
Moin Helmut,
zu 1: Bingo, tatsächlich ist der Offset aus dem Range herausgewandert. Ich habe die Logik korrigiert, nun klappt es.
zu 3: Das übersteigt leider noch meine VBA-Kenntnisse. Wie lese ich den Bereich in ein VBA-Array ein, und wie sortiere ich das dann?
Gruß, André
Anzeige
AW: Fehler 13 "Typen unverträglich"
26.07.2009 02:23:42
so
Das Forum hat ein Archiv!
AW: Fehler 13 "Typen unverträglich"
23.07.2009 16:27:20
Luschi
Hallo André,
ich würde das Problem so lösen, Voraussetzung ist natürlich, das die Liste 'DSNummer' sortiert
ist:

Dim DSNummern As Range, rg1 As Range
Set DSNummern = Range("DSNummer")
Dim I As Integer, j As Integer
kleinster = Application.WorksheetFunction.Min(Range("DSNummer"))
Set rg = ActiveCell
j = 0
For Each zelle In DSNummern
If zelle.Value > kleinster Then
If zelle.Value > zelle.Offset(-1, 0).Value + 1 Then
For I = kleinster + 1 To zelle.Value - 1
rg.Offset(j, 0).Value = I
j = j + 1
Next
End If
End If
kleinster = zelle.Value
Next
Gruß von Luschi
aus klein-Paris
PS: Sortieralgorithmen für Array's gibt es im I-net wie Sand am mehr:
http://www.kurt-aus-kienitz.de/knowhow/access/Beispiele/Module/ArraySortieren.html
http://www.spotlight.de/zforen/mse/m/mse-1209598885-15225.html
http://www.spotlight-wissen.de/archiv/message/1768296.html
http://www.spotlight-wissen.de/archiv/message/1774612.html
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Umgang mit Fehler 13 "Typen unverträglich" in Excel VBA


Schritt-für-Schritt-Anleitung

  1. VBA-Editor öffnen: Drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Neues Modul erstellen: Klicke mit der rechten Maustaste auf dein Projekt im Projekt-Explorer und wähle Einfügen > Modul.

  3. Code eingeben: Kopiere den folgenden Code in das neue Modul:

    Dim DSNummern As Range
    Set DSNummern = Range("DSNummer")
    Dim Kleinster As Integer
    Dim I As Integer, j As Integer
    j = 0
    Kleinster = Application.WorksheetFunction.Min(DSNummern)
    
    For Each Zelle In DSNummern
        If Zelle.Value > Kleinster Then
            If Zelle.Value > Zelle.Offset(-1, 0).Value + 1 Then
                For I = Kleinster + 1 To Zelle.Value - 1
                    ActiveCell.Offset(j, 0).Value = I
                    j = j + 1
                Next I
            End If
        End If
        Kleinster = Zelle.Value
    Next Zelle
  4. Ausführen: Schließe den VBA-Editor und führe das Makro über Entwicklertools > Makros aus.


Häufige Fehler und Lösungen

  • Fehler 13 "Typen unverträglich": Dieser Fehler tritt häufig auf, wenn in einer Zelle ein unerwarteter Datentyp vorhanden ist. Prüfe den Offset-Bereich, um sicherzustellen, dass er immer innerhalb des DSNummer-Ranges bleibt. Eine einfache Überprüfung könnte so aussehen:

    If Not IsError(Zelle.Offset(I * -1, 0).Value) Then
        ' Dein Code
    End If
  • Minimale Zahl abfragen: Um die kleinste Zahl aus DSNummern abzufragen, kannst du den WorksheetFunction Min verwenden oder eine Schleife, die die Werte manuell vergleicht.


Alternative Methoden

Wenn du die Liste der Zahlen nicht sortieren möchtest, kannst du die Eingabewerte in ein Array einlesen, um die Logik zu verlagern. Hier ist, wie das geht:

Dim Werte() As Variant
Werte = Application.Transpose(Range("DSNummer").Value)
' Sortiere Werte hier, z.B. mit Bubble Sort

Du kannst dann das Array verwenden, um die fehlenden Zahlen zu ermitteln.


Praktische Beispiele

Hier ist ein einfaches Beispiel, um fehlende Zahlen aus einer sortierten Liste zu extrahieren:

Dim DSNummern As Range
Set DSNummern = Range("DSNummer")
Dim i As Integer
Dim letzteZahl As Integer

For i = 1 To DSNummern.Count - 1
    letzteZahl = DSNummern.Cells(i).Value
    ' Beispiel für fehlende Zahlen
    If DSNummern.Cells(i + 1).Value > letzteZahl + 1 Then
        Debug.Print letzteZahl + 1 ' Ausgabe fehlender Zahlen
    End If
Next i

Tipps für Profis

  • Nutze Option Explicit ganz oben im Modul, um sicherzustellen, dass du alle Variablen deklarierst. Das hilft, Typos und Typkonflikte zu vermeiden.
  • Verwende Debug.Print, um den Inhalt von Variablen während der Ausführung zu überprüfen. So kannst du leichter Fehler finden.
  • Informiere dich über die verschiedenen Datentypen in VBA, um sicherzustellen, dass du die richtigen Typen verwendest, insbesondere bei mathematischen Operationen.

FAQ: Häufige Fragen

1. Was bedeutet der Fehler 13 "Typen unverträglich"? Der Fehler tritt auf, wenn ein Datentyp nicht mit dem erwarteten Datentyp übereinstimmt, z.B. wenn eine Zahl erwartet wird, aber ein Text übergeben wird.

2. Wie kann ich meine Liste in VBA sortieren? Du kannst den Sort-Befehl verwenden oder die Werte in ein Array einlesen und dann einen Sortieralgorithmus wie Bubble Sort implementieren.

3. Gibt es eine einfachere Möglichkeit, die kleinste Zahl zu finden? Ja, anstelle der WorksheetFunction.Min kannst du eine Schleife verwenden, um die kleinste Zahl manuell zu ermitteln, wenn du mehr Kontrolle benötigst.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige