Excel VBA質問箱 IV

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

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


8123 / 76732 ←次へ | 前へ→

【74186】Re:切り抜きから貼り付け
発言  kanabun  - 13/4/27(土) 10:41 -

引用なし
パスワード
   ▼[名前なし] さん:

よこから失礼します。

ご提示のコードより、
1. 無駄な Select Selection を取る
2. 範囲を読みやすくする↓
 たとえば
> Range(Cells(i, 20), Cells(i, 44))

 Cells(i, 20).Resize(, 25)
のように Resizeを使って表現する
と、
Sub QQ2()
のようになります。これ上から処理していってるわけですね。

Sub QQ2()
 Dim i&
 i = 2
  Do While Len(Cells(i, 1).Value) > 0
    If Len(Cells(i, 21).Value) > 0 Then
      Rows(i).Copy
      Rows(i).Insert
      Cells(i, 20).Resize(, 25).ClearContents
      Cells(i + 1, 20).Resize(, 25).Cut _
        Destination:=Cells(i + 1, 15)
      i = i + 1 '★追加
    End If
    i = i + 1
  Loop

End Sub

いっぽう、下からFor〜Nextで処理しようとすると
一例としてつぎのようになるかと思います。

Sub QQ3()
  Dim i As Long
  Dim iLast As Long
  
  iLast = Cells(Rows.Count, 1).End(xlUp).Row
  For i = iLast To 2 Step -1
    If Not IsEmpty(Cells(i, 21).Value) Then
      Rows(i).Copy
      Rows(i).Insert
      With Cells(i, 20).Resize(, 25)
        .ClearContents
        .Offset(1).Cut Cells(i + 1, 15)
      End With
    End If
  Next
End Sub

で、上から(QQ2) でも 下から(QQ3) でも、こういう一行づつ
処理していたのでは画面がチラチラしてあまり処理効率がよくないと
思います。


分らないのは、

>      Rows(i).Copy
>      Rows(i).Insert

で同じ行を複製しているので、A列から N列? までのデータが
ダブルになりますけど?

これは ほんとうは どういうことをしたかったんでしょう。
それを再確認してから、手段を考えても遅くはないと思いますが。

ある範囲のデータを一行おきに移動したかったんですか?
一行おきに空白行を入れたいときは ソートを使う方法もありますよ。
2 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 発言

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