ここから本文です

エクセルのマクロで特定の行を別シートに移す方法について

このエントリーをはてなブックマークに追加

質問者

addressghost1145さん

2011/7/218:10:57

エクセルのマクロで特定の行を別シートに移す方法について

救援物資を被災者に送るボランティアをしていて、エクセルを活用しています。より効率的にデータを管理したいので皆様の知恵を貸してください。
エクセルのマクロについてお尋ねします。
Iの列のセルに「発送済み」と入力したと同時にその行が切り取りされて別シートの1行目に挿入して貼り付けされるように、もしくはIの列のセルに「発送済み」と入力されている行を後でまとめて切り取りして別シートの1行目に挿入して貼り付けされるようにしたいのですが、とのようなマクロを組めばよいのでしょうか?

説明が下手で申し訳ありませんが回答をお願いします。

閲覧数:
11,790
回答数:
5
お礼:
50枚

違反報告

ベストアンサーに選ばれた回答

risuto83さん

2011/7/223:19:31

簡単に書くと、こんな感じでしょうか。
後でまとめてコピーするマクロです。

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/3 22:24:36

感謝 皆様、親切に回答してくださりありがとうございます。どなたをベストアンサーにするか迷ったのですが、risuto83さんの方法を使わせていただいたのでrisuto83さんをベストアンサーにします。
本当に助かりました。また明日から救援活動を頑張ります!
ありがとうございました。

ちょい足しを取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル
  • このエントリーをはてなブックマークに追加
簡単にみんなで作るショート動画アプリ Yahoo!Chocotle for Android(無料)
ベストアンサー以外の回答
1〜4件/4件中
並び替え:回答日時の
新しい順
|古い順

db18gouさん

2011/7/222:19:25

すでに、回答は出ていますが、老婆心ながら、抽出したあとは、元データに「転記済」などの値を入れておいた方が余計な混乱を回避できるように思います。

ちょい足しを取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

my_offiseさん

編集あり2011/7/221:30:05

そうですか・・・ボランティアを

基本操作のフィルターで達成しますよ。

データ入力範囲を 範囲指定して → オートフィルタです

当然 キーは 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)を実行してくださいな。

ちょい足しを取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

グレード

カテゴリマスター

ja7awuさん

編集あり2011/7/220:03:58

> セルに「発送済み」と入力したと同時にその~
「同時に」では、操作性がよくないと思います。
ここでは、操作性を考慮し「発送済み」と入力したらそのセルを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

ちょい足しを取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

edia_tuneさん

2011/7/218:53:06

>入力したと同時に
は難しいと思うので、
>Iの列のセルに「発送済み」と入力されている行を後でまとめて切り取りして別シートの1行目に挿入して貼り付け
こっちで。

といっても、私にはコードを書けるほどのスキルはないので、「こういう操作をマクロ記録して実行すれば良いのでは?」というご提案です。

記録スタート

表全体にオートフィルタを設定する

I列を「発送済み」で絞り込む

絞り込まれた表をまるごと選択(Ctrl+Shift+: …だったかな)

コピー

別シートに貼り付け

元シートのフィルタ解除

ちょい足しを取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

ID/ニックネームを選択し、「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問や知恵ノートは選択されたID/ニックネームのMy知恵袋で確認できます。

ほかのID/ニックネームで利用登録する