1. Liebe Forumsgemeinde,

    aufgrund der Bestimmungen, die sich aus der DSGVO ergeben, müssten umfangreiche Anpassungen am Forum vorgenommen werden, die sich für uns nicht wirtschaftlich abbilden lassen. Daher haben wir uns entschlossen, das Forum in seiner aktuellen Form zu archivieren und online bereit zu stellen, jedoch keine Neuanmeldungen oder neuen Kommentare mehr zuzulassen. So ist sichergestellt, dass das gesammelte Wissen nicht verloren geht, und wir die Seite dennoch DSGVO-konform zur Verfügung stellen können.
    Dies wird in den nächsten Tagen umgesetzt.

    Ich danke allen, die sich in den letzten Jahren für Hilfesuchende und auch für das Forum selbst engagiert haben. Ich bin weiterhin für euch erreichbar unter tti(bei)pcwelt.de.
    Dismiss Notice

Excel Datenmenge ermitteln

Discussion in 'Office-Programme' started by kn, Apr 22, 2010.

Thread Status:
Not open for further replies.
  1. kn

    kn Byte

    Hallo Excel Experten,
    System: WIN XP
    Excel 2000
    Ich habe eine Tabelle mit Zeichnungen (C6:BL296)
    Die Anzahl der Zeichnungen in der Tabelle (Datenbank) ermittle ich mit der Formel: =ANZAHL2(C6:BL296)
    Die Anzahl unterschiedlicher Zeichnungen ermittle ich mit der Formel:
    {=SUMME(1/WENN(ZÄHLENWENN(C6:BL296;C6:BL296)=0;1;ZÄHLENWENN(C6:BL296;C6:BL296)))-ANZAHLLEEREZELLEN(C6:BL296)}
    Es handelt sich um eine Array-Formel. Berechnung dauert leider relativ lange.

    Woran ich scheitere, ist die Selektion nach den Formaten:
    z.B. 0-3322021.0 oder 4-3307797.7
    Dabei will ich nicht wissen, wieviel Formate 0, 1, 2, 3 oder 4 ich insgesamt habe, sondern wieviel davon unterschiedlich sind, da einige Zeichnungs-Nrn. mehrfach innerhalb der Tabelle auftreten.
    Hat jemand eine gute Idee??
     
  2. Urs2

    Urs2 Megabyte

    Habe ich Dich so richtig verstanden >>>

    - es sind keine Zeichnungen in der Tabelle, sondern nur die Zeichnungs-Nummern in einzelnen Zellen, also Text.

    - 4-3307797.7 ist die Art der Zeichnung
    - 4-3307797.7 ist die individuelle Zeichnungs-Nummer

    - Besteht die ganze Tabelle nur aus Zeichnungsnummern ?
    Also 64 x 290 = 18560 Zeichnungen, wobei einige Zellen leer sein können ?
    Das ist eine ziemlich grosse Zahl zu verarbeitenden Zellen, kein Wunder dauert es mit der Array-Formel...

    - Im Bereich gibt es nur entweder Zellen mit Nummern oder Leerzellen ?

    Gruss Urs
     
  3. kn

    kn Byte

    Hallo Urs,
    Du hast alles richtig verstanden!
    Es sind nur Zeichnungs-Nrn. in der Tabelle.
    Der Aufbau ist: Format -Bindestrich- Zeichnungs Nr. - Punkt - Prüfziffer
    Es handelt sich um individuelle Nrn., wobei gleiche aber leider mehrfach vorkommen können. Die sollen digitalisiert werden. Ein Format A0 kostet ganz erheblich mehr als ein A4 Format.
    Insofern brauche ich nur die verschiedene Anzahl der Zeichnung leider mit Format.
    Die Tabelle besteht nur aus diesen Zeichnungs-Nrn.
    Es gibt nur Zellen mit Nummern oder eben Leerstellen (das war auch ein kleines Problem bei der Array Fromel, ich habe die Leerstellen dann aber einfach subtrahiert, ohne Leerstellen wäre es etwas einfacher gewesen).
    Hoffe, Du kannst mit meinen Antworten etwas anfangen!
    Danke.
     
  4. Urs2

    Urs2 Megabyte

    Hallo kn

    Das vereinfacht das Verfahren.
    Es gibt also definitiv nur die 5 Formate, von 0 - 4

    Du willst die Anzahl der Zeichnungen pro Format, ohne Doppelnennung.
    Einfach als Zahl > zB für A0 insgesamt 4224 Zeichnungen, davon 2647 individuelle Zeichnungen.... ?

    Im Prinzip kenne ich den Weg > alle Zellen in den Speicher laden und dort bearbeiten.
    So wird das Makro auch vor Feierabend mit seiner Arbeit fertig... die Array-Formeln sind dafür definitiv zu langsam.

    Die Details werde ich auch noch herausfinden... aber nicht mehr heute Nachmittag... morgen zum Frühstück !

    Gruss Urs
     
  5. Urs2

    Urs2 Megabyte

    Hallo kn

    Mein Werk ist etwas länger geworden... ich hatte Schwierigkeiten mit dem Sortieren des Arrays.
    VBA kennt keinen eigenen Befehl dafür und die möglichen Klimmzüge arbeiten so langsam, dass sie für einen Array(10) gerade gut genug sind... aber völlig unbrauchbar für einen Array mit 18'000 Werten...

    Setze den Code in ein neues Modul (in einer Kopie der Originaldatei !) >
    Code:
    Option Explicit
    
    Sub CalcStatistic()
    Dim rowTop, rowLow, colAll, colLeft, colRight, wsTab, wsStat, xCell, i
    Dim rngTab As Range, ws As Worksheet, arrRx, arrRaw(), arrRawS
    Dim arrI, num0i, num0y, num0z, num1i, num1y, num1z, num2i, num2y, num2z, _
        num3i, num3y, num3z, num4i, num4y, num4z
    
                '>>>>> diese Werte ggf Deiner Tabelle anpassen
    rowTop = 6              'oberste Zeile mit Daten
    colLeft = 3             'linke Spalte mit Daten... C = no 3
    colRight = 64           'rechte Spalte mit Daten... BL = no 64
    colAll = 1              'Spalte in der in der untersten Zeile der Tabelle IMMER etwas steht
                            '>>> Annahme hier = Spalte A
    wsTab = "Tabelle1"      'Name des Blattes mit der Tabelle
    wsStat = "Statistik"    'Name des Statistik Blattes
    
                'ab hier geht es automatisch >>>>>
    Application.ScreenUpdating = False
    
    With Sheets(wsTab)
        .Select
                'liest unterste Zeile mit Nutzdaten aus
        rowLow = .Cells(65536, colAll).End(xlUp).Row
                'vermisst Tabellenbereich
        Set rngTab = .Range(Cells(rowTop, colLeft), Cells(rowLow, colRight))
    End With
                'schaut ob Blatt Statistik schon vorhanden
    On Error Resume Next
    If Sheets(wsStat) Is Nothing Then
                'wenn nicht... erstellt neues Arbeitsblatt
        Set ws = ActiveWorkbook.Sheets.Add
        ws.Move After:=Worksheets(Worksheets.Count)
        ws.Name = wsStat
    Else
                'sonst... löscht alten Inhalt
        Set ws = Sheets(wsStat)
        ws.Cells.ClearContents
    End If
    On Error GoTo 0
                'sammelt alle Zellinhalte in einem Array
    arrRx = -1
    For Each xCell In rngTab.Cells
        If xCell.Value <> "" Then
            arrRx = arrRx + 1
            ReDim Preserve arrRaw(arrRx)
            arrRaw(arrRx) = xCell.Value
        End If
    Next
                'Array in Blatt schreiben
    ws.Select
    ws.Range("A1:A" & UBound(arrRaw) + 1) = WorksheetFunction.Transpose(arrRaw)
                'sortieren und wieder in Speicher einlesen
    ws.Range("A1").Sort Key1:=ws.Columns("A")
    arrRawS = WorksheetFunction.Transpose(ws.Range(Cells(1, 1), Cells(arrRx + 1, 1)))
                'Array im Blatt löschen
    ws.Cells.ClearContents
                'Daten analysieren pro Format
    For i = 1 To UBound(arrRawS)
        arrI = arrRawS(i)
        Select Case Left(arrI, 1)
        Case 0
            If num0i = "" Then
                num0i = arrI
                num0y = 1
                num0z = 1
            Else
                If arrI = num0i Then
                    num0y = num0y + 1
                Else
                    num0i = arrI
                    num0y = num0y + 1
                    num0z = num0z + 1
                End If
            End If
        Case 1
            If num1i = "" Then
                num1i = arrI
                num1y = 1
                num1z = 1
            Else
                If arrI = num1i Then
                    num1y = num1y + 1
                Else
                    num1i = arrI
                    num1y = num1y + 1
                    num1z = num1z + 1
                End If
            End If
        Case 2
            If num2i = "" Then
                num2i = arrI
                num2y = 1
                num2z = 1
            Else
                If arrI = num2i Then
                    num2y = num2y + 1
                Else
                    num2i = arrI
                    num2y = num2y + 1
                    num2z = num2z + 1
                End If
            End If
        Case 3
            If num3i = "" Then
                num3i = arrI
                num3y = 1
                num3z = 1
            Else
                If arrI = num3i Then
                    num3y = num3y + 1
                Else
                    num3i = arrI
                    num3y = num3y + 1
                    num3z = num3z + 1
                End If
            End If
        Case 4
            If num4i = "" Then
                num4i = arrI
                num4y = 1
                num4z = 1
            Else
                If arrI = num4i Then
                    num4y = num4y + 1
                Else
                    num4i = arrI
                    num4y = num4y + 1
                    num4z = num4z + 1
                End If
            End If
        Case Else
            GoTo errDB
        End Select
    Next
                'Resultate in Blatt schreiben
    With ws
        .Cells(1, 1) = "Total Zeichnungen in DB"
        .Cells(1, 4) = num0y + num1y + num2y + num3y + num4y
        .Cells(2, 1) = "...davon individuelle"
        .Cells(2, 4) = num0z + num1z + num2z + num3z + num4z
    
        .Cells(4, 1) = "Total Zeichnungen Format A0"
        .Cells(4, 4) = num0y
        .Cells(5, 1) = "...davon individuelle"
        .Cells(5, 4) = num0z
    
        .Cells(7, 1) = "Total Zeichnungen Format A1"
        .Cells(7, 4) = num1y
        .Cells(8, 1) = "...davon individuelle"
        .Cells(8, 4) = num1z
    
        .Cells(10, 1) = "Total Zeichnungen Format A2"
        .Cells(10, 4) = num2y
        .Cells(11, 1) = "...davon individuelle"
        .Cells(11, 4) = num2z
    
        .Cells(13, 1) = "Total Zeichnungen Format A3"
        .Cells(13, 4) = num3y
        .Cells(14, 1) = "...davon individuelle"
        .Cells(14, 4) = num3z
    
        .Cells(16, 1) = "Total Zeichnungen Format A4"
        .Cells(16, 4) = num4y
        .Cells(17, 1) = "...davon individuelle"
        .Cells(17, 4) = num4z
    End With
    
        Application.ScreenUpdating = True
        Exit Sub
    
    errDB:
    ws.Cells(3, 1) = "Fehler in der DB - mindestens eine Nummer ohne Format 0 - 4"
    Application.ScreenUpdating = True
    
    End Sub
    
    >>> Passe die Variablen am Anfang des Codes ggf. Deiner Tabelle an.

    Funktion >

    - alle Zellen werden in einen Array gelesen
    - der Array wird in das neue Blatt geschrieben, dort sortiert und wieder in einen Array geladen
    - die Anzahl der individuellen Nummern pro Format wird ermittelt (die TotalZahlen fallen so nebenbei an...)
    - das Resultat wird in das Blatt Statisik geschrieben

    Der Code ist ziemlich schnell. Mein altersschwaches Notebook benötigt genau eine Sekunde... zum Auslesen von 18000 Zellen und Verarbeiten von 14000 Werten...

    Gruss Urs
     
  6. Urs2

    Urs2 Megabyte

    Noch eine Idee > ich weiss ja nicht, wie die vielen Nummern in die Tabelle gekommen sind >

    Die Zeichnungsnummern liegen als String vor, nicht als Zahlen. Kannst du ausschliessen...
    ...dass bei den vielen tausend Nummern nicht führende oder nachlaufende Leerstellen in einige Strings geraten sind ?

    Im Gegensatz zu Leerstellen innerhalb der Nummer kann diese niemand sehen, auch beim Ausdruck müssen sie nicht stören...

    Mein Makro sieht sie aber sehr wohl, die gleiche Nummer mit und ohne Leerstelle sind zwei verschiedene Nummern.
    Lass vorsichtshalber zuerst dieses Makro über die Tabelle laufen >
    Code:
    Sub CleanRange()
    'entfernt alle führenden oder nach nachstehenden Leerzellen aus den Strings
    '>>> prüfen ob mein [COLOR="Red"]Bereich[/COLOR] auch wirklich so heisst...
    
    For Each xCell In Range("[COLOR="red"]C6:BL296[/COLOR]").Cells
        xCell.Value = Trim(xCell.Value)
    Next
    
    End Sub
    
    Gruss Urs
     
  7. MIKAPet

    MIKAPet Kbyte

    @ Urs, einfach nur :spitze::spitze::spitze:

    PS sorry fürs OT...:)
     
  8. kn

    kn Byte

    Hallo Urs,
    vielen Dank f&#252;r Dein Makro. Klasse L&#246;sung!
    Du hast das Wesentliche erkannt! Leider haben einige der Zeichnungs-Nrn. eine Leerstelle am Ende nach der ein &#196;nderungsbuchstabe folgt. Es tut mir leid, ich war da nicht ganz pr&#228;zise. Dein zweites Makro deckt diese Schw&#228;che auf!!
    Die Tabelle wurde von 3 Leuten aus &#252;ber 28000 Zeichnungen mit den &#252;blichen Schreibfehlern erstellt, Zeitraum 3 Monate. Wir haben schon Korrekturl&#228;ufe gemacht, um die &#252;blichen Fehler zu beseitigen.
    Die Tabelle enth&#228;lt 6157 Zeichnungen, davon sind 1146 verschieden.
    Es w&#228;re m&#246;glich, den &#196;nderungsbuchstaben ohne Leerstelle anschliessen zu lassen, wenn das hilft?? Dann h&#228;tte man einen durchgehenden String!?
    Die Anzahl der einzelnen Formate kenne ich bereits, das geht relativ enfach mit Anzahl(Suchen.. bzw. Anzahl(Finden..; wie gesagt, gescheitert bin ich daran, die Anzahl unterschiedlicher A0 bis A4 Formate zu ermitteln.
     
    Last edited: Apr 26, 2010
  9. kn

    kn Byte

    Hallo Urs,
    ich habe die Leerstellen entfernt (geht mit Suchen und Ersetzen am schnellsten).
    Beim Ausführen des Makros bleibt es hängen:
    ws.Range("A1:A" & UBound(arrRaw) + 1) = WorksheetFunction.Transpose(arrRaw)
    Hast Du eune Idee?
     
  10. Urs2

    Urs2 Megabyte

    Bei manchen Zeichnungen ist es so >>> "0-3322021.0 b"
    bei anderen so >>> "0-3322021.0b"
    oder so >>> "0-3322021.0 B"
    oder wenn keine Aenderung vorliegt einfach so >>> "0-3322021.0"
    Richtig geraten ?

    Formatiere die DB in einer Nicht-Proportional-Schrift, zB "Courier New", wie sie das Forum hier in den Codefenstern verwendet. Und richte allen Inhalt linksbündig aus. Dann fallen Fehler beim Betrachten sofort auf.
    Prinzipiell sollte die DB schon einheitlich formatiert werden, allein schon damit Unterschiede optisch sofort auffallen, aber auch um per Makro weitere Manipulationen vornehmen zu können.

    Dieses Makro entfernt alle Leerzeichen und wandelt alle Buchstaben in Gross oder Klein >
    Code:
    Sub CleanDB()
    'Entfernt führende, folgende UND mittige Leerzeichen aus den Strings
    'setzt Aenderungsbuchstabe einheitlich auf Gross- oder Kleinschreibung
    
    Dim xCell
    
    For Each xCell In Range("[COLOR="Red"]C6:BL296[/COLOR]").Cells
        xCell.Value = Replace(xCell.Value, " ", "")
            'ersetzt Grossbuchstaben durch Kleinbuchstaben
            'umgekehrt müsste die Funktion nicht "LCase" sondern "UCase" lauten
        xCell.Value = LCase(xCell.Value)
    Next
    
    End Sub
    

    Deine nächsten Fragen schon vorweg geplant >
    Kann die gleiche Zeichnung in der DB mit verschiedenen Aenderungsbuchstaben vorhanden sein ?
    Sollen dann alle Aenderungen einzeln digitalisiert werden, oder nur die Zeichnung mit dem höchsten Aenderungs-Index ?
    Sind die Original-Zeichnungen mit älteren Indizes überhaupt noch vorhanden ?
    Verschiedene Indizes bedeuten für das Makro ja auch verschiedene Zeichnungen...

    Gruss Urs


    PS @kn
    Ich habe Deinen letzten Beitrag erst nach dem Absenden dieses Beitrags gesehen und werde mir das heute Nacht ansehen
    >>> Eventuell wichtig >>> Welche Excel-Version verwendet Ihr denn? Ich teste mit Excel2003.


    @MIKApet
    Danke........ wenn man vorher immer wüsste, bis wohin das noch ausufern könnte...
    Eine einfache Frage... eine (gedacht) einfache Antwort... und beim Entwerfen die Ernüchterung > so geht das doch gar nicht !
    Dann die innere Stimme "Du bist doch nicht so blöd, HOPP > an die Arbeit...!"
     
    Last edited: Apr 26, 2010
  11. Urs2

    Urs2 Megabyte

    Ich habe geforscht: In Excel2007 funktioniert "WorksheetFunction.Transpose"
    f&#252;r Excel2010 habe ich nur eine japanische Seite gefunden, ausser "2010" und dem englischen Code war f&#252;r mich alles Bahnhof...
    (Transpose kehrt &#252;brigens den Array, von Zeile zu Spalte und umgekehrt. Ich kann ja nicht 14000 Zellen in eine Zeile schreiben...)

    Die angemeckerte Zeile ist die erste von den beiden mit Transpose - vielleicht ist Dein Excel ja ein Sensibelchen >
    Erg&#228;nze die beiden Transpose-Zeilen mit "Application."
    von "... = WorksheetFunction.Transpose..."
    zu "... = Application.WorksheetFunction.Transpose..."

    Sonst f&#228;llt mir so nichts ein >
    > Schreibe immer welche Fehlermeldung angezeigt wird. Ohne diese Meldung kann ich nur im Nebel stochern.

    Zur Eingrenzung des Fehlers >

    1. Gehe in den Code im VB-Editor >>> Men&#252; Debuggen >>> Kompilieren von VBA Projekt.
    Wenn der Fehler schon hier angezeigt wird, ist es ein Syntax-Fehler.
    Wenn nicht, ist es ein Laufzeitfehler.

    2. Kommentiere diese beiden Zeilen aus (Apostroph davor setzen) >
    'ws.Range("A1:A" & UBound(arrRaw) + 1) = Application.WorksheetFunction.Transpose(arrRaw)
    'ws.Range("A1").Sort Key1:=ws.Columns("A")
    ...dann kann das Makro zwar nicht arbeiten (im Statistik-Blatt steht dann "Fehler in der DB...), aber man sieht so...
    ...ob das zweite Transpose richtig verstanden wird, und der Fehler in einer Variablen in der anderen Zeile sein m&#252;sste.

    >>> aber den Wortlaut der Fehlermeldung nicht vergessen !

    Gruss Urs
     
  12. kn

    kn Byte

    Hallo Urs,
    wir haben noch Excel 2000 in der Firma, privat nutze ich 2003 (auch da lief es nicht).

    Wenn ich das Makro aufrufe, kommt ein Laufzeitfehler Nr. 13 - Typen unverträglich.

    Wenn ich die Zeilen, wie vorgeschlagen, auskommentiere, läuft das Makro durch, in der neu eingefügten Tabelle "Statistik" erscheint der Fehlertext: Fehler in der DB - Mindestens eine Nummer ohne Format 0-4.
    Ich habe daraufhin die ganze Tabelle noch einmal kontrolliert (alle Zahlen stehen linksbündig, insofern sind sie gut zu überschauen, alle Zeichnungen haben die Formatangabe davorstehen. Allerdings folgen unterhalb der Zeile 296 in den Spalten A bis BN noch statistische Auswertungen (Zeilen 297 bis 308), die dürften vom Makro nicht mit einbezogen werden (callAll = 1 ???).

    Wenn ich Application vor WorksheetFunction.Transponse einfüge, lautet die Fehlermeldung: Fehler beim Kompilieren - Variable nicht definiert.

    Hoffe, es hilft Dir bei der Eingrenzung?

    Sorry, wenn es zuviel wird sag es ruhig, dann ist Fleissarbeit angesagt, d.h. manuell auszählen. Ich sträube mich im Zeitalter der Computer immer etwas gegen solche manuellen Aktionen, die Ergenisse sind meistens auch noch sehr fehlerhaft.
    Danke für Deine Mühe!!!
     
  13. Urs2

    Urs2 Megabyte

    Hallo kn

    Richtig, wenn es irgendwie geht, sollte man das automatisieren, bei so vielen Einträgen.
    Der PC ist einfach seriöser als wir Menschen... solange er richtig gefüttert wurde.

    > Application.WorksheetFunction.Transpose
    Ist zwischen Application und WorksheetFunction der Punkt gesetzt ?
    Aber es funktioniert ja beim zweiten Transpose, wenn Du die das erste auskommentierst.
    Also sicher nicht der Grund für den Fehler.

    Der Reihe nach testen >>>

    1. Gefüllte Zeilen unterhalb Nummer 296
    Dann kann das Makro nicht richtig arbeiten, bei mir läuft es zwar... aber es rechnet falsch.
    Abhilfe >>> Verändere den oberen Teil des Makros so >>>
    Code:
                '>>>>> diese Werte ggf Deiner Tabelle anpassen
    rowTop = 6              'oberste Zeile mit Daten
    [COLOR="SeaGreen"]rowLow = 296            'unterste Zeile mit Zeichnungsnummern[/COLOR]
    colLeft = 3             'linke Spalte mit Daten... C = no 3
    colRight = 64           'rechte Spalte mit Daten... BL = no 64
    [COLOR="Red"]'colAll = 1              'Spalte in der in der untersten Zeile der Tabelle IMMER etwas steht[/COLOR]                        '>>> Annahme hier = Spalte A
    wsTab = "Tabelle1"      'Name des Blattes mit der Tabelle
    wsStat = "Statistik"    'Name des Statistik Blattes
    
                'ab hier geht es automatisch >>>>>
    Application.ScreenUpdating = False
    
    With Sheets(wsTab)
        .Select
    [COLOR="Red"]'            'liest unterste Zeile mit Nutzdaten aus
    '    rowLow = .Cells(65536, colAll).End(xlUp).Row[/COLOR]            'vermisst Tabellenbereich
        Set rngTab = .Range(Cells(rowTop, colLeft), Cells(rowLow, colRight))
    End With
    Grün = neue Zeile............ Rot = Zeile entfernen
    Das Makro sucht jetzt die unterste Zeile nicht mehr, sie ist vorgegeben.


    2. Sind die anderen Vorgaben die Du Deiner Datei anpassen musst alle richtig ?

    3. Laufzeitfehler Nr. 13 - Typen unverträglich
    Das ist der springende Punkt !
    Wenn 1. und 2. nichts gebracht haben, dann >>>
    - Im VB-Editor einen Haltepunkt setzen > Click auf den grauen Rand links neben der Zeile vor der Problemzeile (= Zeile "ws.Select")
    Ein brauner Punkt erscheint jetzt dort.
    - Menü Anzeige >>> Lokalfenster... das Lokalfenster erscheint jetzt
    - Makro starten...

    ...es hält jetzt an, in der Zeile mit ws.Select
    - fahre mit dem Mauszeiger in der Kummerzeile über "UBound" >>> eine Zahl (wohl 6157) muss jetzt angezeigt werden...
    - gehe im neue Lokal-Fenster zu "arrRaw" Click auf Pluszeichen
    - jetzt müssen alle Zeichnungen sichtbar sein in arrRaw(0 .... 6157)

    Wenn nicht, dann ist der Array leer, dann ist der Laufzeit-Fehler auf einen Fehler beim Sammeln der Zellinhalte zurückzuführen.


    Das kriegen wir schon hin, bei mir läuft es ja.
    Kannst Du die Tabelle hochladen?
    Nur das Blatt mit den Zeichnungsnummern. Entferne alle Namen etc., die die Welt nicht kennen muss.

    Gruss Urs
     
  14. Hascheff

    Hascheff Moderator

    ... Dann hätte ich gesagt,
     
  15. kn

    kn Byte

    Hallo Urs,
    vielen Dank für Deine Mühe!!!
    Ich habe die Änderungen in das Makro eingearbeitet.
    Der einzige Fehler, der sich wiederholt, ist an der bekannten Stelle:
    ws.Range("A1:A" & UBound(arrRaw) + 1) = WorksheetFunction.Transpose(arrRaw)
    Ich habe dann den Haltepunkt gesetzt und im Lokalfenster kontrolliert, ob die Zeichnungs-Nrn. dort erscheinen, sie sind alle da, bis arrRaw(6157).
    Die Fehlermeldung lautet wie schon vorher: Laufzeitfehler Nr. 13 - Typen unverträglich.
    Allerdings steht nun kein Fehler-Text mehr in der Tabelle Statistik!

    Die Excel Tabelle darf ich nicht hochladen, die Daten sind sehr sensibel, mein oberster Chef würde mich sofort "feuern!" Die Leute, die daran arbeiten durften, wurden extra "vergattert". Tut mir leid.
    Die anderen Angaben sind übrigens richtig.

    Anmerkung zu Hascheff:
    Du hast sicherlich recht, Access wäre die bessere Software-Lösung für diese Aufgabe.
    1. Leider habe ich in der Firma kein Access (privat schon)
    2. Und ich kann damit nicht umgehen
    Es würde mir somit nicht wirklich helfen.
    Sorry.
     
  16. Urs2

    Urs2 Megabyte

    ...der kann nur kommen wenn das Makro durchläuft (als Du das erste Transpose auskommentiert hattest).

    Wenn DU nicht hochladen darfst... als mein eigener Chef darf ICH !
    >>> http://www.file-upload.net/download-2472342/Statistik-exDB-an-kn.xls.html

    Bei mir funktioniert das Makro tadellos.

    Ich habe es noch so geändert, dass im Blatt Statistik zwei sortierte Spalten bestehen bleiben >
    > eine mit, die andere ohne Doppelnennungen
    Vielleicht ist das nützlich für Euch. Sonst entsprechende Makro-Zeilen einfach auskommentieren.

    Wenn meine Datei bei Euch auch nicht funktionieren sollte... muss ich das Handtuch werfen.

    Sonst kannst Du den ganzen Bereich "C6:BL296" von Deiner Mappe in meine Mappe kopieren...
    ...aber Bitte... nur "Inhalte einfügen" und davon nur "Werte".
    Ich habe nämlich den Verdacht, dass irgendeine Formatierung in der Tabelle für Aerger sorgt...

    Gruss Urs
     
  17. kn

    kn Byte

    Hallo Urs,
    ich habe Deine Tabelle heruntergeladen, in Excel geladen und das Makro laufen lassen. Es kommt derselbe Fehler wie in der Original Tabelle. Es muss etwas mit der Excel Version (2000) zu tun haben.
    Ich werde es am Wochenende zu Hause in Excel 2003 ausprobieren.
    Ich melde mich wieder!
    Danke!
     
  18. kn

    kn Byte

    Hallo Urs,
    die Sache hat mir keine Ruhe gelassen, ich habe es gerade Zuhause mit Excel 2003 ausprobiert; dein Makro funktioniert einwandfrei!
    Nochmals vielen, vielen Dank!
    Großes Lob an dich!!!!
    kn
     
  19. Urs2

    Urs2 Megabyte

    Hallo kn

    Uff... das war aber eine Zangengeburt !

    Ich hatte auch nochmals geforscht >
    Der Fehler kam ja in der Zeile mit dem ersten Transpose, dieses selbst war aber nicht der Fehler, das zweite hatte ja funktioniert.
    Neben dem Befehl UBound und der Array-Variablen arrRaw ist in dieser Zeile aber gar nichts drin...

    Zum Funktionieren braucht ein Makro Bibliotheken (= DLL-Dateien).
    Was es benutzt kannst Du sehen > VB-Editor >> Extras >> Verweise...

    Bei meinem Excel2003 sind für dieses Makro diese beiden Bibliotheken angehakt >
    - Visual Basic for Applications und
    - Microsoft Excel 11.0 Object Library

    Das "11.0" steht für Office2003, das hat Excel2000 vermutlich nicht, dort müsste wohl das gleiche mit "10.0" stehen.
    Ob das einen Unterschied macht? Sieht fast so aus, aber ich weiss es nicht.

    Ende gut, alles gut.

    Gruss Urs
     
Thread Status:
Not open for further replies.

Share This Page