Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Excel 2007.VBS - Zeilen löschen, deren Zellen mehr als 16 Zeichen, Sonderzeichen ausser . (Punkt) oder Leerzeichen haben

Mitglied: FaBMiN

FaBMiN (Level 2) - Jetzt verbinden

15.12.2008, aktualisiert 17:25 Uhr, 4635 Aufrufe, 5 Kommentare

Hi,

ich hab mal wieder ein kleines Problem mit einer riesen Tabelle.
Die Tabelle besteht aus 4 Spalten und ist folgendesmassen aufgebaut

Vorname.Nachname | Vorname | Nachname | Passwort

Hat eine Zelle mehr als 16 Zeichen, ein Sonderzeichen ausser dem '.' (Punkt) oder ein Leerzeichen, soll die Zeile gelöscht werden. Super wäre natürlich noch, wenn ich zwischendrin keine Leerzeilen hätte.

Wenn irgendwer ne tolle Idee für ein VBSkript hat - ich beherrsche es leider nicht - würde es mich wirklich freuen, wenn er oder sie es mir posten könnte...sonst bin ich ein wenig aufgeschmisse :/

Vielen Dank
Mitglied: Logan000
15.12.2008 um 15:04 Uhr
Moin Moin

Schau Dir das mal an (ungetestet). Die geprüften Sonderzeichen must du wohl noch wetwas erweitern und es wird zurzeit nur Spalte A geprüft.

01.
Const ExcelFile ="C:\Test.xls" 
02.
Const MaxZeilen = 1000 
03.
Set objExcel = CreateObject("Excel.Application")	 
04.
Set objWorkbook = objExcel.Workbooks.Open(ExcelFile) 
05.
Set objWorkSheet = objWorkbook.Worksheets(1)		 
06.
i = 1 
07.
While i < maxzeilen 
08.
  szValue = objWorkSheet.Range("A" & i).Value   	 
09.
  if szValue<>"" Then 
10.
     szValue = Replace(szValue," ","")	 
11.
     If Len(szValue) > 16 then bFound = True 
12.
     If Instr(szValue,"!") > 0 Then bFound = True  
13.
     If Instr(szValue,"§") > 0 Then bFound = True 		 
14.
     If Instr(szValue,"$") > 0 Then bFound = True  
15.
     If Instr(szValue,"%") > 0 Then bFound = True 		 
16.
     If Instr(szValue,"&") > 0 Then bFound = True  
17.
     If Instr(szValue,"/") > 0 Then bFound = True  
18.
     ' ... 
19.
     If bFound Then		 
20.
         objWorkSheet.Rows( i & ":" &i).delete 
21.
     Else				 
22.
         objWorkSheet.Range("A" & i).Value = szValue 
23.
     end if	 
24.
   end if 
25.
   if Not bFound Then 
26.
       i = i + 1 
27.
   end if 
28.
   szValue ="" 
29.
   bFound  = False 	 
30.
Wend												
Gruß L.
Bitte warten ..
Mitglied: FaBMiN
15.12.2008 um 15:48 Uhr
01.
Const ExcelFile ="C:\import.xlsx" 
02.
Const MaxZeilen = 65000 
03.
Const MaxSpalten = 4 
04.
Set objExcel = CreateObject("Excel.Application")	 
05.
Set objWorkbook = objExcel.Workbooks.Open(ExcelFile) 
06.
Set objWorkSheet = objWorkbook.Worksheets(1)		 
07.
j = 1 
08.
While j < MaxSpalten 
09.
 i = 1 
10.
  While i < MaxZeilen 
11.
   szValue = objWorkSheet.Range(j & i).Value   	 
12.
   if szValue <> "" Then 
13.
     szValue = Replace(szValue," ","")	 
14.
     If Len(szValue) > 16 then bFound = True 
15.
     If Instr(szValue,"!") > 0 Then bFound = True  
16.
     If Instr(szValue,"§") > 0 Then bFound = True 		 
17.
     If Instr(szValue,"$") > 0 Then bFound = True  
18.
     If Instr(szValue,"%") > 0 Then bFound = True 		 
19.
     If Instr(szValue,"&") > 0 Then bFound = True  
20.
     If Instr(szValue,"/") > 0 Then bFound = True  
21.
     ' ... 
22.
     If bFound Then		 
23.
         objWorkSheet.Rows( i & ":" &i).delete 
24.
     Else				 
25.
         objWorkSheet.Range(j & i).Value = szValue 
26.
     end if	 
27.
   end if 
28.
   if Not bFound Then 
29.
       i = i + 1 
30.
   end if 
31.
   if i == 65000 Then 
32.
   j = j + 1 
33.
  end if    
34.
   szValue ="" 
35.
   bFound  = False 	 
36.
End
Ich versteh das Skript nicht so ganz, liegt warscheinlich aber auch daran, dass ich nicht programmieren kann
Bitte warten ..
Mitglied: Logan000
15.12.2008 um 16:14 Uhr
Moin

Also objWorkSheet.Range erwartet einen Textparameter in der Form C:2.
Des wegen wird das mit Deinem j hier nix.
Um so eine Zähler in Buchstaben umzurechen kann man Chr und Ascii verwenden,
etwa so:
01.
... 
02.
   Spalte = chr(64 +j) 
03.
   szValue = objWorkSheet.Range(Spalte & ":" & i).Value
Die Zeile
01.
if i == 65000 Then 
ist überflüssig, dafür haben wir While ... Wend schleifen.

Probiers mal so:
01.
Const ExcelFile ="C:\import.xlsx"  
02.
Const MaxZeilen = 65000  
03.
Const MaxSpalten = 4  
04.
Set objExcel = CreateObject("Excel.Application")	  
05.
Set objWorkbook = objExcel.Workbooks.Open(ExcelFile)  
06.
Set objWorkSheet = objWorkbook.Worksheets(1)		  
07.
j = 1  
08.
While j < MaxSpalten  
09.
   i = 1  
10.
   While i < MaxZeilen  
11.
       Spalte = chr(64 +j) 
12.
       szValue = objWorkSheet.Range(Spalte & ":" & i).Value   	  
13.
       if szValue <> "" Then  
14.
           szValue = Replace(szValue," ","")	  
15.
           If Len(szValue) > 16 then bFound = True  
16.
           If Instr(szValue,"!") > 0 Then bFound = True   
17.
	   If Instr(szValue,"§") > 0 Then bFound = True 		  
18.
           If Instr(szValue,"$") > 0 Then bFound = True   
19.
	   If Instr(szValue,"%") > 0 Then bFound = True 		  
20.
           If Instr(szValue,"&") > 0 Then bFound = True   
21.
	   If Instr(szValue,"/") > 0 Then bFound = True   
22.
           ' ...  
23.
	   If bFound Then		  
24.
               objWorkSheet.Rows( i & ":" & i).delete  
25.
	   Else				  
26.
               objWorkSheet.Range(j & i).Value = szValue  
27.
           end if	  
28.
       end if  
29.
       if Not bFound Then  
30.
           i = i + 1  
31.
       end if  
32.
       szValue =""  
33.
       bFound  = False 	  
34.
   Wend 
35.
   j = j + 1  
36.
Wend 
37.
objWorkbook.SaveAs ExcelFile 
38.
objExcel.Visible = True  
Gruß L.
Bitte warten ..
Mitglied: bastla
15.12.2008 um 17:13 Uhr
Hallo FaBMiN und Logan000!

Als etwas schlankere Alternative (nur bezogen auf das Überprüfen der Zellen) böte sich etwas in der Art an (hier allerdings als VBA-Version):
01.
Set rE = CreateObject("VBScript.RegExp") 
02.
rE.Pattern = "[^\w\. ]|_" 'da "_" in "\w" enthalten ist, getrennt prüfen 
03.
 
04.
BisSpalte = 4 
05.
MaxLen = 16 
06.
Z = 2 'erste zu überprüfende Zeile 
07.
 
08.
Do While Cells(Z, "A").Value <> "" 
09.
    For Sp = 1 To BisSpalte 
10.
        Inhalt = Cells(Z, Sp).Value 
11.
        If Len(Inhalt) > MaxLen Or rE.Test(Inhalt) Then 
12.
            Rows(Z).Delete 
13.
            Z = Z - 1 'Zähler korrigieren, da aktuelle Zeile entfernt wurde 
14.
            Exit For 
15.
        End If 
16.
    Next 
17.
    Z = Z + 1 
18.
Loop
Noch als Anmerkung: Anstelle von
szValue = objWorkSheet.Range(Spalte & ":" & i).Value
(warum eigentlich ":" dazwischen?) sollte es auch
szValue = objWorkSheet.Cells(i, j).Value
tun (wobei für die Angabe der Spalte sowohl eine Zahl als auch ein Buchstabe verwendet werden kann - siehe oben).

Grüße
bastla
Bitte warten ..
Mitglied: FaBMiN
15.12.2008 um 17:25 Uhr
Na sauber bastla...werde ich mir morgen gleich mal antun
ich hoffe es funktioniert.

Danke euch beiden auf jedenfall!
Bitte warten ..
Ähnliche Inhalte
Microsoft Office
Zellen ändern in Excel 2007
gelöst Frage von Fraeser50Microsoft Office3 Kommentare

Hallo, Ich habe vor langer Zeit ein Einrichteblatt erstellt. Es gibt eine Zelle auf dem Blatt, wenn die mit ...

Microsoft Office

Excel Zelle dynamisch einer Zeile zuordnen

gelöst Frage von sammy65Microsoft Office3 Kommentare

Hallo miteinander, ich habe eine Excel Tabelle, die mir einer Acces Abfrage gefüttert wird. Funktioniert Tadellos. Jetzt vollen meine ...

Microsoft Office

Excel 2007 aus Zellen Diagramm erstellen

Frage von 103148Microsoft Office4 Kommentare

Hallo, ich stehe wohl auf dem "Schlauch". Ich habe ca 250 Einträge in einer Zellenreihe also vertikal. Diese möchte ...

VB for Applications

Excel Zelle auf bestimmte Anzahl von Zeichen begrenzen mit VBA

gelöst Frage von Anna2701VB for Applications8 Kommentare

Hallo zusammen, ich würde gerne eine Zelle einer Excel Tabelle auf 132 Zeichen begrenzen und der Rest der über ...

Neue Wissensbeiträge
Windows 10

USB Maus und Tastatur versagen Dienst unter Windows 10

Erfahrungsbericht von hardykopff vor 2 TagenWindows 105 Kommentare

Da steht man ziemlich dumm da, wenn der PC sich wegen fehlender USB Tastatur und Maus nicht bedienen lässt. ...

Administrator.de Feedback
Update der Seite: Alles zentriert
Information von Frank vor 2 TagenAdministrator.de Feedback18 Kommentare

Hallo User, die größte Änderung von Release 5.8 ist das Zentrieren der Webseite (auf großen Bildschirmen) und ein "Welcome"-Teaser ...

Humor (lol)

WhatsApp-Nachrichten endlich auch per Bluetooth versendbar

Information von BassFishFox vor 3 TagenHumor (lol)5 Kommentare

Genau darauf habe ich gewartet! ;-) Der beliebte Messaging-Dienst WhatsApp erhält eine praktische neue Funktion: Ab dem nächsten Update ...

Google Android

Googles "Android Enterprise Recommended" für Unternehmen

Information von kgborn vor 3 TagenGoogle Android3 Kommentare

Hier eine Information, die für Administratoren und Verantwortliche in Unternehmen, die für die Beschaffung und das Rollout von Android-Geräten ...

Heiß diskutierte Inhalte
Router & Routing
Router auf Orginal Firmware zurück flashen mit Tftpd
Frage von ILeonardRouter & Routing21 Kommentare

Hallo, Ich habe zwei Router, einmal TP-Link 841n v11 und TP-Link 940N v5. Ich wollte fragen, ob jemand mir ...

Router & Routing
WRT keine Verbindung zum Web Interface
gelöst Frage von ILeonardRouter & Routing18 Kommentare

Hallo, Ich habe einen TP-Link WR841n mit wrt geflasht, das Problem ist ich kann mich mit 192.168.1.1 nicht verbinden. ...

Windows Server
Standortvernetzung zu einem Strato VServer (Windows)
Frage von matzefratze81Windows Server10 Kommentare

Moin, ich komme aus einem Enterprise-Umfeld und habe den Fehler gemacht, dass ich mich auf ein kleines Unternehmen eingelassen ...

TK-Netze & Geräte
Telefonie zweier Fritzboxen mit je eigenem DSL Anschluss verbinden
Frage von hannsgmaulwurfTK-Netze & Geräte10 Kommentare

Hallo zusammen, ich habe hier einen Haushalt mit zwei Anschlüssen. Einmal ISDN, einmal DSL. An jedem Anschluss hängt eine ...