Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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

Frage Entwicklung VB for Applications

Mitglied: FaBMiN

FaBMiN (Level 2) - Jetzt verbinden

15.12.2008, aktualisiert 17:25 Uhr, 4566 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 ..
Neuester Wissensbeitrag
Microsoft

Lizenzwiederverkauf und seine Tücken

(5)

Erfahrungsbericht von DerWoWusste zum Thema Microsoft ...

Ähnliche Inhalte
Microsoft Office
Excel 2007: Sortierung ohne ins Datenblatt zu springen (2)

Frage von JoSiBa zum Thema Microsoft Office ...

Microsoft Office
Excel nur markierte Zeilen ausdrucken? (3)

Frage von Server4Alle zum Thema Microsoft Office ...

VB for Applications
gelöst Excel mit VBS bearbeiten und Speichern Unter (8)

Frage von Yannosch zum Thema VB for Applications ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (17)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Windows Netzwerk
Windows 10 RDP geht nicht (16)

Frage von Fiasko zum Thema Windows Netzwerk ...

Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...