PDA

Vollständige Version anzeigen : automatischer Zeilenabgleich, aber erst ab einer bestimmten Spalte


Zorro217
29.04.2009, 09:38
Hallo zusammen,

ich habe leider noch mal ein kleines Problem mit der folgenden Datei.
Diese Datei habe ich etwas ergänzt, indem ich die Spalten E bis T neu eingefügt habe.
Folgende Vorgehensweise ist angedacht und funktionierte bislang auch super: wenn in Spalte D ein Eintrag erfolgt (z.B. in D18 eine "2" eingeben), dann werden rechts daneben (also nun leider schon ab Spalte E) automatisch auch alle Änderungen mit übernommen.
Wie kann ich aber jetzt Excel dazu bewegen, dass nicht die Änderungen ab Spalte E, sondern - weil ich ja die Spalten ergänzt habe - erst ab Spalte U übernommen werden??? Ich kriege das einfach nicht gebacken, aber so schlimm kann das doch nicht sein, oder?

Mit der jetzigen Version habe ich nämlich das Problem, dass Excel auch in den neu hinzugefügten Spalten bei gleicher Nummer alles gleich macht. Das soll allerdings nicht der Fall sein!

Ich bin wirklich über jede Hilfe dankbar, stehe vollkommen auf dem Schlauch! :boah:

Viele Grüße

Zorro217

IngGi
29.04.2009, 09:49
Hallo Zorro217,

versuch's mal so. Ich habe die Änderungen rot markiert:

<div><link href="http://www.ms-office-forum.net/forum/externals/codeconv.css" rel="stylesheet"><pre><span class="TOKEN">Private Sub</span> Worksheet_Change(<span class="TOKEN">ByVal</span> Target <span class="TOKEN">As</span> Range)
&nbsp;
<span class="TOKEN">Dim</span> rngZiel <span class="TOKEN">As</span> Range
<span class="TOKEN">Dim</span> rngQuelle <span class="TOKEN">As</span> Range
<span class="TOKEN">Dim</span> strErsteAdresse <span class="TOKEN">As</span> <span class="TOKEN">String</span>
&nbsp;
<span class="TOKEN">On</span> <span class="TOKEN">Error</span> <span class="TOKEN">Resume</span> <span class="TOKEN">Next</span>
&nbsp;
<span class="TOKEN">If</span> Target.Column = 4 <span class="TOKEN">Then</span>
<span class="TOKEN">If</span> Target.Row &gt; 10 <span class="TOKEN">Then</span>
<span class="TOKEN">For</span> <span class="TOKEN">Each</span> rngZiel <span class="TOKEN">In</span> Target
<span class="TOKEN">If</span> rngZiel = &quot;&quot; <span class="TOKEN">Then</span>
Range(rngZiel.Offset(0, 17), Cells(rngZiel.Row, Columns.Count)).ClearContents
<span class="TOKEN">Else</span>
<span class="TOKEN">Set</span> rngQuelle = Range(&quot;D11:D&quot; &amp; rngZiel.Row - 1).Find(rngZiel.Value, , , xlWhole)
<span class="TOKEN">If</span> <span class="TOKEN">Not</span> rngQuelle <span class="TOKEN">Is</span> <span class="TOKEN">Nothing</span> <span class="TOKEN">Then</span>
Range(Range(&quot;U&quot; &amp; rngQuelle.Row), Cells(rngQuelle.Row, Columns.Count)).Copy
Application.EnableEvents = <span class="TOKEN">False</span>
Range(Range(&quot;U&quot; &amp; rngZiel.Row), Cells(rngZiel.Row, Columns.Count)) _
.PasteSpecial Paste:=xlPasteValues
Application.EnableEvents = <span class="TOKEN">True</span>
Application.CutCopyMode = <span class="TOKEN">False</span>
<span class="TOKEN">End</span> <span class="TOKEN">If</span>
<span class="TOKEN">End</span> <span class="TOKEN">If</span>
<span class="TOKEN">Next</span> <span class="REM">'rngZiel</span>
<span class="TOKEN">End</span> <span class="TOKEN">If</span>
<span class="TOKEN">Else</span>
<span class="TOKEN">For</span> <span class="TOKEN">Each</span> rngQuelle <span class="TOKEN">In</span> Target
<span class="TOKEN">If</span> rngQuelle.Row &gt; 10 <span class="TOKEN">Then</span>
<span class="TOKEN">If</span> rngQuelle.Column &gt; 4 <span class="TOKEN">Then</span>
<span class="TOKEN">Set</span> rngZiel = Range(&quot;D11:D&quot; &amp; Cells(Rows.Count, &quot;D&quot;).End(xlUp).Row) _
.Find(Cells(rngQuelle.Row, &quot;D&quot;), , , xlWhole)
strErsteAdresse = rngZiel.Address
&nbsp;
<span class="TOKEN">Do</span>
Application.EnableEvents = <span class="TOKEN">False</span>
Cells(rngZiel.Row, rngQuelle.Column) = rngQuelle
Application.EnableEvents = <span class="TOKEN">True</span>
<span class="TOKEN">Set</span> rngZiel = Range(&quot;D11:D&quot; &amp; Cells(Rows.Count, &quot;D&quot;) _
.End(xlUp).Row).FindNext(rngZiel)
<span class="TOKEN">Loop</span> <span class="TOKEN">While</span> <span class="TOKEN">Not</span> rngZiel <span class="TOKEN">Is</span> <span class="TOKEN">Nothing</span> <span class="TOKEN">And</span> rngZiel.Address &lt;&gt; strErsteAdresse
<span class="TOKEN">End</span> <span class="TOKEN">If</span>
<span class="TOKEN">End</span> <span class="TOKEN">If</span>
<span class="TOKEN">Next</span> <span class="REM">'rngQuelle</span>
<span class="TOKEN">End</span> <span class="TOKEN">If</span>
&nbsp;
<span class="TOKEN">End</span> <span class="TOKEN">Sub</span>&nbsp;</pre></div>
Code eingefügt mit dem MOF Code Converter (http://www.ms-office-forum.net/forum/codeconverter.php)

Gruß Ingolf

pefeu
29.04.2009, 09:55
Hallo,

versuch es einmal so:
<FONT FACE="Arial,FixedSys"Size=2>
<Blockquote>
<FONT COLOR=#0000FF>If</FONT>&nbsp;rngZiel&nbsp;=&nbsp;""&nbsp;<FONT COLOR=#0000FF>Then</FONT>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Range(rngZiel.Offset(0,&nbsp;17),&nbsp;Cells(rngZiel.Row,&nbsp;Columns.Count)).ClearCon tents
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<FONT COLOR=#0000FF>Else</FONT>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<FONT COLOR=#0000FF>Set</FONT>&nbsp;rngQuelle&nbsp;=&nbsp;Range("D11:D"&nbsp;&amp;&nbsp;rngZiel.Row&nbsp;-&nbsp;1).Find(rngZiel.Value,&nbsp;,&nbsp;,&nbsp;xlWhole)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<FONT COLOR=#0000FF>If Not</FONT>&nbsp;rngQuelle&nbsp;<FONT COLOR=#0000FF>Is Nothing Then</FONT>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Range(Range("U"&nbsp;&amp;&nbsp;rngQuelle.Row),&nbsp;Cells(rngQuelle.Row,&nbsp;Columns.Count)).Copy
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Application.EnableEvents&nbsp;=&nbsp;<FONT COLOR=#0000FF>False</FONT>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Range(Range("U"&nbsp;&amp;&nbsp;rngZiel.Row),&nbsp;Cells(rngZiel.Row,&nbsp;Columns.Count))&nbsp;_
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.PasteSpecial&nbsp;Paste:=xlPasteValues
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Application.EnableEvents&nbsp;=&nbsp;<FONT COLOR=#0000FF>True</FONT>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Application.CutCopyMode&nbsp;=&nbsp;<FONT COLOR=#0000FF>False</FONT>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<FONT COLOR=#0000FF>End If</FONT>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<FONT COLOR=#0000FF>End If</FONT>&nbsp;}

</Blockquote>
<FONT FACE="Courier New,FixedSys"Size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Code eingefügt mit <b><a href="http://rtsoftwaredevelopment.de" target="_blank">Syntaxhighlighter 4.4</a></b></FONT>
<FONT FACE="Arial,FixedSys"Size=2>

Ich habe den Offset von 1 auf 17 und die zwei Range("E" .., auf Range("U" ... geändert.

Gruß Peter

Zorro217
29.04.2009, 10:08
Hallo Ihr zwei,

und vielen Dank für die Antworten. Ich habe die 3 Änderungen gemacht, allerdings habe ich so noch nicht den gewünschten Erfolg. Sobald ich was in den Spalten E bis T eingebe, dann haut Excel mir diesen Eintrag auch noch in die anderen Zeilen.

Habt Ihr sonst vielleicht noch eine Idee, wie sich das Problem beheben lässt?

Viele Grüße

Zorro217

IngGi
29.04.2009, 10:41
Hallo Zorro217,

das lässt sich mit einer 4. Änderung korrigieren:

<div><link href="http://www.ms-office-forum.net/forum/externals/codeconv.css" rel="stylesheet"><pre><span class="TOKEN">Private Sub</span> Worksheet_Change(<span class="TOKEN">ByVal</span> Target <span class="TOKEN">As</span> Range)
&nbsp;
<span class="TOKEN">Dim</span> rngZiel <span class="TOKEN">As</span> Range
<span class="TOKEN">Dim</span> rngQuelle <span class="TOKEN">As</span> Range
<span class="TOKEN">Dim</span> strErsteAdresse <span class="TOKEN">As</span> <span class="TOKEN">String</span>
&nbsp;
<span class="TOKEN">On</span> <span class="TOKEN">Error</span> <span class="TOKEN">Resume</span> <span class="TOKEN">Next</span>
&nbsp;
<span class="TOKEN">If</span> Target.Column = 4 <span class="TOKEN">Then</span>
<span class="TOKEN">If</span> Target.Row &gt; 10 <span class="TOKEN">Then</span>
<span class="TOKEN">For</span> <span class="TOKEN">Each</span> rngZiel <span class="TOKEN">In</span> Target
<span class="TOKEN">If</span> rngZiel = &quot;&quot; <span class="TOKEN">Then</span>
Range(rngZiel.Offset(0, 17), Cells(rngZiel.Row, Columns.Count)).ClearContents
<span class="TOKEN">Else</span>
<span class="TOKEN">Set</span> rngQuelle = Range(&quot;D11:D&quot; &amp; rngZiel.Row - 1).Find(rngZiel.Value, , , xlWhole)
<span class="TOKEN">If</span> <span class="TOKEN">Not</span> rngQuelle <span class="TOKEN">Is</span> <span class="TOKEN">Nothing</span> <span class="TOKEN">Then</span>
Range(Range(&quot;U&quot; &amp; rngQuelle.Row), Cells(rngQuelle.Row, Columns.Count)).Copy
Application.EnableEvents = <span class="TOKEN">False</span>
Range(Range(&quot;U&quot; &amp; rngZiel.Row), Cells(rngZiel.Row, Columns.Count)) _
.PasteSpecial Paste:=xlPasteValues
Application.EnableEvents = <span class="TOKEN">True</span>
Application.CutCopyMode = <span class="TOKEN">False</span>
<span class="TOKEN">End</span> <span class="TOKEN">If</span>
<span class="TOKEN">End</span> <span class="TOKEN">If</span>
<span class="TOKEN">Next</span> <span class="REM">'rngZiel</span>
<span class="TOKEN">End</span> <span class="TOKEN">If</span>
<span class="TOKEN">Else</span>
<span class="TOKEN">For</span> <span class="TOKEN">Each</span> rngQuelle <span class="TOKEN">In</span> Target
<span class="TOKEN">If</span> rngQuelle.Row &gt; 10 <span class="TOKEN">Then</span>
<span class="TOKEN">If</span> rngQuelle.Column &gt; 20 <span class="TOKEN">Then</span>
<span class="TOKEN">Set</span> rngZiel = Range(&quot;D11:D&quot; &amp; Cells(Rows.Count, &quot;D&quot;).End(xlUp).Row) _
.Find(Cells(rngQuelle.Row, &quot;D&quot;), , , xlWhole)
strErsteAdresse = rngZiel.Address
&nbsp;
<span class="TOKEN">Do</span>
Application.EnableEvents = <span class="TOKEN">False</span>
Cells(rngZiel.Row, rngQuelle.Column) = rngQuelle
Application.EnableEvents = <span class="TOKEN">True</span>
<span class="TOKEN">Set</span> rngZiel = Range(&quot;D11:D&quot; &amp; Cells(Rows.Count, &quot;D&quot;) _
.End(xlUp).Row).FindNext(rngZiel)
<span class="TOKEN">Loop</span> <span class="TOKEN">While</span> <span class="TOKEN">Not</span> rngZiel <span class="TOKEN">Is</span> <span class="TOKEN">Nothing</span> <span class="TOKEN">And</span> rngZiel.Address &lt;&gt; strErsteAdresse
<span class="TOKEN">End</span> <span class="TOKEN">If</span>
<span class="TOKEN">End</span> <span class="TOKEN">If</span>
<span class="TOKEN">Next</span> <span class="REM">'rngQuelle</span>
<span class="TOKEN">End</span> <span class="TOKEN">If</span>
&nbsp;
<span class="TOKEN">End</span> <span class="TOKEN">Sub</span>&nbsp;</pre></div>
Code eingefügt mit dem MOF Code Converter (http://www.ms-office-forum.net/forum/codeconverter.php)

Gruß Ingolf

Zorro217
30.04.2009, 07:45
Moin Ingolf,

es fehlt noch meine Rückantwort: es klappt! :-)

Vielen Dank für Deine Bemühungen!

Zorro217