2025/12/19
【ExcelVBA】ボタン1つで完了タスクを別シートに移動

【ExcelVBA】ボタン1つで完了タスクを別シートに移動

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

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

※こちらで作成したファイルは、記事の最後にて配布しています。

このような、ボタン1つで完了タスクを別シートに移動する仕組みの実現方法について紹介します。

ExcelVBAレベル確認

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列の値を格納し、「未完了」シートのアクティブセルの行を削除しています。

ExcelVBAレベル確認

3. ボタンの作成

コードが完成したら、実行用のボタンを用意します。

ボタンは、[開発]タブの中の[挿入]から作成することができます。
ボタンには開発した機能「MoveTask」を割り当てます。


4. 完成

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

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

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

▼サンプルファイル▼

2025/12/16
【Excel】Python in Excelでクロス表を1行1データに変換

【Excel】Python in Excelでクロス表を1行1データに変換

「Python in Excel」という機能を使って、以下のように、クロス表(マトリックス表)を1行1データの表形式にリアルタイムで変換する方法について紹介します。


1. テーブルに変換

まずは、変換元の表(クロス表)をテーブルにします。
※テーブルにしなくても変換できますが、データの増減にも対応させる場合は、テーブルにした方がよいです。

※こちらでは、テーブル名を「売上表」にしています。


2. 数式の入力

次に、変換した表を表示する先頭のセルを選択し、「=py」と入力してTabキーを押します。

これで、セルにPythonのコードが入力できるようになります。

次に、以下のコードを入力します。

df=xl("売上表[#すべて]", headers=True)
df.melt(id_vars="商品名",var_name="月",value_name="数量")

以上のコードでは、テーブル(売上表)の内容をデータフレームに格納し、そのデータフレームの「melt」という機能を活用して、変換したい1行1データの表形式の情報を指定しています。

変換結果はデータフレームとして返ってくるため、「Ctrlキーを押しながらEnterキー」で確定すると、以下のように「DataFrame」と表示されます。

最後に、データフレームの内容をセルに展開するために、「数式バーの隣のアイコンを[Excelの値]に変更」もしくは「Ctrlキー+Shiftキー+Altキー+Mキー」を押します。

以上の手順で、以下のように1行1データの表形式で表示されます。

2025/12/12
【Excel】文章から特定の値を表形式で抽出

【Excel】文章から特定の値を表形式で抽出

以下のように、メールなどで送られてきた文章(B2:D16)から特定の値を表形式で抽出(F3:G7)する方法について紹介していきます。


簡易的な文章から表形式で抽出

元々の文章が以下の内容の場合、抽出対象(商品名:数量)以外にも不要な文章が含まれています。(赤文字)

〇〇様

お世話になっております。
今月の弊社商品在庫状況を以下の通りご報告いたします。


サウンドビー:5
タイムウォッチ:8
タブレットプロ:15
ビートスタジオ:6
ペンマスター:18

ご確認のほど、よろしくお願いいたします。
何かご不明点や追加のご要望がございましたら、お気軽にお知らせください。

そのため、まずは抽出対象の文章のみをシートに貼り付けて、そこから表形式になるように数式で抽出していきます。

文章を表形式で抽出する場合、抽出するルールを決める必要があります。
今回の場合は、以下のようなルールになります。

・「:」で列を区切る
・「(改行)」で行を区切る

このルール通りに抽出するためには、TEXTSPLIT関数を活用します。
実際に活用した数式は、以下になります。

=TEXTSPLIT(B2,":",CHAR(10))
// B2:抽出元の文章が入力されたセル
// ":":列の区切り文字
// CHAR(10):行の区切り文字(改行はCHAR関数を用いて表現)

上記の数式を抽出先の表の先頭セル(E3)に入力することで、以下のように表形式で抽出することができます。

とはいえ、メールなどの文書から特定の文章を毎回抽出するのは面倒です。
そのため、文章を全て貼り付けるだけで、対象の値を表形式で抽出する方法についても紹介していきます。


本文全体から対象のみを表形式で抽出

本文全体が以下のようにパターン化している場合(赤文字)は、簡単な数式を加えるだけで、対象の範囲の抽出までを自動で行うことができます。

〇〇様

お世話になっております。
今月の弊社商品在庫状況を以下の通りご報告いたします。


サウンドビー:5
タイムウォッチ:8
タブレットプロ:15
ビートスタジオ:6
ペンマスター:18

ご確認のほど、よろしくお願いいたします。
何かご不明点や追加のご要望がございましたら、お気軽にお知らせください。

まずは、この本文のままシートに貼り付けて、先ほどの数式で抽出してみます。

=TEXTSPLIT(B2,":",CHAR(10))

そうすると、以下の赤枠の箇所が不要になります。

抽出された表の上から5行、下から3行が不要になるので、この不要な行を数式で除外します。

表から不要な行を除外する場合、DROP関数を活用すると良いです。
実際に活用した数式は、以下になります。

=DROP(DROP(TEXTSPLIT(B2,":",CHAR(10)),5),-3)
// DROP(…,-3):「…」の末尾から3行を除外
// DROP(…,5):「…」の先頭から5行を除外

上記の数式を抽出先の表の先頭セル(E3)に入力することで、以下のように不要な行を除外した表形式で抽出することができます。

2025/12/09
【Excel】オンライン会議で使える拡大機能

【Excel】オンライン会議で使える拡大機能

オンライン会議などでExcel画面を共有しているときに、「文字が小さくて見えません」と言われたことはありませんか?
だからと言って、拡大しながら画面を操作するのは大変ですよね。

今回は、見せたい範囲を瞬時に拡大(ズーム)することができる機能を紹介します。

ExcelVBAレベル確認

選択範囲に合わせて拡大/縮小

見せたい範囲を瞬時に拡大するときに便利な機能、それは「選択範囲に合わせて拡大/縮小」です。

まずは、見せたい範囲を以下のように選択します。

特定の項目のみを見せたいときは、その列全体を選択すると良いです。

次に、[表示]タブから[選択範囲に合わせて拡大/縮小]を選択します。

そうすることで、以下のように選択がすべて収まる最大のサイズに調整されます。

他の範囲に移る際は、隣の[100%]を選択して、表示倍率を100%に戻すとよいです。

2025/12/07
【業務】収支グラフ付き!シンプルな家計簿アプリ

【業務】収支グラフ付き!シンプルな家計簿アプリ

#家計簿 #グラフ #アプリ

YouTubeで開く

収支グラフ付きの簡易的な「家計簿アプリ」の作成方法について解説しています。
誰でも簡単に、ノーコードで作成できる内容です。

※動画内の警告については、以下の動画の「5:56」あたりで解説しています。
>【業務】繰り返しタスクにも対応!タスク管理アプリ

00:00 はじめに
00:33 完成イメージ
01:13 表の作成
02:25 カテゴリーメニュー作成
05:00 収入・支出メニュー作成
10:20 収支グラフメニュー作成
11:47 外観設定変更
12:02 残高メニュー作成(IT予備メンバー限定)
12:11 まとめ


IT予備メンバーに加入して連携すると、メンバー限定動画に切り替わります。

※サイト内の限定動画です。

収支グラフ付きの簡易的な「家計簿アプリ」の作成方法について解説しています。
誰でも簡単に、ノーコードで作成できる内容です。

※動画内の警告については、以下の動画の「5:29」あたりで解説しています。
>【業務】繰り返しタスクにも対応!タスク管理アプリ

00:00 はじめに
00:33 完成イメージ
01:13 表の作成
02:25 カテゴリーメニュー作成
05:00 収入・支出メニュー作成
10:20 収支グラフメニュー作成
11:47 外観設定変更
12:02 残高メニュー作成(IT予備メンバー限定)
14:49 まとめ

2025/12/06
【便利】3段階の連動ドロップダウンリスト

【便利】3段階の連動ドロップダウンリスト

#TEXTJOIN #COUNTIF #IF #条件付き書式

YouTubeで開く

3段階で連動するドロップダウンリスト(プルダウン)の作り方について解説しています。

00:00 挨拶
00:28 完成イメージ
01:52 準備
02:24 作成(流れ)
03:43 作成(テーブル)
04:26 作成(数式)
13:15 作成(ドロップダウンリスト)
16:13 完成

▼準備ファイル▼

2025/12/05
【Excel】表の順番をローテーション

【Excel】表の順番をローテーション

以下のように、特定の項目の、要素の順番を回転させる方法について、2通りで解説していきます。

※こちらで作成したファイルは、記事の最後にて配布しています。


方法1

1つ目は、末尾のデータを切り取りして、先頭に挿入するという方法です。

まずは、末尾のデータを選択します。

次に、緑の枠の上にカーソルを移動させ、Shiftを押しながら先頭までドラッグすることで、簡単に切り取りと挿入を行うことができます。

しかし、この方法の場合、行数が多い表や複数項目を回転させる必要がある場合に、若干面倒になります。
そんな時は、次の方法が便利です。


方法2

2つ目は、並べ替え用の数値が入力された項目を用意し、その列を基準に並べ替えるという方法です。
具体的には以下のように、各行の行番号を常に表示し、末尾のみ「1」と表示されるような項目を数式で用意して、対象の項目のみを並べ替えます。

そのような特殊な項目は、以下の数式を入力することで実現できます。

=IF(ROW()=COUNTA($C$3:$C$17)+2,1,ROW())
// ROW()=COUNTA(…)+2:「数式を入力したセルの行番号」と「データの件数+2」が等しい
// 1:先ほどの条件を満たしたときに「1」を表示
// ROW():先ほどの条件を満たさない時に「数式を入力したセルの行番号」を表示

この数式を表の末尾までコピーすることで、各行の行番号、末尾のみ「1」と表示させることができます。

最後に、並べ替える対象の範囲(見出しを含む)のみを選択し、フィルターを設定します。

以上で、準備完了です。
番号が入力された列を基準に、フィルターボタンから昇順にすることで、データを回転することができます。

番号以外の項目に罫線を設定すると、表が見やすくなります。

▼サンプルファイル▼

ExcelVBAレベル確認

方法2の注意点

フィルターを設定せずに、[データ]タブから並べ替えしてしまうと、以下のように、先頭列も並べ替えられてしまいます。