2025/03/15
【ex50】「複数行1データ」を「1行1データ」の表に変換

【ex50】「複数行1データ」を「1行1データ」の表に変換

#TOROW #WRAPROWS #INDEX #ROW

YouTubeで開く

「複数行で1データとしている表」を「1行1データの表」に変換する方法について解説しています。

00:00 挨拶
00:29 準備
00:52 方法1
02:42 方法2
06:46 プレゼントについて

▼準備ファイル▼

2025/03/14
【ExcelVBA】不要なシートの見出しの色を自動変更

【ExcelVBA】不要なシートの見出しの色を自動変更

使わなくなったシートの管理方法として、シート名の先頭に「_」を加えて、シート見出しの色をグレーにすることがあります。

毎月のように、この作業を行う場合、地味に面倒ですよね。

そこで今回は、シート名の先頭に_を加えるだけで、自動でシート見出しの色をグレーにする仕組みの実現方法について解説していきます。
※こちらで開発したファイルは記事の最後にて配布しています。


1. 開発準備

今回は、シート名の先頭に「_」を加えてから、他のシートに切り替えた時に、自動で対象のシート見出しの色をグレーにする仕組みを実現します。

そのような、シートが切り替わったタイミングに処理を自動で実行するには、「ブックモジュール」の「イベントプロシージャ」を活用します。
「ブックモジュール」は、[開発]タブから[Visual Basic]を選択し、[プロジェクトエクスプローラー]から[ThisWorkbook]をダブルクリックすることで表示することができます。

「Option Explicit」は、VBEの設定内容次第では表示されません。「Option Explicit」についての解説はこちらでは省略します。

次に、シートが切り替わったタイミングに処理が自動で実行される特殊なプロシージャ(イベントプロシージャ)を用意する必要があります。
そのためには、ブックモジュールの左上のリストから「Workbook」を選択します。

「Workbook」を選択すると、自動で「Workbook_Open」というプロシージャが表示されます。
このプロシージャは、ワークブック(ファイル)を立ち上げた時に処理が実行されるイベントプロシージャになります。

ただ、今回使用するイベントプロシージャは、シートが切り替わったタイミングに処理が実行されるものになります。
そのため、右上のリストから「SheetDeactivate」を選択します。

表示された「Workbook_SheetDeactivate」というプロシージャを活用します。
「Workbook_Open」というプロシージャに関しては削除して問題ないです。


2. コードの記述

以下のコードを記述します。

Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
    
    If Left(Sh.Name, 1) = "_" Then
        Sh.Tab.Color = RGB(180, 180, 180)
    End If
    
End Sub

では、コードについて解説していきます。

Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
    
    '省略
    
End Sub

「Workbook_SheetDeactivate」というプロシージャの引数の「Sh」に、アクティブでなくなったシートの情報が渡されます。

    If Left(Sh.Name, 1) = "_" Then
        Sh.Tab.Color = RGB(180, 180, 180)
    End If

対象のシート(Sh)の名前の先頭に「_」がある場合に、対象シートの見出しの色(Sh.Tab.Color)をグレー(RGB(180, 180, 180))にしています。


3. 完成

以上の内容で実現できます。
シート名の先頭に「_」を加えて他のシートを選択するだけで、シート見出しの色が自動でグレーになります。

▼サンプルファイル▼

2025/03/11
【Excel】入力した数値を0埋め4桁にする

【Excel】入力した数値を0埋め4桁にする

管理している番号を「0001」「0023」などのように0埋めの4桁表記にしたい場合、直接0を入力すると、勝手に先頭の0が消えてしまいます。

先頭の0を残すために、表示形式を「文字列」にして対応することもありますが、毎回0から入力するというのも手間になります。

そこで、簡単に0埋めの4桁に統一する方法を紹介します。


設定手順

1.対象のセル範囲を選択する

以下のように対象のセル範囲を選択します。

2.「セルの書式設定」を開く

選択した範囲の上で右クリックし、[セルの書式設定]を選択します。

3.表示形式を設定する

[表示形式]タブを選択し、[ユーザー定義]を選択します。
表示された[種類]のテキストボックスの中に「0000」と入力します。
※今回は0埋め4桁なので「0」を4つ並べていますが、必要に応じて桁数は調整してください。

4.設定を確定する

[OK]を選択することで設定が完了します。

ExcelVBAレベル確認

設定完了

以上の設定を行うだけで、今後は数値を入力すると同時に0埋めの4桁表記になります。

ただ、この設定は見た目を0埋め4桁にしているだけなので、実際の値には先頭の0は含まれません。

2025/03/08
【業務】万年ガントチャート(自動色付け+タスク名表示)

【業務】万年ガントチャート(自動色付け+タスク名表示)

#ガントチャート #Format #If #For #WorksheetFunction

YouTubeで開く

タスク名と期間を指定するだけで、自動でガントチャートを作成する機能の開発方法について解説しています。
一度開発することで、今後も継続的に活用することができます。

00:00 挨拶
00:23 完成イメージ
01:13 準備
01:42 作成(日付の表示切替)
07:18 作成(曜日の表示)
10:09 作成(セルの色付け)
16:46 作成(先頭にタスク名を表示)
19:23 作成(更新ボタン)
20:13 完成
21:53 プログラムの全体
26:11 プレゼントについて

▼準備ファイル▼

2025/03/07
【ExcelVBA】選択データの全項目を一括表示

【ExcelVBA】選択データの全項目を一括表示

以下のように、項目数の多い表の場合、対象データの内容を確認するのが大変だったりします。

そこで今回は、「対象データのいずれかのセルを選択してボタンを押すことで、全項目の値をメッセージボックスで表示することができる機能」の開発方法について解説していきます。

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

1. 開発準備

まず初めに、[開発]タブを選択し、[マクロ]を選択します。

表示された以下の画面にて、開発する機能の名前を入力し、[作成]を選択します。
こちらでは、「一覧表示」と入力しています。

次に表示される以下の画面の「Sub ○○」から「End Sub」の間にコードを記述します。

ExcelVBAレベル確認

2. コードの記述

以下のコードを記述します。

Sub 一覧表示()
    
    Dim r As Long
    r = ActiveCell.Row
    
    Dim c As Long, msgStr As String
    For c = 1 To 18
        msgStr = msgStr & _
            Cells(1, c).Value & ":" & _
            Cells(r, c).Text & vbCrLf
    Next c
    
    MsgBox msgStr
    
End Sub

では、コードについて解説していきます。

    Dim r As Long
    r = ActiveCell.Row

こちらで、選択されているセル(アクティブになっているセル)の行番号を取得して、変数rに代入しています。

    Dim c As Long, msgStr As String
    For c = 1 To 18
        msgStr = msgStr & _
            Cells(1, c).Value & ":" & _
            Cells(r, c).Text & vbCrLf
    Next c

表の先頭列(A列:1列目)から表の最終列(R列:18列目)までを1列ずつ繰り返し、変数msgStrに、「対象列の項目名:1行目のc列目」と「:」、「対象列の対象データ:r行目のc列目」、「改行コード」を加えています。
項目名は「.Value」に対し、データの値は「.Text」を使用しています。
通常、セルの値の取得は「.Value」で問題ないのですが、データの値に関しては表示形式が設定された見た目のままの文字列を取得するために「.Text」を使用しています。

【注意】

「.Text」はセルに表示されたままのテキストを取得します。
そのため、日付や金額のセルなどで列幅が狭く「####」と表示されている場合は、「####」のままで取得されてしまいます。

    MsgBox msgStr

最後に、繰り返し処理で作成した文字列(変数msgStr)をメッセージボックスで表示しています。


3. ボタンの作成

コードが完成しましたら、実行用のボタンを用意します。
ボタンは、[開発]タブの中の[挿入]から作成することができます。


4. 完成

以上の手順で完成です。
表示したいデータのいずれかのセルを選択して、作成したボタンを押すだけで、全項目の値をメッセージボックスで表示することができます。

▼サンプルファイル▼

2025/03/04
【Excel】マクロ不要!セルの内容でメール送信!

【Excel】マクロ不要!セルの内容でメール送信!

特定のシート上の表の内容を元にメールの本文を作成している場合などで、数式を用いて、シート内にメールの送信内容を用意することがあります。
その場合、手動でメールソフトを立ち上げてから、その送信内容をコピー&ペーストして送信している方が多いと思いますが、繰り返し作業の場合は、結構大変になります。

そんな時に、今回紹介する方法を活用することで、クリック1つでメールソフトが立ち上がり、宛先・件名・本文が自動入力された状態で送信画面を開くことができるようになります。


1. 改行コードの入力

まずは準備として、本文の改行したい位置に、以下の特殊コードを入力します。

・行内改行(同じ段落内で改行する場合):%0A
・段落改行(新しい段落を作成する場合):%0D%0A

入力する位置は同じセル内でなくても、以下のように同じ行のセルであれば問題ございません。


2. mailtoスキームの作成

次に、以下の構成の文字列になるように数式でセルの値を繋げます。

mailto:宛先?subject=件名&body=本文

セルの値と固定の文字列を繋げる場合は、「&」を活用します。
具体的には、以下のような数式になります。

="mailto:"&C2&"?subject="&C3&"&body="&CONCAT(C5:G11)
// CONCAT関数で本文の範囲の文字列を一括で結合しています。

3. ハイパーリンクの作成

最後に、先ほど数式で作成したmailtoスキームをハイパーリンクにしていきます。
ハイパーリンクにする場合は、HYPERLINK関数を活用します。
この関数の使い方は、以下になります。

=HYPERLINK(リンク先, [別名])
// リンク先:ハイパーリンクにしたい文字列を指定(URLやmailtoスキームなど)
// [別名]:表示する文字列を指定(省略時はリンク先に指定した文字列が表示される)

実際に活用した数式の例は、以下になります。

=HYPERLINK("mailto:"&C2&"?subject="&C3&"&body="&CONCAT(C5:G11),"メール送信")

4. 完成

以上の手順でハイパーリンクの完成です。
今後は、作成したハイパーリンクをクリックするだけで、以下のように本文などが入力済みの送信画面を立ち上げることができます。


5. 補足

HYPERLINK関数の引数に設定する文字列の長さは255文字以内にする必要があります。
そのため、長文を指定したい場合などは、ExcelVBAで開発するなどと別の方法で実現する必要があります。

ExcelVBAで実現する場合は、以下の記事が参考になります。
>【業務】自動メール送信