Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


8126 / 76732 ←次へ | 前へ→

【74183】Re:切り抜きから貼り付け
発言    - 13/4/27(土) 6:09 -

引用なし
パスワード
   こんにちは。

行の追加・削除をともなうループは後ろから処理するのが定石です。

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

1 hits

【74178】切り抜きから貼り付け [名前なし] 13/4/26(金) 16:41 質問
【74183】Re:切り抜きから貼り付け 13/4/27(土) 6:09 発言
【74184】Re:切り抜きから貼り付け UO3 13/4/27(土) 6:35 発言
【74185】Re:切り抜きから貼り付け 13/4/27(土) 7:16 発言
【74186】Re:切り抜きから貼り付け kanabun 13/4/27(土) 10:41 発言
【74192】Re:切り抜きから貼り付け kanabun 13/4/27(土) 20:11 発言

8126 / 76732 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free