PDA

Vollständige Version anzeigen : Schleife erstellen


Rudi G
07.05.2009, 13:03
Hi,
ich versuche eine Schleife zu machen die immer wenn in Spalte A der Text
"120 0710" steht diesen nicht zu löschen, wenn es eine andere Zahl ist soll die ganze Zeile gelöscht werden.
Allerdings ist "120 0710XXX" nur ein Teil des Feldinhaltes.
Kann mir jmd helfen?

Backowe
07.05.2009, 13:10
Hi,

for each zelle in Bereich
if left(zelle, 8) <> "120 0710" then
zelle.entirerow.delete
end if
next

chris-kaiser
07.05.2009, 13:15
Hallo Rudi

versuche das einmal in einer Kopie der mappe

Sub aufraeumen()
Dim cell_ As Range
Dim theBigone As Range
For Each cell_ In Range(Cells(1, 1), Columns(1).SpecialCells(xlCellTypeLastCell))
If Not cell_ Like "120 0710*" Then
If theBigone Is Nothing Then
Set theBigone = Rows(cell_.Row)
Else
Set theBigone = Union(theBigone, Rows(cell_.Row))
End If
End If
Next
If Not theBigone Is Nothing Then theBigone.Delete
End Sub

Rudi G
07.05.2009, 14:41
Hi zusammen,

leider funktionieren beide Lösungen nicht,

da die Daten aus txt eingelesen werden, habe ich nun vor der Schleife noch alles als Text gesetzt, nur funktioniert das auch nicht,
muss ich ein bestimmtes Format wählen?

Backowe
07.05.2009, 14:45
Hi Rudi,

wie wäre es denn mit einem kleinen Beispiel, statt Rätselraten zu spielen!

Rudi G
08.05.2009, 06:52
Hi Jürgen,

also hier wäre mein komplettes Makro:
ChDir "C:\Dokumente und Einstellungen\aberg\Desktop"
Workbooks.OpenText Filename:="\\Badsus1\sstdruck\BERG.TXT", Origin:=-535, _
StartRow:=1, DataType:=xlFixedWidth, FieldInfo:=Array(Array(0, 1), Array(12 _
, 1), Array(23, 1), Array(50, 1), Array(67, 1), Array(68, 1), Array(83, 1), Array(99, 1), _
Array(100, 1), Array(115, 1), Array(116, 1), Array(131, 1), Array(132, 1)), _
TrailingMinusNumbers:=True
ActiveWorkbook.SaveAs Filename:= _
"C:\Dokumente und Einstellungen\aberg\Desktop\BERG.xls", FileFormat:=xlNormal _
, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _
CreateBackup:=False


Sheets("BERG").Select

Selection.NumberFormat = "@"

Dim cell_ As Range
Dim theBigone As Range
For Each cell_ In Range(Cells(1, 1), Columns(1).SpecialCells(xlCellTypeLastCell))
If Not cell_ Like "120 0710*" Then
If theBigone Is Nothing Then
Set theBigone = Rows(cell_.Row)
Else
Set theBigone = Union(theBigone, Rows(cell_.Row))
End If
End If
Next
If Not theBigone Is Nothing Then theBigone.Delete

chris-kaiser
08.05.2009, 08:50
Hallo Rudi

In in der Tabelle Berg
sollte das 120 0710 in der SPALTE A vorkommen
dann würde der Code funktionieren
steht vor dem 120 0710 noch was dann müsste der Code
auf
If Not cell_ Like "*120 0710*" Then
noch geändert werden.

p.s
mit wie wäre es denn mit einem kleinen Beispiel war eine Demomappe gemeint
damit wir erkennen können wo deine Daten überhaupt stehen.
Deinen Anfangscode können wir nicht ausführen. ohne die Datei.

Backowe
08.05.2009, 08:52
Hi Rudi,

mit ging es eigentlich um die Textdatei, nicht um das Makro, damit ich sehe was in den betreffenden Zeilen drin steht.

IngGi
08.05.2009, 09:24
Hallo Rudi,

ergänzend sei noch angemerkt, dass du mit folgendem Code nicht das gesamte Tabellenblatt in Format Text umwandelst, sondern nur die Zellen, die gerade zufällig markiert sind. Mit Sheets("BERG").Select wird nämlich lediglich das Tabellenblatt aktiviert, es werden aber keine Zellen markiert.
Sheets("BERG").Select
Selection.NumberFormat = "@"
Es ist auch gar nicht erforderlich, das Tabellenblatt zu aktivieren und die umzuformatierenden Zellen vorher zu markieren. Es geht besser so:
Sheets("BERG").Cells.NumberFormat = "@"

Gruß Ingolf

Rudi G
08.05.2009, 14:20
Hi Ingolf,

danke für den Hinweis,

leider funktioniert es trotzdem nicht.
Alle Zeilen werden gelöscht, irgendwie wird der Text nicht richtig erkannt.

Rudi G
08.05.2009, 14:23
Hi Jürgen,
vielen Dank für ddeine hilfe,

leider klappt es nicht, es werden immer alle Zeilen gelöscht,
Ich habe es auch mal mit Spalte B versucht, und mit anderen im Text vorkommenden Zeichen.
Hier mal ein Auszug aus der Txt:

117 00 FORDERUNGEN L+L
117 FORDERUNGEN L+L RA ZAHN
Kreditorisch
120 07100006 AsSF-Dansk Folkehjælp
120 07100012 Teatercentrum i Danmark
120 07100013 Havn Vekiosken
120 07100025 Det Danske Vienkompagni
120 07100026 Capedkica International

IngGi
08.05.2009, 14:39
Hallo Rudi,

Ursache könnte das "Leerzeichen" im Suchtext 120 0710 sein. Möglicherweise handelt es sich dabei nicht um das standardmäßige Leerzeichen mit dem ASCII-Code 32, sondern zum Beispiel um das ASCII-Zeichen 160. Prüfe das mal bei einer der Zellen mit der Formel

=CODE(TEIL(A1;4;1))

wobei A1 der Bezug auf eine der relevanten Zellen sein muss.

Gruß Ingolf

Backowe
08.05.2009, 14:42
Hallo Rudi,

ich habe Deinen Textschnipsel in eine Textdatei kopiert und importiert mit folgendem Code:

<div><link href="http://www.ms-office-forum.net/forum/externals/codeconv.css" rel="stylesheet"><pre><span class="TOKEN">Sub</span> ImportAusTextDatei()
<span class="TOKEN">Dim</span> strZeile <span class="TOKEN">As</span> <span class="TOKEN">String</span>
<span class="TOKEN">Dim</span> i&amp;
<span class="TOKEN">Open</span> &quot;J:\BspDatei.txt&quot; <span class="TOKEN">For</span> <span class="TOKEN">Input</span> <span class="TOKEN">As</span> #1
i = 1
<span class="TOKEN">Do</span> <span class="TOKEN">While</span> <span class="TOKEN">Not</span> EOF(1)
<span class="TOKEN">Line</span> <span class="TOKEN">Input</span> #1, strZeile
<span class="TOKEN">If</span> Left(strZeile, 8) &lt;&gt; &quot;120 0710&quot; <span class="TOKEN">Then</span>
Cells(i, 1) = strZeile
i = i + 1
<span class="TOKEN">End</span> <span class="TOKEN">If</span>
<span class="TOKEN">Loop</span>
<span class="TOKEN">Close</span> #1
<span class="TOKEN">End</span> <span class="TOKEN">Sub</span></pre></div>
Code eingefügt mit dem MOF Code Converter (http://www.ms-office-forum.net/forum/codeconverter.php)

Mit folgendem Ergebnis:

<table border="1" cellspacing="0" cellpadding="0" style="font-family:Arial,Arial; font-size:10pt; background-color:#ffffff; padding-left:2pt; padding-right:2pt; "> <colgroup><col style="font-weight:bold; width:30px; " /><col style="width:222px;" /></colgroup><tr style="background-color:#cacaca; text-align:center; font-weight:bold; font-size:8pt; "><td >&nbsp;</td><td >A</td></tr><tr style="height:17px ;" ><td style="font-size:8pt; background-color:#cacaca; text-align:center; " >1</td><td >117 00 FORDERUNGEN L+L</td></tr><tr style="height:17px ;" ><td style="font-size:8pt; background-color:#cacaca; text-align:center; " >2</td><td >117 FORDERUNGEN L+L RA ZAHN</td></tr><tr style="height:17px ;" ><td style="font-size:8pt; background-color:#cacaca; text-align:center; " >3</td><td >Kreditorisch</td></tr></table> <br /><br /><span style="font-family:Arial; font-size:9pt; font-weight:bold;background-color:#ffffff; color:#000000; ">Excel Tabellen im Web darstellen &gt;&gt; </span><a style ="font-family:Arial; font-size:9pt; color:#fcf507; background-color:#800040; font-weight:bold;" href="http://www.excel-jeanie-html.de" target="_blank"> Excel Jeanie HTML 4 </a>

Rudi G
08.05.2009, 14:48
Hi Jürgen,

da ich ja nur die 120XXXX haben will müsste ich
if not (120 071*) machen oder?

Backowe
08.05.2009, 14:54
Hi Rudi,

If Not strZeile Like "120*" Then <-- funktioniert.

Rudi G
11.05.2009, 09:07
Hi Jürgen,

vielen Dank für deine Hilfe,

leider klappt es nicht, ich versuche nun diese Leerstelle zu entfernen und einfach über eine Zahlensortierung (irgendwie mit >< ) das Problem zu beheben.
Für den in der Schleife angegebenen Wert ist Text oder Zahlenformat ja egal,
oder?

Backowe
11.05.2009, 10:22
Hallo Rudi,

Du suchst Dich dumm und dusselig den Fehler zu finden, wir versuchen Dir zu helfen, aber wir haben nicht die gleiche Ausgangsposition, da wir Deine Textdatei nicht kennen.

Hänge bitte Deine Textdatei, ohne verfängliche Daten hier an ein Posting an, es müssen ja nur ein paar Zeilen sein mehr nicht, damit wir die gleiche Basis haben. Ich weiß im Moment nicht mehr wie ich Dir weiterhelfen könnte.

BoskoBiati
11.05.2009, 11:09
Hallo zusammen,

versucht´s mal so:
strwert=left(Cell_,9)
if If Not Strwert Like "120 0710*" Then

in dieser Aufstellung funktionierts bei mir

Rudi G
14.05.2009, 11:00
Hallo Jürgen,

ich habe jetzt meine Txt anhängt,
ich habe mit den Formaten einiges versucht,
aber irgendwie wird immer alles gelöscht.

Backowe
14.05.2009, 11:39
Hi Rudi,

bei mir hat es jetzt so funktioniert:

<div><link href="http://www.ms-office-forum.net/forum/externals/codeconv.css" rel="stylesheet"><pre><span class="TOKEN">Sub</span> ImportAusTextDatei()
<span class="TOKEN">Dim</span> strZeile <span class="TOKEN">As</span> <span class="TOKEN">String</span>
<span class="TOKEN">Dim</span> i&amp;
<span class="TOKEN">Open</span> &quot;J:\Salden.txt&quot; <span class="TOKEN">For</span> <span class="TOKEN">Input</span> <span class="TOKEN">As</span> #1
i = 1
<span class="TOKEN">Do</span> <span class="TOKEN">While</span> <span class="TOKEN">Not</span> EOF(1)
<span class="TOKEN">Line</span> <span class="TOKEN">Input</span> #1, strZeile
<span class="TOKEN">If</span> Left(strZeile, 1) = Chr(10) <span class="TOKEN">Then</span> strZeile = Right(strZeile, Len(strZeile) - 1)
<span class="TOKEN">If</span> Left(strZeile, 4) &lt;&gt; &quot;120 &quot; <span class="TOKEN">Then</span>
Cells(i, 1) = strZeile
i = i + 1
<span class="TOKEN">End</span> <span class="TOKEN">If</span>
<span class="TOKEN">Loop</span>
<span class="TOKEN">Close</span> #1
<span class="TOKEN">End</span> <span class="TOKEN">Sub</span></pre></div>
Code eingefügt mit dem MOF Code Converter (http://www.ms-office-forum.net/forum/codeconverter.php)

Rudi G
14.05.2009, 14:32
Hi Jürgen,
leider funktioniert es bei mir immer noch nicht.

Dim strZeile As String
Dim i&
'Open "J:\Salden.txt" For Input As #1
i = 1
Do While Not EOF(1)
Line Input #1, strZeile
If Left(strZeile, 1) = Chr(10) Then strZeile = Right(strZeile, Len(strZeile) - 1)
If Left(strZeile, 4) <> "120 " Then
Cells(i, 1) = strZeile
i = i + 1
End If
Loop
Close #1


die Zeile 'Open "J:\Salden.txt" For Input As #1 habe ich ausgetextet,
liegt hier der Fehler, mein txt ist ja schon offen.

Backowe
14.05.2009, 14:47
Hallo Rudi,

auf ein Neues! :) Bei mir bleiben 5 Zeilen mit "120 " übrig!

<div><link href="http://www.ms-office-forum.net/forum/externals/codeconv.css" rel="stylesheet"><pre><span class="TOKEN">Sub</span> ZeilenLoeschen()
<span class="TOKEN">Dim</span> i%
<span class="TOKEN">For</span> i = Cells(Rows.Count, &quot;A&quot;).End(xlUp).Row <span class="TOKEN">To</span> 1 <span class="TOKEN">Step</span> -1
<span class="TOKEN">If</span> Left(Cells(i, &quot;A&quot;), 4) &lt;&gt; &quot;120 &quot; <span class="TOKEN">Then</span> _
Cells(i, &quot;A&quot;).EntireRow.Delete
<span class="TOKEN">Next</span>
<span class="TOKEN">End</span> <span class="TOKEN">Sub</span></pre></div>
Code eingefügt mit dem MOF Code Converter (http://www.ms-office-forum.net/forum/codeconverter.php)

Rudi G
15.05.2009, 07:32
Hi Jürgen,

es hat funktioniert, absolute super spitzenklasse,
vielen Dank hierfür