以下は、タスク管理表です。

完了したタスクを選択して、「完了」ボタンを押すだけで、そのタスクが「完了」シートに移動します。

※こちらで作成したファイルは、記事の最後にて配布しています。
このような、ボタン1つで完了タスクを別シートに移動する仕組みの実現方法について紹介します。
1. 開発準備
まずは、「未完了」シートと「完了」シートを用意し、「完了」シートには空の表を用意します。

次に、[開発]タブから[マクロ]を選択し、表示された設定画面にて、開発する機能の名前を入力して、[作成]を選択します。
こちらでは、「MoveTask」と入力しています。

次に表示される以下の画面の「Sub ○○」から「End Sub」の間にコードを記述します。
「Option Explicit」は、VBEの設定内容次第では表示されません。「Option Explicit」についての解説はこちらでは省略します。

2. コードの記述
以下のコードを記述します。
Sub MoveTask()
Dim w1 As Worksheet
Dim w2 As Worksheet
Set w1 = Worksheets("未完了")
Set w2 = Worksheets("完了")
Dim r1 As Long
Dim r2 As Long
r1 = ActiveCell.Row
r2 = w2.Cells(w2.Rows.Count, "A").End(xlUp).Row + 1
w2.Range(w2.Cells(r2, "A"), w2.Cells(r2, "C")).Value = _
w1.Range(w1.Cells(r1, "A"), w1.Cells(r1, "C")).Value
w1.Rows(r1).Delete
End Sub
では、コードについて解説していきます。
Dim w1 As Worksheet
Dim w2 As Worksheet
Set w1 = Worksheets("未完了")
Set w2 = Worksheets("完了")
シート情報を割り当てる用の変数(w1とw2)を用意し、それぞれに「未完了」シートと
「完了」シートを割り当てています。
Dim r1 As Long
Dim r2 As Long
r1 = ActiveCell.Row
r2 = w2.Cells(w2.Rows.Count, "A").End(xlUp).Row + 1
数値を格納する用の変数(r1とr2)を用意し、「r1」にアクティブセル(現在選択している基準のセル)の行番号、「r2」に「完了」シートの表の末尾の行番号を格納しています。
「r2」について詳しく解説すると、「完了」シートのA列の末尾を選択し、Ctrlキーを押しながらカーソルキーの「↑」を押して止まった位置のセルの行番号に1を加えた数値を格納しています。

w2.Range(w2.Cells(r2, "A"), w2.Cells(r2, "C")).Value = _
w1.Range(w1.Cells(r1, "A"), w1.Cells(r1, "C")).Value
w1.Rows(r1).Delete
「完了」シートの表の末尾のA列からC列に、「未完了」シートのアクティブセルの行のA列からC列の値を格納し、「未完了」シートのアクティブセルの行を削除しています。
3. ボタンの作成
コードが完成したら、実行用のボタンを用意します。
ボタンは、[開発]タブの中の[挿入]から作成することができます。
ボタンには開発した機能「MoveTask」を割り当てます。

4. 完成
以上の手順で完成です。
完了したタスク(同じ行のいずれかのセル)を選択し、「完了」ボタンを押すことで、その行のタスクが「完了」シートに移動します。

注意点として、今回のコードには、移動対象のタスクの行の範囲を指定していません。
そのため、1行目を選択して「完了」ボタンを押してしまうと、見出しが移動してしまいます。

そのため、必要に応じて、コード内で「行番号が2以上のとき」などといった条件分岐を行うとよいです。
▼サンプルファイル▼














































