|    | 
     こんにちは。 
 
行の追加・削除をともなうループは後ろから処理するのが定石です。 
 
まずは、うまくいかない例を説明します。 
たとえば、A1:A3に「い」「ろ」「は」と入っているとします。 
1行目からループして「ろ」があったら、その行をコピー挿入するとします。 
 
すると2行目で「ろ」が見つかるので、コピー挿入。 
 するとA1:A4が「い」「ろ」「ろ」「は」になる。 
iに1を足して3行目をみると「ろ」があるのでコピー挿入。 
 するとA1:A5が「い」「ろ」「ろ」「ろ」「は」になる。 
iに1を足して4行目をみると「ろ」があるのでコピー挿入。 
 するとA1:A6が「い」「ろ」「ろ」「ろ」「ろ」「は」になる。 
iに1を足して5行目をみると「ろ」があるのでコピー挿入。 
 するとA1:A7が「い」「ろ」「ろ」「ろ」「ろ」「ろ」「は」になる。 
以下、ずーっと続く。 
 
後ろから処理した場合は、2行の目の「ろ」を処理したら つぎは 
1行目の「い」で、「該当せず」。ループ終了です。 
 
後ろから処理しようにも最終行が分からない、と推察します。 
データの最終行を調べるコードは、 
Cells(i,1).End(xlDown).Row です。 
(おまじない的に使わずに、コードの意味をちゃんとヘルプで調べて下さいね。 
 ヘルプの説明だけでは不十分と感じたらネットでも調べて下さい。) 
 
 
▼[名前なし] さん: 
>i = 2 
>  Do While Cells(i, 1) <> "" 
>  If Cells(i, 21) <> "" Then 
>    Rows(i).Select 
>    Selection.Copy 
>    Selection.Insert Shift:=xlDown 
>    Range(Cells(i, 20), Cells(i, 44)).Select 
>    Application.CutCopyMode = False 
>    Selection.ClearContents 
>    Range(Cells(i + 1, 20), Cells(i + 1, 44)).Cut Destination:=Range(Cells(i + 1, 15), Cells(i + 1, 39)) 
>  End If 
>  i = i + 1 
>  Loop 
> 
>上の記述だと、END if前の切り抜き→貼り付け(実際には元データのセルを左にずらしている処理) 
>で応答なしになってしまいます。 
>完全に初心者ですが、ご指摘お願いします。 
 | 
     
    
   |