2022/12/07
【便利】登録データからリストで選択

【便利】登録データからリストで選択



YouTubeで開く

過去に登録したデータからドロップダウンリスト(プルダウン)で簡単に選択できる仕組みについて解説しています。
※こちらの機能を使わなくても、ショートカット(Alt+↓)でリスト表示を行うことができます。

こちらの機能の場合は、直感的にリストだと分かるように作成されています。
→ショートカット(Alt+↓)との違いについても解説しています。

また、重複のない各項目単位の登録一覧表の作成方法についても解説しています。

00:00 挨拶
01:23 完成イメージ
02:06 準備
02:39 作成(自動追加リスト)
12:00 完成
13:41 まとめ

▼準備ファイル▼

2022/12/05
【業務】シートの順番を好みに並べ替え

【業務】シートの順番を好みに並べ替え



YouTubeで開く

シートの順番を瞬時に昇順や降順、他、好みの順番に並べ替えできる「シート管理ツール」について解説しています。
複数のシートを扱うファイルを管理する際に役立ちます。

00:00 挨拶
00:06 完成イメージ
00:57 準備
01:27 作成(シート名取得関数)
07:54 作成(シート順番反映関数)
14:06 作成(取得・反映ボタン)
15:09 完成
16:12 プログラムの全体
21:03 まとめ

2022/12/03
【業務】指定した単位で時間を自動入力

【業務】指定した単位で時間を自動入力



YouTubeで開く

勤怠管理表などで使える、指定した単位で時間を自動入力する方法について解説しています。
現在の時間を「1分単位、15分単位、30分単位」で「切り上げ、切り捨て、四捨五入」して入力することができます。
入力方法は右クリックのみで行えるようになっています。

「5分単位、10分単位、1時間単位」が追加されたファイルも配布しています。

00:00 挨拶
00:25 完成イメージ
01:46 準備
02:15 作成(リスト)
03:15 実現方法
06:32 作成(時間入力関数)
15:21 作成(右クリックに割り当てる)
16:58 完成
18:12 プログラムの全体
22:41 まとめ

▼準備ファイル▼

2022/12/03
【ex19】マクロ実行中にブックを操作

【ex19】マクロ実行中にブックを操作

マクロ(VBA)を実行している時の待機時間の効率化として、ブック(Excelファイル)を操作する方法について解説してきます。




・マクロ実行中にブックを操作できない理由

通常、マクロ(VBA)を実行している最中にExcelを操作することができません。
ブックを複数立ち上げると、通常は同じExcelアプリケーション上で複数のブックが立ち上げられます。
マクロの大元のVBAはExcelアプリケーションに紐づいています。

そのため、マクロを実行してExcelアプリケーションが待機している時間に関しては、他のブックであっても操作することができません。




・マクロ実行中にブックを操作するには?

マクロ実行中にブックを操作する方法には以下のようなものがあります。

・DoEvents関数を用いる
・別のアプリを立ち上げる

順に解説していきます。




・DoEvents関数を用いる

前者の「DoEvents関数を用いる」に関しては、少し専門的な内容になります。

マクロを実行している最中は、CPU上でExcelアプリケーションの処理をしていることになります。
この処理が完了しない限り、Excelアプリケーションの他の処理は実行できません。

>>CPUについて調べる(Google)

Excelを操作するという処理は、このCPUの中の「Excelアプリケーション」にて行われます。
そのため、Excelアプリケーションがマクロ処理を行っている時は操作ができなくなります。

ではどのようにしたらExcelの操作ができるようになるのかというと、
Excelアプリケーションでマクロを実行している間のExcel操作を他の処理に割り当てるという方法です。
※具体的に言うと、オペレーティングシステムにて処理させる方法です。

それがDoEvents関数になります。

例えば、以下のマクロ実行させるとしばらくの間、Excelが操作できなくなります。

Sub test()
    
    For i = 1 To 100000
        Range("A1").Value = i
    Next i
    
End Sub

これはセルA1に1~100000を順番に入力するというプログラムです。
この中に以下のようにDoEvents関数を入れてみます。

Sub test()
    
    For i = 1 To 100000
        DoEvents
        Range("A1").Value = i
    Next i
    
End Sub

このようにして実行すると実行中にExcelの操作ができるようになります。
DoEventsが実行されるタイミングにExcelを操作した内容がオペレーティングシステムで処理されるようになります。

CPUのExcelアプリケーションとは別に、処理を割り込ませるイメージです。

Excelの操作が、DoEventsが実行されるタイミングで行われる必要があるため、下記のように記述した場合は、Excelの操作が出来ません。

Sub test()
    
    DoEvents
    For i = 1 To 100000
        Range("A1").Value = i
    Next i
    
End Sub

また、無理やり割り込んで操作をしているため、予期せぬエラーが起こる可能性があります。
特にセルに文字を書き込む処理などはエラーが起こりやすいです。

        Range("A1").Value = i

また、エラーが発生した場合は処理が中断されてしまいます。
そのため、エラーにより処理が中断されないようにする必要があります。
エラーの対策として、エラーが発生した場合に無視をして実行するという方法があります。

それが「On Error Resume Next」になります。
これが実行されたプロシージャに関しては、プロシージャが終了するまでエラーが無視され続けます。
もし途中でエラーを無視したくなくなった場合は「On Error GoTo 0」を実行すると無効になります。

「On Error Resume Next」を活用した例が以下になります。

Sub test()
    
    On Error Resume Next
    
    For i = 1 To 100000
        DoEvents
        Range("A1").Value = i
    Next i
    
End Sub

DoEventsを記述するとDoEventsの処理が増えるため、比較的、処理が遅くなります。
処理の遅延だけですと、GetInputState関数(Win32API)を使うという方法もありますが、問題点は遅延だけではなく、想定外のエラーが起こりやすくなるという点もあります。
そのため、こちらの方法に関して「マクロ実行中にExcelで別の作業をする」という目的での使用は推奨できません。




・別のアプリを立ち上げる

後者の「別のアプリを立ち上げる」に関しては、実行中のブックの操作ができません。
別のブックを操作する方法になります。

その方法のイメージは、以下の図のようになります。

別のExcelアプリケーションの立ち上げ方について2つ紹介します。




【1つ目の立ち上げ方法】

WindowsキーとRキーを同時に押して「ファイル名を指定して実行」を立ち上げます。
※Windowsマークのスタートボタンを右クリックして「ファイル名を指定して実行」を選択することでも立ち上げられます。

「ファイル名を指定して実行」が立ち上がりましたら、「excel /x」と入力してEnterもしくは「OK」を押します。
※「excel」と「/x」の間には半角スペースがあります。

これで別のExcelアプリケーションを立ち上げることができます。
後は、操作したいブックをこちらから開くことでマクロの実行中にExcelを操作することができます。




【2つ目の立ち上げ方法】

Excelアプリケーションを立ち上げているとタスクバーにExcelのアイコンが表示されているかと思います。

このアイコンを、ShiftキーとAltキーを押しながら左クリックすると以下のようなメッセージが表示されます。

「はい」を選択することで、別のExcelアプリケーションを立ち上げることができます。
後は、操作したいブックをこちらから開くことでマクロの実行中にExcelを操作することができます。

2022/11/30
【便利】ステータスバーにメモ機能追加 [アドイン]

【便利】ステータスバーにメモ機能追加 [アドイン]



YouTubeで開く

ステータスバーを有効活用できる「メモ機能」の開発方法について解説しています。
アドインの開発から設定方法まで解説しています。
アドインのため、一度設定することで、マクロ有効ブックでなくても常に実行できるようになります。

00:00 挨拶
00:34 完成イメージ
01:42 準備
02:03 作成(ステータスバーへのメモ機能)
13:54 アドイン設定
18:27 完成
19:10 プログラムの全体
23:45 まとめ

▼準備ファイル▼

2022/11/28
【便利】表の値を保持して『結合解除』

【便利】表の値を保持して『結合解除』



YouTubeで開く

セルの結合をしていると、フィルターでの並べ替えや絞り込みが出来なくなってしまいます。
フィルター操作をするため、結合を解除すると、先頭のセル以外は空白になってしまいます。

そこで今回の内容を活用すると、指定した範囲内のすべての結合が解除され、本来空白になるセルには、もともとの値が薄い色で入力されます。

その仕組みの開発方法について解説しています。

00:00 挨拶
00:47 完成イメージ
01:18 準備
01:27 作成(結合解除)
14:01 完成
14:39 プログラムの全体
17:01 まとめ

▼準備ファイル▼

2022/11/26
【業務】好みの単位で時間を計算

【業務】好みの単位で時間を計算

入力されている時間を好みの単位で計算する方法について解説しています。
好みの単位とは「切り捨て5分単位」や「切り上げ10分単位」などになります。
勤怠入力などで、切り捨てや切り上げが考慮されずに「Ctrl + :」などで入力されていたとしても数式により自動で単位を調整できます。
※「Ctrl + :」は現在の時間を入力するショートカットキーです。

こちらの内容に関して完成ファイルをメンバーページより配布していますが、記事を見ながら実践できるように準備ファイルも配布してます。

▼準備ファイル▼




・準備ファイル

こちらの表の「黄色とオレンジ色」で塗りつぶされたセルに数式を埋めていきます。




・表の説明

C列の時間を元にD~F列の値を求めていきます。
例えば、C3「5:32」に対してのD3は「5:30」になるような数式を入力をします。
11行目に関しては列ごとの合計時間を計算します。
合計時間に関しては、24時間を超える場合の表示形式の設定方法について解説していきます。




・作成(切り捨て5分単位)

日付や時間はシリアル値という数字で管理されています。
シリアル値は1日を[1]として、ある日を基準に数えた通し番号になります。
そのため小数部分が時間になります。

つまり、[0.5]は1日の半分になり、12時を表現しています。
ただ、[0.5]のままだと何時なのかが分かりにくいため、表示形式により分かりやすい見た目にしています。

準備ファイルのC3を選択して[ホーム]→[数値]を確認すると[ユーザー定義]などと表示されているかと思います。

ここを標準にするとC3の値が数字になります。

※内容が確認できたら、表示形式を元に戻します。
 「Ctrl + Z」で1つ前に戻すことができます。

ここまでの内容で、時間の実体が数字であることが分かったかと思います。
数字だということが分かれば、後は5分単位の場合は5分単位のシリアル値の倍数になる値(余りを除く)を求めることで「切り捨て5分単位」を求めることができます。

5分のシリアル値は1日が「24時間×60分」なので、「5/(24×60)」になります。
倍数になる値(余りを除く)を求める関数にFLOOR関数があります。

=FLOOR(数値,基準値) ※数値:対象の値、基準値:倍数

実際にD3に以下のような数式を入力します。

=FLOOR(C3,5/(24*60))

確定すると「0.229167」という数字が表示されます。
これが「切り捨て5分単位」のシリアル値になります。

あとは表示形式を設定します。
表示形式は「h:mm」で設定していきます。

表示形式についての詳しい説明は以下で解説しています。
・セルの表示形式の基礎から応用(メンバー限定)

表示形式を設定すると「5:30」と表示されます。

ちなみに、倍数という理屈を理解していただくため以下①のような少し複雑な式を作成しましたが、5分など時間で計算する場合は以下②のように表現することもできます。

=FLOOR(C3,5/(24*60))

=FLOOR(C3,"0:05")

あとは一番下まで反映させます。




・作成(切り上げ10分単位)

切り上げの場合はCEILING関数になります。
使い方はFLOOR関数と同じで、基準値(第2引数)に関してはシリアル値でも「”0:10″」でも実現できます。

=CEILING(C3,"0:10")

あとは表示形式を設定し、一番下まで反映させます。




・作成(四捨五入15分単位)

四捨五入の場合はMROUND関数になります。
使い方はFLOOR関数やCEILING関数同じで、基準値(第2引数)に関してはシリアル値でも「”0:15″」でも実現できます。

=MROUND(C3,"0:15")

あとは表示形式を設定し、一番下まで反映させます。




・作成(合計時間)

最後に合計時間を計算します。
時間は最初に解説した通り、シリアル値で表現されているため、通常の足し算やSUM関数で求めることができます。

それぞれの項目に関してSUM関数で求めていきます。
ここで小技ですが、複数セルにまとめて合計を求めたい時は、便利なショートカットがあります。

その方法は、合計を表示させたいセルを選択し、「[Shift] + [Alt] + [―]」を同時に押すだけです。
※表によっては正しい範囲でSUM関数が表示されない可能性があるので、その場合は、計算元のセルを含んだ状態で全体選択 (例の場合はC3~F11を選択) し、 「[Shift] + [Alt] + [―]」 を同時に押すと正しく計算されます。

必要に応じて中央揃えするといいかもです。

ただ、値を確認すると24時間を超える表示がないため、正しい値でないことが確認できます。

この原因は表示形式にあります。
合計の範囲を選択して表示形式のユーザー定義を確認すると「h:mm」と表示されているかと思います。

「h」では24時間を超える表示ができません。
ちなみに、「mm」に関しても60分を超える表示ができません。

通常の時間表記を超えて表示させたい場合は「[]」で囲む必要があります。
今回の場合は、「h」に関してのみ24時間を超えて表示させる必要があるため、「[h]:mm」と設定します。
そのようにすると24時間以上で表示させることができるようになります。

というような感じで今回の内容は以上です。
色々応用できるかと思うので、参考になれば幸いです。

2022/11/23
【便利】リストから選択された値の詳細を表示

【便利】リストから選択された値の詳細を表示



YouTubeで開く

ドロップダウンリストから選択した値の詳細がメモ(コメント)として追加される機能について解説しています。
「値の詳細を項目として追加すると邪魔になるけど、確認したい…」そんな時に便利な機能です。

00:00 挨拶
00:22 完成イメージ
01:27 準備
01:48 作成(テーブルとリスト)
04:20 作成(自動メモ追加)
21:35 完成
22:46 プログラムの全体
28:26 まとめ

▼準備ファイル▼

2022/11/19
【業務】フィルター機能の効率化

【業務】フィルター機能の効率化



YouTubeで開く

フィルター機能をよく使う場合、1つ1つの項目にフィルターを設定するのが大変です。
そこで、フィルターの設定画面を展開することなく、検索したいワードを指定のセルに入力するだけで抽出できる機能を開発しました。
その検索機能と、フィルターをリセットする機能について解説しています。

00:00 挨拶
00:46 完成イメージ
01:43 準備
01:57 作成(検索リスト)
04:48 作成(リセットフィルター)
17:32 作成(セットフィルター)
25:09 作成(実行ボタン)
27:24 完成
28:00 プログラムの全体
33:44 まとめ

▼準備ファイル▼

2022/11/18
【業務】空白行を自動でグループ化

【業務】空白行を自動でグループ化



YouTubeで開く

指定した範囲内の「空白行を自動でグループ化する」機能について解説しています。
グループは実行する度に更新されます。

00:00 挨拶
00:09 完成イメージ
00:55 準備
01:17 開発の流れ
02:28 作成(グループ解除)
02:46 作成(変数宣言・初期化)
07:30 作成(グループ化)
17:47 作成(ボタン)
18:10 完成
18:45 プログラムの全体
27:10 まとめ

2022/11/16
【3-14】ピボットテーブルの便利な機能

【3-14】ピボットテーブルの便利な機能



YouTubeで開く

ピボットテーブルを用いて個別集計シートを作成する方法と、スライサーとタイムラインの活用について解説しています。

00:00 挨拶
00:11 作成(ピボットテーブル)
00:51 作成(個別集計シート)
02:15 作成(テーブルからピボットテーブル)
03:54 作成(スライサー)
05:41 作成(タイムライン)
06:12 補足
06:37 まとめ

ピボットテーブルをVBAで自動更新する方法はこちら

▼準備ファイル・完成ファイル▼

2022/11/15
【ex18】Excelを直接開かずにマクロ実行

【ex18】Excelを直接開かずにマクロ実行

以下2点について順番に解説してきます。




1.マクロ(VBA)を実行させるVBSファイルとは

そもそもVBSファイルとは何なのかについて解説します。
VBSファイルとはプログラミング言語「VBScript」で書かれたファイルのことで拡張子は「.vbs」になります。

このVBとは「Visual Basic」のことでMicrosoft社が開発したWindows上で動かすためのプログラミング言語になります。
そのVisual Basicをベースに作られたのが「VBScript」になります。

>解説を動画で見る

VBSファイルはメモ帳などで簡単に作成することができます。
メモ帳で書いた内容を保存すると通常は「.txt」で保存されますが、こちらを「.vbs」に変更すれば完成です。

例えば、下記のExcelファイルの「Set_Time」を実行する方法について解説します。

では、VBScriptで記述する内容を確認します。

Const FILE_NAME = "C:\Users\…\ファイル名.xlsm"
Const PROC_NAME = "Set_Time"
Dim app
Set app = CreateObject("Excel.Application")

With app
     'Excel非表示
     .Visible = False
     Dim wb
     Set wb = .Workbooks.Open(FILE_NAME)
     .Run wb.Name & "!" & PROC_NAME
     'アラートを消す
     .DisplayAlerts = False
     wb.Save
     wb.Close

End With

app.Quit

基本的な書き方はVBAと同じになります。


「Const FILE_NAME = “C:\Users\…\ファイル名.xlsm”」で対象のファイルを指定しています。
「Const PROC_NAME = “Set_Time”」で実行したいプロシージャ名を指定しています。
「Dim app」でappという変数を用意し、「Set app = CreateObject(“Excel.Application”)」でExcelを操作するためのオブジェクトを用意します。


次に変数appを使ってExcelを操作していきますが、app.Visibleやapp.Runなどとappを何度も書くのは大変なのとまとまりがないため、「With app」でappを省略できるようにしています。
WithからEnd Withの中で「.」から始まっているものがappが省略されているものになります。


「.Visible = False」でExcelを非表示にしています。
「Dim wb」でwbという変数を用意し、「Set wb = .Workbooks.Open(FILE_NAME)」でFILE_NAMEに設定したExcelファイルを開いてExcelファイルの情報をwbに設定しています。
「.Run wb.Name & “!” & PROC_NAME」でPROC_NAMEに設定したプロシージャを実行させています。
実行させるプロシージャは、「(Excelファイル名)!(プロシージャ名)」で指定します。


残りは閉じる操作になります。
「.DisplayAlerts = False」で「…を保存しますか?」の確認画面を非表示にしています。
「wb.Save」でExcelファイルを保存しています。保存する場合は、「…を保存しますか?」が表示されないため、上記の「.DisplayAlerts = False」を省略しても問題ありません。
「wb.Close」でExcelファイルを閉じています。

一連の流れが完了したため、「app.Quit」でExcelアプリを終了させて完了です。


こちらでVBSファイルとテスト用のExcelファイルを配布しています。




2.Excelファイルを時間になったら起動させる方法とは

今回は「タスクスケジューラ」を活用した方法について解説していきます。

こちらを活用することにより決まった時間にExcelファイルを立ち上げることができます。
また「1.マクロ(VBA)を実行させるVBSファイルとは」で解説したVBSファイルを設定することで決まった時間にマクロを実行させることもできます。

>解説を動画で見る

まずは、Windowsのスタートメニューにて「タスク スケジューラ」と検索し、アプリ「タスク スケジューラ」を開きます。

タスクスケジューラが立ち上がりましたら、「タスクの作成」より作成できます。
ただ、既存のタスクの中に追加で作成したものが混ざってしまうと管理がややこしくなってしまうので、新しいフォルダを用意していきます。
まずは「タスク スケジューラ ライブラリ」を選択します。

中央のモザイクがかかっている場所が「タスク スケジューラ ライブラリ」のフォルダ内にあるタスク一覧になります。
今回は新しいフォルダで作成していくので「新しいフォルダー…」を選択します。
→フォルダ名の入力画面が表示されましたら、好みの名前を設定します。
※こちらでは「TEST」という名前を設定しています。

フォルダ名の設定して「タスク スケジューラ ライブラリ」を展開すると作成したフォルダが見つかります。
作成したフォルダを選択して「タスクの作成」を選択します。

以下の画面が表示されましたら、好みの名前を設定します。
※他の諸々の設定については今回は割愛します。

次に「操作」を設定します。
ここで「新規」を選択し「Excelファイルを開く」という内容を設定します。
※VBSファイルの場合もここで設定します。

以下の画面で対象のファイルを選択し「OK」を選択します。

以下のように設定できましたら、「トリガー」を設定します。
※トリガーとは操作をするキッカケのようなものになります。

ここで「トリガー」を選択し「新規」を選択します。

ここでどのタイミングで実行するのかを設定します。
こちらでは「1回」のみ実行で指定した日時に実行する設定をしています。
設定できましたら「OK」で保存します。

これで設定が完了です。
後は時間になれば自動的に設定した内容が実行されます。

使い終わったタスクは、必要に応じて編集や削除するといいです。