アプリ版:「スタンプのみでお礼する」機能のリリースについて

質問番号:4733370の質問と回答を勝手に引用させて頂きます。

セルA列にキーワードCCCが含まれていた場合に
その行を削除してSheet2に貼り付けする・・・という下のマクロを
貼り付けの部分を挿入に変更したいのですが、なにぶんマクロ初心者
の為よくわからないので教えていただけないでしょうか・・
宜しくお願い致します。


Sub キーワード切取貼付02()
Dim r As Range, ur As Range, rr As Long
Dim rd(), v
Set r = Range("A1", Range("A65536").End(xlUp)).Find(What:="CCC", LookAt:=xlPart, After:=Range("A65536").End(xlUp))
If r Is Nothing Then 'なかったら
MsgBox "ありません", vbCritical, "? ( ̄~ ̄;)う~ん  "
Exit Sub '終了
Else 'あったら
Do Until r Is Nothing '対象がなくなるまで
ReDim Preserve rd(rr) '動的配列を用意
rd(rr) = r.Address(0, 0) '対象セルアドレスを配列に格納
rr = rr + 1 'カウント
r.EntireRow.Cut Destination:=Sheets("Sheet2").Cells(rr, 1) '行の切り取り貼り付け
Set r = Range("A1", Range("A65536").End(xlUp)).FindNext(r) '連続検索
Loop '繰り返し
For Each v In rd() '各配列要素を
If ur Is Nothing Then
Set ur = Range(v)
Else
Set ur = Union(Range(v), ur) 'ユニオンに
End If
Next v
ur.EntireRow.Delete 'ユニオンセルの属す行を一括削除
Set ur = Nothing
Set r = Nothing
End If
MsgBox rr & "件をSheet2に移動しました。", vbInformation, " ( ̄ー ̄)v"
End Sub

A 回答 (4件)

No2 merlionXXです。


ではそのsheet2の表の4行目に挿入していきます。

Sub キーワード切取貼付03()
Dim r As Range, ur As Range
Dim rr As Long, x As Long
Dim rd(), v
x = Range("A" & Rows.Count).End(xlUp).Row
Set r = Range("A1", Range("A" & x)).Find(What:="CCC", LookAt:=xlPart, After:=Range("A" & x))
If r Is Nothing Then 'なかったら
MsgBox "ありません", vbCritical, "? ( ̄~ ̄;)う~ん  "
Exit Sub '終了
Else 'あったら
Do Until r Is Nothing '対象がなくなるまで
ReDim Preserve rd(rr) '動的配列を用意
rd(rr) = r.Address(0, 0) '対象セルアドレスを配列に格納
rr = rr + 1 'カウント
Sheets("Sheet2").Rows(4).Insert Shift:=xlDown
r.EntireRow.Cut Destination:=Sheets("Sheet2").Cells(4, 1) '行の貼り付け
Set r = Range("A1", Range("A" & x)).FindNext(r) '連続検索
Loop '繰り返し
For Each v In rd() '各配列要素を
If ur Is Nothing Then
Set ur = Range(v)
Else
Set ur = Union(Range(v), ur) 'ユニオンに
End If
Next v
ur.EntireRow.Delete 'ユニオンセルの属す行を一括削除
Set ur = Nothing
Set r = Nothing
End If
MsgBox rr & "件をSheet2にコピーしました。", vbInformation, " ( ̄ー ̄)v"
End Sub
    • good
    • 0
この回答へのお礼

ありがとうございます!
完璧です。
これから徐々に勉強していきたいと考えてますが、またなにかありましたら宜しくお願い致します。

お礼日時:2009/03/23 09:06

Sheet2のA列の最終行に追加する案で。



Sub try()
Dim r As Range

With Worksheets("Sheet1")
.Range("A1").AutoFilter 1, "CCC" '抽出する値 "CCC"
Set r = .Range(.Range("A2"), .Cells(Rows.Count, 1).End(xlUp)).SpecialCells(xlCellTypeVisible)

If r.Item(1).Row > 1 Then
r.EntireRow.Copy Worksheets("Sheet2").Range("A" & Rows.Count).End(xlUp).Offset(1)
r.EntireRow.Delete
End If

.AutoFilterMode = False
End With
End Sub

一例まで。
    • good
    • 0

ご提示のコードを回答した者です。


「貼り付けの部分を挿入に変更したい」という意味がわからないのですが・・・。
現在はSheet2の1行目から順に貼り付けていますが、そうでなく切り取った行と同じ行番号のSheet2にもって行くということ?
それとも切り取らずに同じ行番号のSheet2にもって行くということ?
あるいは????

この回答への補足

早速のお返事ありがとうございます。

sheet2にもsheet1と同じ形式の表があるので、そのsheet2の表の
4行目、もしくは表の最後に挿入したいと考えています。
貼り付けですと、元々あるデータが上書きされてしまうので・・
わかりづらい質問で申し訳ありませんが、宜しくお願いします。

補足日時:2009/03/22 14:13
    • good
    • 0

その行を削除してSheet2に挿入する作業を「マクロの記録」すればコードが解ります。



「エクセルVBA」でマクロの作成
http://kiyopon.sakura.ne.jp/vba/index.htm
    • good
    • 0
この回答へのお礼

早速のお返事ありがとうございます。

自分なりに勉強しながらやってみますが、正直むずかしいです・・

お礼日時:2009/03/22 14:20

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!