解決済みのQ&A
エクセルのマクロで特定の行を別シートに移す方法について
エクセルのマクロで特定の行を別シートに移す方法について
救援物資を被災者に送るボランティアをしていて、エクセルを活用しています。より効率的にデータを管理したいので皆様の知恵を貸してください。
エクセルのマクロについてお尋ねします。
Iの列のセルに「発送済み」と入力したと同時にその行が切り取りされて別シートの1行目に挿入して貼り付けされるように、もしくはIの列のセルに「発送済み」と入力されている行を後でまとめて切り取りして別シートの1行目に挿入して貼り付けされるようにしたいのですが、とのようなマクロを組めばよいのでしょうか?
説明が下手で申し訳ありませんが回答をお願いします。
-
- 質問日時:
- 2011/7/2 18:10:57
-
- 解決日時:
- 2011/7/3 22:24:36
-
- 回答数:
- 5
-
- お礼:
- 知恵コイン
- 50枚
-
- 閲覧数:
- 5,259
-
- ソーシャルブックマークへ投稿:
- Yahoo!ブックマークへ投稿
- はてなブックマークへ投稿
- (ソーシャルブックマークとは)
ベストアンサーに選ばれた回答
risuto83さん
簡単に書くと、こんな感じでしょうか。
後でまとめてコピーするマクロです。
Sub hassozumi()
Dim i, LastRow As Long
LastRow = Cells(Rows.Count, 9).End(xlUp).Row
For i = 1 To LastRow
If Cells(i, 9) = "発送済み" Then
Rows(i).Copy Sheets("Sheet2").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0) 'Sheet2は貼り付けしたい任意のシート名に変えて下さい
End If
Next i
End Sub
もし、コピーじゃなくて、切り取り(つまり元のシートからは該当行を削除)する場合は、
Rows(i).Copyのところを、Rows(i).Cutにすればいいですよ。
コードの挿入方法は下記を参考に
http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_tejyun.html
あとは、ボタンを作成して登録すればいいと思います。
- 回答日時:2011/7/2 23:19:31
このQ&Aはまだナイス!されていません。
役に立ったと思った回答に、ナイス!してみよう!
ベストアンサー以外の回答
(4件中1〜4件)
- 並べ替え:回答日時の
- 新しい順
- |
- 古い順
db18gouさん
すでに、回答は出ていますが、老婆心ながら、抽出したあとは、元データに「転記済」などの値を入れておいた方が余計な混乱を回避できるように思います。
- 回答日時:2011/7/2 22:19:25
そうですか・・・ボランティアを
基本操作のフィルターで達成しますよ。
データ入力範囲を 範囲指定して → オートフィルタです
当然 キーは I列の「発想済み」
フィルタの結果範囲を 任意のシートにコピーしてください。
データ元は記録として残ったままですから。
簡単なマクロなら? この操作は単純ですから・・・フィルタを使ってみます
Alt + F11 ( Alt キーを押しながら F11) → 挿入 標準モジュール
右空白ウィンドウに 以下前文コピー → ウィンドウを閉じる
................................. ↑全文 まちがっちった
Sub Filter_Copy()
Dim i As Long
Worksheets("コピー先のシート名").Cells.ClearContents
With Worksheets("入力データシート名").Range("a1")
.AutoFilter Field:=9, Criteria1:="発想済み"
.CurrentRegion.SpecialCells(xlVisible).Copy _
Worksheets("コピー先のシート名").Range("a1")
.AutoFilter
End With
For i = 1 To 9
Worksheets("コピー先のシート名").Columns(i).ColumnWidth = _
Worksheets("入力データシート名").Columns(i).ColumnWidth
Next i
End Sub
好みのタイミングで Alt + F8 (Filter_Copy)を実行してくださいな。
- 編集日時:2011/7/2 21:30:05
- 回答日時:2011/7/2 21:26:59
ja7awuさん
> セルに「発送済み」と入力したと同時にその~
「同時に」では、操作性がよくないと思います。
ここでは、操作性を考慮し「発送済み」と入力したらそのセルをWクリックすると指定したシートに移動します。
ある程度 纏まってからWクリックすると良いでしょう。
双方のシートの一行目は、「見出し」とします。
「発送済み」でも「発送済」でも「発送済」の文字列が何処かに入っていれば転送します。
元のデータがあるシートのモジュールに下記コードを記述します。
一応設定手順を書いておきます。ご存知の場合は、読み飛ばしてください。
・使用しているシートのシート名タブを右クリックして「コードの表示」を
指定し、開いたコードウィンドウに下記コードをコピーして貼り付けます。
・Alt+ Q (または、右上隅の×)でウィンドウを閉じ、シートに戻ります。
・メニューから[ツール]-->[マクロ]-->[セキュリティ]で「セキュリティレベル」を「中」にして[OK]します。 (Ver.Excel 2003)
Excel2007~のときは、メニューが違うと思いますが、セキュリティレベルを「警告を表示してすべてのマクロを無効」にします。
・以上で設定完了です。
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim Rw As Long
Dim Cnt As Long
Const ShName = "Sheet2" ' <-- 移動先シート名
If InStr(Target.Value, "発送済") > 0 Then
Cancel = True
For Rw = Cells(Rows.Count, 9).End(xlUp).Row To 2 Step -1
With Cells(Rw, 9)
If InStr(.Value, "発送済") > 0 Then
.EntireRow.Cut
Sheets(ShName).Rows(2).Insert Shift:=xlDown
.EntireRow.Delete
Cnt = Cnt + 1
End If
End With
Next
MsgBox Cnt & " 件のデータを移動しました。", vbInformation
End If
End Sub
- 編集日時:2011/7/2 20:03:58
- 回答日時:2011/7/2 19:42:22
>入力したと同時に
は難しいと思うので、
>Iの列のセルに「発送済み」と入力されている行を後でまとめて切り取りして別シートの1行目に挿入して貼り付け
こっちで。
といっても、私にはコードを書けるほどのスキルはないので、「こういう操作をマクロ記録して実行すれば良いのでは?」というご提案です。
記録スタート
↓
表全体にオートフィルタを設定する
↓
I列を「発送済み」で絞り込む
↓
絞り込まれた表をまるごと選択(Ctrl+Shift+: …だったかな)
↓
コピー
↓
別シートに貼り付け
↓
元シートのフィルタ解除
- 回答日時:2011/7/2 18:53:06
あなたにおすすめの解決済みの質問
- excel vbaのマクロの構文について質問します。excelで、オートフィルタで絞り込んだものを別シートにコ...
- excelの構文について質問です。オートフィルタで条件を絞り込んだ後、コマンドボタンでデータを抽出して...
- エクセルで蓄積したデータ。シートに振り分けるマクロについて質問させて頂きます。エクセルのsheet1に...

質問した人からのコメント
本当に助かりました。また明日から救援活動を頑張ります!
ありがとうございました。