| 
    
     |  | こんにちは。 
 行の追加・削除をともなうループは後ろから処理するのが定石です。
 
 まずは、うまくいかない例を説明します。
 たとえば、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前の切り抜き→貼り付け(実際には元データのセルを左にずらしている処理)
 >で応答なしになってしまいます。
 >完全に初心者ですが、ご指摘お願いします。
 
 
 |  |