Autor
|
Thema: Spalten in mehreren Blättern durchsuchen (5936 mal gelesen)
|
hoppel66 Mitglied kfm. Angestellter
Beiträge: 4 Registriert: 02.02.2012
|
erstellt am: 02. Feb. 2012 16:55 <-- editieren / zitieren --> Unities abgeben:
Hallo! Ich hab heute dieses Forum entdeckt, bei der Suche nach einer Problemlösung. Leider hab ich auch hier nicht die Lösung finden können (falsche Suchbegriffe genutzt?). Es geht um folgendes: ich habe eine Exceldatei (Excel 2010) mit mehreren Tabellenblättern (August 2011 bis Februar 2012). In diesen Tabellenblättern gibt es eine Spalte (B) mit Versandnummern. Diese Versandnummern beginnen bei 11500 und enden z.Z. bei ca. 16000. Jetzt bin ich auf der Suche nach einem Makro / VBA-Lösung womit ich folgendes machen kann: 1)den Suchbereich eingeben (also z.B. 11500 bis 16000) 2)Doppelte Einträge gelistet werden (in einem gesonderten Tabellenblatt) 3)Fehlende Einträge gelistet werden (ebenfalls im gesonderten Tabellenblatt, soll Schwerpunkt des Makros sein) Jemand Vorschläge um das "Problem" anzugehen? Es wird gebraucht um fehlende Versandnummern einer Charge zu finden, außerdem sind die Versandnummern nicht/nur grob sortiert. D.h. die Zahlen wurden händisch eingegeben, es sind also Doppeleinträge, fehlende Einträge, sowie fehlerhafte Einträge möglich. Denke es müsste der "Suchbereich" in ein Array eingelesen werden, die Bereiche per Schleife durchsucht werden, Ergebnisse in ein/zwei andere Arrays zwischengespeichert und dann ins gesonderte Tabellenblatt ausgegeben werden. Leider sind meine Kenntnisse doch arg eingerostet und mir fehlt jeglicher Anfang wie es losgehen könnte. Zuletzt hatte ich zu Office 2003 Zeiten kleinere Makros geschrieben. Viele Grüße, Hoppel
[Diese Nachricht wurde von hoppel66 am 02. Feb. 2012 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Comos User Mitglied
Beiträge: 112 Registriert: 23.03.2010
|
erstellt am: 03. Feb. 2012 07:53 <-- editieren / zitieren --> Unities abgeben: Nur für hoppel66
Hallo Hoppel, ich sags nicht gern aber immer wieder: EXCEL ist KEINE Datenbank Übertrage die Daten in eine Datenbank, für ein DBMS sind die beschriebenen Aufgabe leicht zu realisieren.
Für alle die die meinen "es geht aber auch mit Excel" die sollens tun, ich werde mich daran nicht mehr beteiligen. Zitat: Denke es müsste der "Suchbereich" in ein Array eingelesen werden, die Bereiche per Schleife durchsucht werden, Ergebnisse in ein/zwei andere Arrays zwischengespeichert und
Da kriegt man ja schon beim lesen Pickel. Solchen Beispielcod ezu such doppelter Datensätze findet man überall im Internet Code: SELECT productcodes, COUNT(productcode) FROM Products GROUP BY productcode HAVING ( COUNT(productcode) > 1)
Gruß Peter[Diese Nachricht wurde von Comos User am 03. Feb. 2012 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
hoppel66 Mitglied kfm. Angestellter
Beiträge: 4 Registriert: 02.02.2012
|
erstellt am: 03. Feb. 2012 08:06 <-- editieren / zitieren --> Unities abgeben:
Hallo, danke für deine Antwort. Das diese "Geschichte" mit einer Datenbank einfacher zu händeln ist, ist mir klar. Leider bekommen wir (ich) diese Datei von anderen Abteilungen wo nur mit Excel gearbeitet wird. Desweiteren müsste so eine Datenbank auch erstmal erstellt werden, und wie es in den meisten Firmen so ist: "Das haben wir schon immer so gemacht", Neuerungen sind nicht gern gesehen, es müssen ja auch andere Kollegen damit "klarkommen". Danke für den Tipp mit "doppelte Datensätze" werd mich mal damit ans suchen machen. Gruß, Hoppel Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bst Mitglied
Beiträge: 192 Registriert: 31.08.2004 .
|
erstellt am: 03. Feb. 2012 09:19 <-- editieren / zitieren --> Unities abgeben: Nur für hoppel66
Morgen, mal als Ansatz. Liest je Blatt alle Werte aus Spalte B in ein Array. Durchläuft dann das Array und testet ob da eine Zahl im gewünschten Bereich steht. Falls ja wird diese Zahl mit einem Dictionary-Objekt gezählt. Dann wird ein Array mit allen gesuchten Werten erstellt und mit den Zählern aus dem Dictionary gefüllt. Zuletzt wird das in eine neue Mappe geschrieben. Reicht Dir das? HTH, Bernd --
Code: Option ExplicitSub x() Dim ws As Worksheet Dim lngRows As Long Dim ar As Variant Dim i As Long Dim lngVal As Long Dim lngMinVal As Long Dim lngMaxVal As Long Dim objDic As Object lngMinVal = Int(Val(Application.InputBox("Von:", "myMacro", 1, Type:=1))) lngMaxVal = Int(Val(Application.InputBox("Bis:", "myMacro", 9999, Type:=1))) If lngMinVal < 1 Or lngMaxVal < lngMinVal Then Exit Sub Set objDic = CreateObject("scripting.dictionary") ' Alle Werte aus Spalte B durchlaufen For Each ws In Worksheets lngRows = ws.Cells(ws.Rows.Count, 2).End(xlUp).Row ar = ws.Cells(1, 2).Resize(lngRows) If Not IsEmpty(ar) Then For i = 1 To lngRows If IsNumeric(ar(i, 1)) Then lngVal = Int(Val(ar(i, 1))) If lngVal >= lngMinVal And lngVal <= lngMaxVal Then objDic(lngVal) = objDic(lngVal) + 1 End If End If Next End If Next ' Ausgabearray zusammenbauen ReDim ar(lngMinVal To lngMaxVal, 1 To 2) For i = lngMinVal To lngMaxVal ar(i, 1) = i ar(i, 2) = 0 If objDic.Exists(i) Then ar(i, 2) = objDic(i) Next ' und ausgeben Workbooks.Add Cells(1).Resize(lngMaxVal - lngMinVal + 1, 2) = ar objDic.RemoveAll Set objDic = Nothing End Sub
[Diese Nachricht wurde von bst am 03. Feb. 2012 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
hoppel66 Mitglied kfm. Angestellter
Beiträge: 4 Registriert: 02.02.2012
|
erstellt am: 03. Feb. 2012 10:30 <-- editieren / zitieren --> Unities abgeben:
|
StefanBerlitz Ehrenmitglied V.I.P. h.c. IT Admin (CAx)
Beiträge: 8756 Registriert: 02.03.2000 SunZu sagt: Analysiere die Vorteile, die du aus meinem Ratschlag ziehst. Dann gliedere deine Kräfte entsprechend und mache dir außergewöhnliche Taktiken zunutze.
|
erstellt am: 03. Feb. 2012 11:37 <-- editieren / zitieren --> Unities abgeben: Nur für hoppel66
Hallo Hoppel, ich würde das noch ganz anders machen: erstell dir ein zusätzliches Tabelleblatt, wo du alle möglichen/zulässigen Versandnummern in Spalte A nimmst. Dann für jedes Blatt, auf dem du nachschauen willst, eine weitere Spalte, jeweils mit der einfachen Formel =ZÄHLENWENN(VersandA!B:B;A2) darin, dadurch bekommst du raus, wie oft deine theoretisch verfügbare Versandnummer aus Zelle A2 in der Spalte B im Tabellenblatt VersandA vorkommt. So machst du für jedes Tabellenblatt eine Spalte. Dann noch eine Spalte mit der Summe aus den ZÄHLENWENN-Spalten, die mit einer schönen bedingten Formatierung und/oder Filter und du bekommst ganz schnell die Versandnummern, die noch gar nicht benutzt wurde und die, die mehrfach benutzt wurden Ich hab mal so was als Beispiel angehangen, wird vielleicht klarer, wenn du das in Excel siehst Ciao, Stefan ------------------ Inoffizielle deutsche SolidWorks Hilfeseite http://solidworks.cad.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
hoppel66 Mitglied kfm. Angestellter
Beiträge: 4 Registriert: 02.02.2012
|
erstellt am: 03. Feb. 2012 12:15 <-- editieren / zitieren --> Unities abgeben:
Hallo! Auch Dir vielen Dank. Deine "Version" enspricht so ziemlich dem was ich gesucht habe. Werde deine Tabelle für die Übersichtlichkeit (2000-6000 Versandnummern) noch etwas anpassen, aber ansonsten so verwenden! Nochmals Danke auch an alle Anderen für die rasche Hilfe. Threat kann geschlossen werden. Gruß, Hoppel Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|