2024/03/11
【Excel】姓と名の間に半角スペースの入力を強制

【Excel】姓と名の間に半角スペースの入力を強制

以下のような名前を入力する項目に、「姓と名の間に半角スペースを入力する」というルールを設けているとします。

このルールを入力時に強制する設定方法について解説していきます。

特定の条件を満たしている値のみの入力しか許可しないようにするには、「データの入力規則」を活用します。

まずは、データの入力規則に設定する条件式を考えていきます。
条件式では、「姓と名の間に半角スペースが入力されている場合」という内容を表現する必要があります。

特定の文字に半角スペースが含まれているのかどうかを確認するには、COUNTIF関数を活用します。

=COUNTIF(範囲, 検索条件)
// 指定した範囲の中で検索条件を満たしている数を返す

「半角スペースを含む」という条件を言い換えると「半角スペースの左右に何かしらの文字が入力されている」とも表現できます。
この「何かしらの文字」というものは、ワイルドカードを使用することで表現することができます。

・何かしらの文字(1文字):?
・何かしらの文字(0文字以上):*

ワイルドカードを使用して、「?_?」(_は半角スペース)と表現すると、「半角スペースの左右に何かしらの1文字が入力されている」という意味になります。

ただ、左右には苗字や名前が入るため、1文字とは限りません。
そのため、「0文字以上」という条件を加えて、「*?_?*」(_は半角スペース)と表現することができます。

実際にCOUNTIF関数で表現した例が以下になります。

=COUNTIF(B3,"*? ?*")

このように、半角スペースが含まれているセルに対してのみ、「1」と表示することができました。


では、この式を「データの入力規則」にて設定していきます。

対象の範囲を選択し、[データ]タブの中の[データの入力規則]を選択します。

表示された設定画面にて、[入力値の種類]を「ユーザー定義」にし、[数式]に先ほどの数式を入力します。

=COUNTIF(B3,"*? ?*")
// B3はアクティブセル(他の選択範囲には相対参照で反映される)

必要に応じて、[エラーメッセージ]タブにて、エラーメッセージの設定をすると良いです。

以上の設定により、設定した範囲に関しては、半角スペースの入力がない場合に警告が表示され、入力ができなくなります。

※データの入力規則で設定した入力制限は、セルへの値の貼り付けには対応しておりません。そのため、この設定は直接入力される場合に関してのみに制限がかかります。

2024/03/08
【Excel】SORTBY関数で項目を好みの順番にする

【Excel】SORTBY関数で項目を好みの順番にする

SORTBY関数を用いて項目を好みの順番に並べ替える方法について解説していきます。

まずは、SORTBY関数について解説していきます。

SORTBY関数は、表を並べ替える関数になります。

=SORTBY(配列, 基準配列1, [並べ替え順序1], [基準配列2, 並べ替え順序2], … )
// 配列:対象の表
// 基準配列1:並べ替えたい基準
// [並べ替え順序1]:基準配列1の順序を指定(1=昇順, -1=降順)※省略時は昇順
// [ ]に囲まれている引数は省略可能

例えば、以下の左の表に関して、「性別」の項目を基準に昇順にする場合は、以下のような数式になります。

=SORTBY(B3:E12,D3:D12)

「性別」の項目を基準に降順にする場合は、以下のような数式になります。

=SORTBY(B3:E12,D3:D12,-1)

また、[基準配列2, 並べ替え順序2]以降の引数を設定することで、複数の項目を基準に並べ替えることができます。
例えば、先ほどの結果に加えて、「生年月日」の項目を昇順する場合は、以下のようになります。

=SORTBY(B3:E12,D3:D12,-1,E3:E12,1)

次に、本題の項目の並べ替えです。

SORTBY関数は、列方向の並べ替えにも対応しています。
列方向に並べ替える場合は、基準配列の引数に横向きの範囲を指定します。

例えば、以下の左の表のように、項目名の上に数値を入力することで、その数値を基準に並べ替えることができます。

=SORTBY(B2:E12,B1:E1)

このように項目を好みの順番にすることができます。
ただ、表の上に「1,3,2,4」などの数値を入力したくないこともあるかと思います。
そのような場合に関しても、好みの順番に並べ替える方法があります。


表の上に「1,3,2,4」などと直接入力しない場合は、『配列定数』を活用します。
配列定数を用いて、「1,3,2,4」を参照する場合と同じ値を表現します。

配列定数の活用例は以下になります。

={1,3,2,4}
// 配列定数として列方向の値を表現する場合は、「{ }」で囲み、「,」区切りで値を指定する

ちなみに、行方向の値を表現する場合は、「;」区切りにします。

={"あ";"い";"う";"え";"お"}

「,」と「;」を組み合わせることで、表を表現することもできます。

={1,"あ";2,"い";3,"う";4,"え";5,"お"}

配列定数を用いることで、以下のように表現することができます。

=SORTBY(B2:E12,{1,3,2,4})

FILTER関数を用いて、一部のデータを抽出した後に、項目の順番を並べ替えたい場合は、SORTBY関数と組み合わせると良いです。
先ほどの表から「性別」が「男」のデータのみを抽出した例が以下になります。

=SORTBY(FILTER(B3:E12,D3:D12="男"),{1,3,2,4})

SORTBY関数についての詳しい解説は以下になります。

>解説動画

FILTER関数についての詳しい解説は以下になります。

>解説動画

2024/03/06
【Excel】日付を用いた一意の番号を生成

【Excel】日付を用いた一意の番号を生成

以下の「管理No」の項目のように、日付を用いた一意の番号を数式のみで生成する方法について解説していきます。
このような番号は、請求書などの書類の管理番号として活用できます。

今回生成する管理番号は、以下のような法則があります。

YYYYMMDD-(今までに存在している同じ日付の数)
// YYYYMMDD:年4桁、月2桁、日2桁

まずは、「日付」の項目から「YYYYMMDD」の形式で日付を取り出す方法について解説していきます。

日付を好みの形式に変換して取り出すには、TEXT関数が便利です。

=TEXT(値, 表示形式)
// 値に指定した表示形式を適用して文字列として表示する

「YYYYMMDD」の形式を表示形式の書式記号で表現する場合は「yyyymmdd」になります。
実際に活用した例が以下になります。

=TEXT(C3,"yyyymmdd")

次は、先ほどの値に、今までに存在している同じ日付の数を追加していきます。
特定の値が入力されているセルの数を求めるには、COUNTIF関数が便利です。

=COUNTIF(範囲, 検索条件)
// 指定した範囲内で検索条件を満たすセルの数を表示する

実際に、今回の表に活用する場合は、範囲を自身のセルの行を含む、それよりも前の範囲として指定する必要があります。
数式のコピーのみで全体に入力する場合は、絶対参照と相対参照を意識する必要があります。

実際に、今までに存在している同じ日付の数を求めた例が以下になります。

=COUNTIF($C$3:C3,C3)
// 範囲の開始の位置に関しては、固定するため絶対参照にする
// この数式をセルB3に入力し、残りの範囲にコピーする

※数式の結果に「1900/1/1」などが表示される場合は、表示形式を「標準」に戻してください。


最後に、TEXT関数の内容とCOUNTIF関数の内容を組み合わせます。
2つの結果を結合するには、「&」を活用します。

=TEXT(C3,"yyyymmdd")&COUNTIF($C$3:C3,C3)

ただ、この状態ですと、数値が並んでいて若干見づらいため、日付と番号の間に「-」を加えます。
「-」を加える場合は、①「TEXT関数の表示形式にて加える」もしくは②「「-」を別で直接加える」という方法があります。

=TEXT(C3,"yyyymmdd-")&COUNTIF($C$3:C3,C3)

=TEXT(C3,"yyyymmdd")&"-"&COUNTIF($C$3:C3,C3)

ちなみに、TEXT関数の引数の「yyyymmdd」を「yymmdd」にすることで、以下のようにも表現できます。

=TEXT(C3,"yymmdd-")&COUNTIF($C$3:C3,C3)

一意の管理番号を割り当てる際に、今回のような数式が活用できるかと思います。

2024/03/04
【Excel】日付を和暦で表示する

【Excel】日付を和暦で表示する

以下のように、日付を和暦に変換する方法について解説していきます。

まず初めに、和暦にしたい対象のセルを選択します。

次に、[ホーム]タブの中の表示形式の設定から[その他の表示形式]を選択します。

※選択しているセルの上で右クリックし、[セルの書式設定]からでも同じ画面に遷移できます。

以下の画面が表示されましたら、[日付]を選択します。

ただ、この中には和暦の表示がありません。
和暦を設定するには、[カレンダーの種類]から[和暦]を選択する必要があります。

選択することで、和暦が候補に表示されるようになります。
この中の好みの種類を選択することで、表示を和暦に変換させることができます。

変換した際に「######」と表示される場合は、列幅が足りていないため、列幅を広げる必要があります。


ちなみに、[1年を元年と表記する]という設定にて、元年の表示形式を変えることができます。

また、「05月02日」のように0埋めにしたい場合など、細かな表示を設定したい場合は、[ユーザー定義]にて直接指定します。

設定する書式記号は、以下のようなものになります。

2024/03/01
【Excel】更新箇所を自動で色付け

【Excel】更新箇所を自動で色付け

表の更新したセルを自動で色付けする設定方法について解説していきます。

このようなことは、条件付き書式を活用することで実現できます。
条件付き書式とは、「特定の条件を満たしたセルにだけ特定の書式を設定する」という特殊な書式になります。

前半にお伝えする方法で実現は出来ますが、1点問題点があります。
後半に、その問題点を解決する方法について解説していきます。


・設定手順

まず初めに、色付けしたい対象のシートを複製します。
こちらでは、複製したシートに「BK」という名前を設定しています。

複製することができましたら、色付け対象のシート「顧客管理」を選択し、色付け対象のセルを選択します。
こちらでは、セルA1を基準にA列からE列を全体選択しています。

選択することができましたら、[ホーム]タブの中の[条件付き書式]から[新しいルール]を選択します。

条件付き書式の設定画面にて、[ルールの種類…]を[数式を使用して、…]にし、以下の数式を入力します。

=A1<>BK!A1

数式の初めの「=」は、数式の開始の意味であるため、入力するものだと思っていただければと思います。
「A1<>BK!A1」は、設定しているシートのセルA1とBKシートのセルA1が等しくないという意味になります。

この時のセルA1とは、選択した時の基準のセルになります。
こちらでは、セルA1を基準に選択しているため、セルA1を基準とした数式を入力しています。

他のシートは、「シート名!」で指定します。
シート名によっては、「’シート名’!」とシングルコーテーションで囲む必要があるものもあります。
また、直接手入力すると入力を間違える可能性もあるため、「=A1<>」まで入力した後に、該当するシートのセルA1を直接選択して入力するのが良いかと思います。

ただ、「=A1<>BK!$A$1」と参照に「$」が表示され、絶対参照になってしまいます。
こちらで設定した数式は、選択範囲の他のセルに反映する際に、相対的に変化させる必要があるため、「$」は外す必要があります。

数式の入力ができましたら、[書式]を選択し、好みの書式を設定します。
こちらでは、[塗りつぶし]タブの中から黄色を選択しています。

Excel本紹介

以上の設定を行うことで、セルの値を変更すると同時に、そのセルを自動で色付けすることができます。

ただ、初めにお伝えした通り、1点問題点があります。
それは、全角文字と半角文字を正しく判定できないというところです。
先ほどの画像のように、「A」から「B」に変更した場合は色付けされますが、「A」から「a」に変更した場合は色付けされません。

では次に、この原因と対策について解説していきます。

・原因と対策

この原因は、条件付き書式に設定した「=A1<>BK!A1」という数式の「<>」にあります。
「<>」は等しくないという意味を表す記号ですが、大文字と小文字の違いを正しく判定することができません。

大文字と小文字の違いを判定するには、EXACT関数を活用します。
ただ、EXACT関数は、一致した場合にTRUEを返す関数になるため、今回の目的とは逆になってしまいます。
そのため、NOT関数を活用して、値を反転させる必要があります。

=NOT(EXACT(A1,B1))

このように、EXACT関数では、大文字と小文字の違いを正しく判定することができます。
ただ、欠点として、「文字列の数字」と「数値」を正しく判定することができません。

そのため、「<>」と「EXACT」の両方を活用し、「いずれかがTRUEの場合は一致しない」と判断する数式を作成します。
そのような数式は、以下のように表現できます。

=OR(A1<>B1,NOT(EXACT(A1,B1)))

条件付き書式に設定する数式に関しても、同じように編集します。
すでに設定した条件付き書式を修正する場合は、[条件付き書式]の中の[ルールの管理]を選択します。

表示された画面より、編集したい設定内容を選択し、[ルールの編集]を選択します。
設定した内容が表示されない場合は、[書式ルールの表示]の[現在の選択範囲]という設定を変更することで表示されるかと思います。

次の画面にて、以下の数式に変更して確定します。

=OR(A1<>BK!A1,NOT(EXACT(A1,BK!A1)))

以上の設定で、小文字と大文字に関しても対応することができます。


更新したシートの値を複製したシート「BK」に貼り付けることで、色付けをリセットし、シートを再利用することができます。

2024/02/28
【Excel】表のデータ行や項目の位置を移動する

【Excel】表のデータ行や項目の位置を移動する

表のデータを移動させる際に、対象のセルを選択してドラッグしてしまうと、以下のように穴が空いてしまいます。

実は、このようなセルの移動を簡単に行う方法があります。
その方法について解説していきます。

その方法とは、移動対象のセルを選択した後に、Shiftキーを押しながらドラッグになります。
Shiftキーを押しながらドラッグすることで、以下のように表示が切り替わります。

この状態で、マウスのクリックを離すことで、元のデータを切り取った形で移動することができます。

また、移動先に関しても挿入されているため、データの間に移動することもできます。

項目の移動に関しても簡単に行えます。

Excel本紹介

注意点として、別の列に移動させる場合は、移動元が空欄になってしまいます。

列の移動に関しても同様です。
列の移動で、別の行に移動させる場合は、移動元が空欄になってしまいます。

2024/02/26
【Excel】表記を統一する際に便利な関数7選

【Excel】表記を統一する際に便利な関数7選

以下のように、同じ内容を指す値でも異なった値が入力されている表を見かけることがあります。

このような値が存在すると、数式を使って正しく集計することが少し困難になります。

ということで、こちらでは、表記を統一する際に便利な関数を7つ紹介していきます。
今から紹介する関数を用いて、表記を統一した項目を作成しておくと、集計がしやすくなります。

記事の最後に、7つの関数をまとめた表を用意しています。

1.全角文字を半角文字に変換するASC(アスキー)関数

=ASC(文字列)
// 文字列:変換対象の文字列
=ASC(B5)

2.半角文字を全角文字に変換するJIS(ジス)関数

=JIS(文字列)
// 文字列:変換対象の文字列
=JIS(B5)

3.英字を大文字に変換するUPPER(アッパー)関数

=UPPER(文字列)
// 文字列:変換対象の文字列
=UPPER(B5)

4.英字を小文字に変換するLOWER(ロウワー)関数

=LOWER(文字列)
// 文字列:変換対象の文字列
=LOWER(B5)

5.英字の先頭のみを大文字に変換するPROPER(プロパー)関数

=PROPER(文字列)
// 文字列:変換対象の文字列
=PROPER(B5)

6.不要なスペースを削除するTRIM(トリム)関数

=TRIM(文字列)
// 文字列:変換対象の文字列
=TRIM(B5)

複数のスペース(半角・全角)が存在する場合に、先頭のスペースのみを残して削除する関数です。
先頭のスペースが全角(半角)スペースの場合は、全角(半角)スペースのみが残ります。
また、対象の文字列の先頭と末尾のスペースに関しては、全て削除されます。

7.指定した文字を置換するSUBSTITUTE(サブスティテュート)関数

=SUBSTITUTE(文字列, 検索文字列, 置換文字列, [置換対象])
// 文字列:変換対象の文字列
// 検索文字列:置換前の文字列
// 置換文字列:置換後の文字列
// [置換対象]:省略時は対象の文字を全て置換、数値を指定すると、その数値番目の対象の文字のみを置換
=SUBSTITUTE(B5,"(株)","株式会社")

以上、7つになります。

・補足

紹介した関数は、組み合わせて活用することもできます。
例えば、半角文字に変換して先頭のみを大文字にする場合は、以下のように表現することができます。

=PROPER(ASC(B2))
2024/02/23
【Excel】VLOOKUP関数でURLをリンクとして取得する

【Excel】VLOOKUP関数でURLをリンクとして取得する

通常、VLOOKUP関数でURLを取得しても文字の情報しか取得できないため、ハイパーリンクにはなりません。
※XLOOKUP関数などの関数でも同様です。

こちらでは、取得された文字をハイパーリンクとして取得する方法について解説していきます。

文字をハイパーリンクとして取得する方法について、以下の3つに分けて解説していきます。

・取得元の文字がURLの場合
・取得元の文字がメールアドレスの場合
・取得元の文字がハイパーリンクになる文字(URLなど)でない場合

では、順番に解説していきます。


・取得元の文字がURLの場合

取得元の文字が以下のようにURLの場合は、そのURLをそのままリンクにするだけになります。

URLをそのままリンクにして表示するには、HYPERLINK関数を活用します。

=HYPERLINK(リンク先, [別名])
// リンク先:ハイパーリンクとして設定したいURLなどのリンク情報
// [別名]:ハイパーリンクとして表示させたい文字(省略時はリンク先に設定した文字が表示される)

実際に活用した例が、以下になります。

=HYPERLINK(VLOOKUP(C11,C3:D7,2,0))

このようにリンクの状態を維持して表示させることができます。

Excel本紹介

・取得元の文字がメールアドレスの場合

取得元の文字が以下のようにメールアドレスの場合は、HYPERLINK関数で単純に囲むだけでは、正しいリンクとすることができません。

メールアドレスの場合は、以下のように入力する必要があります。

HYPERLINK("mailto:"&VLOOKUP(C11,C3:D7,2,0))

メールアドレスの先頭に「mailto:」を加えることで、メールアドレスのリンクとして活用することができるようになります。
ただ、表示される内容にも「mailto:」が加えられてしまうので、以下のように、HYPERLINK関数の引数の[別名]を設定する必要があります。

以下のように、VLOOKUP関数を2か所で指定する必要があります。

=HYPERLINK("mailto:"&VLOOKUP(C11,C3:D7,2,0),VLOOKUP(C11,C3:D7,2,0))

ちなみに、2020年の11月半ばに追加されたLET関数を活用すると、より簡潔に表現することができます。

=LET(x,VLOOKUP(C11,C3:D7,2,0),HYPERLINK("mailto:"&x,x))

LET関数については、以下の記事にて解説しています。

>【Excel】セル参照や数式に名前を付ける「LET関数」


・取得元の文字がハイパーリンクになる文字(URLなど)でない場合

最後に、以下のように取得元の文字がURLなどのハイパーリンクになる文字ではない場合に、リンク状態を維持して取得する方法についてになります。

この場合、通常の関数で取得される文字の情報に、リンクの情報が一切含まれません。
そのため、リンクの情報を取得する用の関数を自作する必要があります。

リンクの情報を取得する関数の自作方法と活用例は、以下の記事にて解説しています。

>【便利】リンク取得可能な検索関数

多くの場合、HYPERLINK関数を活用することで、効率的にリンクを作成することができます。
そのため、HYPERLINK関数を活用したことがない方は、ぜひ活用してみると良いかと思います。

2024/02/21
【Excel・Word】同じ図形を繰り返し作成する

【Excel・Word】同じ図形を繰り返し作成する

手順書などを作成する際に、スクリーンショットした画像を赤枠で囲むことなどがあります。
このような作業を行う時に、毎回、[挿入]タブから[図形]を選択して、書式を設定するというのは大変になります。

繰り返し同じ図形を作成するときに、便利な機能があります。

効率的に同じ図形を作成するには、図形の書式を登録します。
まず、1つの図形を作成し、好みの書式を設定します。

1つの図形の用意ができましたら、その図形の上で右クリックし、[既定の図形に設定]を選択します。
※この[既定の図形に設定]とは、現在操作しているファイルのみに適用される設定になります。

この設定を行うことによって、次から作成する図形に、設定した書式が適用されるようになります。


次に、繰り返し作成する方法です。

同じサイズの図形が欲しい場合は、単純にコピー&ペーストで複製できますが、異なるサイズの図形を連続して作成する場合は、コピー&ペーストでは大変になります。
※図形を、Ctrlキーを押しながらドラッグすることでも複製できます。

そんな時は、図形を挿入する以下の画面にて、対象の図形の上で右クリックし、[描画モードのロック]を選択します。

[描画モードのロック]を選択することで、繰り返し同じ図形を作成することができるようになります。

図形の作成を停止したい時は、Escキーを押します。

2024/02/19
【Word】「表記ゆれ」を瞬時に修正する方法

【Word】「表記ゆれ」を瞬時に修正する方法

以下の文章には、同じ意味の異なる表記があります。
このことを「表記ゆれ」と呼びます。

意図していない表記ゆれがあると、本来伝えたい内容とは違うところに、意識が向かってしまいます。
そのため、読み手の集中力を阻害する可能性があります。

Wordで書いた文章に関して、簡単に表記ゆれを検出し、修正する機能が用意されています。
その方法について解説していきます。

まず初めに、[ファイル]タブから[オプション]を選択し、[Wordのオプション]を開きます。

次に、[文章校正]の中の[Wordのスペルチェックと文章校正]の[設定]を選択します。

表示された設定画面の[オプション]の中の[表記の揺れ]と書かれているところの、確認が必要な項目にチェックします。

以上の設定を行うことで、以下のように該当する「表記ゆれ」が見つかった箇所に青色の下線が表示されます。


次は、青色の下線が引かれた内容を修正していきます。
修正するには、[校閲]タブの中の[表記ゆれチェック]を選択します。

こちらの画面にて「表記ゆれ」を検出してくれるため、理想の単語を指定し、[すべて修正]を選択することで、一括で「表記ゆれ」を修正することができます。

初期設定ですと、「コンピューター」と「コンピュータ」のようなカタカナの検出しかできないので、これらの手順を覚えておくと役立ちます。

2024/02/16
【ExcelVBA】表の先頭にデータを追加する機能(ノーコード)

【ExcelVBA】表の先頭にデータを追加する機能(ノーコード)

以下のような表があります。
表の上の登録フォームに値を入力して「登録」ボタンを押すことで、表の先頭行(6行目)に挿入される仕組みをノーコードで実現していきます。

ノーコードで作成するために、こちらでは「マクロの記録」を活用します。
マクロの記録は、[開発]タブの中の[マクロの記録]から行えます。

「マクロの記録」とは、記録を開始してからの操作内容が自動で記録され、自動でVBA(マクロを開発するためのプログラム)を作成する機能になります。
無駄な操作を行うと、その内容まで記録されてしまうため、結果的に処理が重くなったり予期せぬエラーに繋がり兼ねます。
そのため、マクロの記録を開始する際は、予め記録する手順を確認してから行うと良いです。

また、記録された内容を放置すると機能がブラックボックス化(仕組みが分からない状態)します。
そうなると、正しく処理されるという保証がなくなります。
たまたま上手く実行出来ているけど、ある日を境に正しく実行できなくなるということが起こりやすいです。

これは、最近話題のChatGPTにVBAを書かせることに関しても同様です。
内容を理解せずに運用するということは、急に業務が回らなくなるリスクがあるということになります。

そのため、今回の内容に関しては、実質ノーコードで作成しますが、作成されたプログラムの内容についても振り返りたいと思います。


・記録する手順を確認する

まずは、記録する手順を確認します。
登録フォームに値が入力されている前提で、どのようにしたら、先頭行にデータが挿入されるかと考えます。

今回は、次のような手順を行います。

①登録フォーム全体を選択し、コピー(Ctrl+C)する

②表の1行目を選択し、右クリックのメニューから[コピーしたセルの挿入]を選択する

③次の画面で[下方向にシフト]を選択し、[OK]で確定する

④再度、登録フォーム全体を選択し、値を削除(Delete)する

⑤登録フォームの日付の項目を選択する

この手順ならば、登録フォームの入力値に関わらず、常に対応ができるかと思います。
最後に、登録フォームの日付の項目を選択した理由は、次のデータの入力へと誘導するためです。


・マクロの記録を行う

[開発]タブの中の[マクロの記録]を選択します。

以下の画面にて、開発するマクロの名前(こちらでは「登録」)を入力し、[OK]で確定します。

次に、先ほどの①~⑤の手順を無駄な操作なく行います。
※無駄な操作を行うと、処理が正しく記録されなくなります。

手順が完了しましたら、[開発]タブの中の[記録終了]を選択します。

以上で、マクロが自動で作成されます。


・記録したマクロを確認する

記録したマクロは、[開発]タブの中の[マクロ]を選択することで、確認できます。
以下の画面から記録したマクロ名(こちらでは「登録」)を選択して[実行]を選択すると、記録した処理を実行することができます。
また、[編集]を選択すると、記録されたVBA(プログラム言語)の内容を確認することができます。
→VBAの内容についての解説と改善方法については、最後に解説します。

[実行]を選択し、記録した内容が正しく実行できることを確認します。

また、[編集]を選択して確認できるプログラムは以下になります。
※「Option Explicit」は設定によっては表示されません。

ただ、このプログラムには無駄な処理があります。
この無駄な処理によって、実行時に画面がパカパカするかと思います。
後から無駄な処理については解説するため、一度のこのままで実行ボタンを作成していきます。


・記録したマクロをボタンに割り当てる

記録したマクロは、好みの図形や画像、ボタンに割り当てることができます。
割り当てることで、その図形や画像、ボタンを選択するだけで、処理を実行することができるようになります。

ボタンを作成するには、[開発]タブの中の[挿入]にある[ボタン]を選択します。
※フォームコントロール内のボタンを選択してください。

選択後は、通常の図形と同じようにボタンを作成することができます。
作成後に、[マクロの登録]という画面が表示されるため、記録したマクロ名(こちらでは「登録」)を選択します。

ボタンの名前に関しては、好みの名前を設定します。
※ボタンを作成後に選択すると、処理が実行されてしまいます。そのため、作成後のボタンを編集する場合は、Ctrlキーを押しながら選択します。

これで機能を開発することができました。


・記録したマクロを改善する

記録したマクロの内容を細かく確認し、画面のパカパカに関しても改善していきます。

こちらのプログラムでは、「Sub」から始まり、次に登場する「End Sub」までの処理が、上から順番に行われます。

この中の「○○.Select」というのは、該当する要素を選択するという処理になります。
「Range(“B3:D3”).Select」の場合は、セルB3からD3を選択するという処理です。

また、この中に「Selection」というものがあります。
これは、その時点で選択しているものに対して処理を行うというものです。
「Selection.Copy」の場合は、その前の行でセルB3からD3が選択されているため、セルB3からD3をコピーするという処理です。
「Selection.Insert Shift:=xlDown」の場合は、その前の行でセルB6が選択されているため、セルB6を基準に下方向にコピーしたセルを挿入するという処理になります。
最後の「Selection.ClearContents」は、その前の前の行でセルB3からD3が選択されているため、セルB3からD3の値を削除するという処理になります。

「Application.CutCopyMode = False」は、コピーモードを解除するという処理になります。

この中の無駄な処理は、以下の2つになります。

・毎回セルを選択する必要がない → 画面がパカパカする原因に繋がる
・コピーモードの解除に関しては、セルの値を削除すると同時に勝手に解除されるため、記述する必要がない

この2点を改善したコードが以下になります。

最後の登録フォームの先頭を選択する処理に関しては「Select」を残していますが、それ以外に関しては全て修正しました。
実際は、これだけで同じ処理を実現することができます。

また、この処理の中には、毎回セルを選択する処理がないため、画面がパカパカしません。

こちらで使用したファイルは、以下にて配布します。

というような感じで、「マクロの記録」は便利な機能ではありますが、無駄が多いということも分かったかと思います。
AIも発達してきたため、より誰もがプログラムを開発しやすい時代にはなってきましたが、最低限の知識は今後も必要になることが考えられます。

「マクロの記録」の活用を機に、プログラムを学習してみるのも、良いかと思います。

2024/02/14
【Excel】数式を短く表現する

【Excel】数式を短く表現する

何かを求める際に数式を活用することがありますが、その数式の答えは1つだけではありません。
例えば、以下の画像のように、成績表の全科目が60点以上の時に「合格」と表示させる場合に、次のような数式で求めているとします。

=IF(AND(C2>=60,C3>=60,C4>=60,C5>=60,C6>=60),"合格","不合格")
※黄色のセルに入力

もちろん、こちらの数式でも求めることはできますが、科目が追加される度に、AND関数の中に条件を追加するのは大変かと思います。
ということで、上記の数式の別の求め方を3つ解説していきます。

・求め方1(COUNTIF関数を活用)

COUNTIF関数では、指定したセルの中で、指定した条件を満たしているセルの数を取得することができます。
そのため、以下のように、COUNTIF関数で60点以上の科目の数を取得し、その数が5の場合に「合格」と表示させています。

=IF(COUNTIF(C2:C6,">=60")=5,"合格","不合格")

★補足

いずれかの科目が60点以上の場合に「合格」とする際は、以下のように、「該当する数が1以上の場合」とすることで求めることができます。

=IF(COUNTIF(C2:C6,">=60")>=1,"合格","不合格")

・求め方2(AND関数を活用)

AND関数では、指定した条件を全て満たした場合にTRUEと表現されます。
また、複数の範囲を指定することで、指定した範囲1つずつを確認し、複数の範囲を全て満たした場合にTRUEと表現することができます。
そのため、以下のように、AND関数で複数の範囲をまとめて求めることができます。

=IF(AND(C2:C6>=60),"合格","不合格")

★補足

いずれかの科目が60点以上の場合に「合格」とする際は、以下のように、OR関数にすることで求めることができます。

=IF(OR(C2:C6>=60),"合格","不合格")

・求め方3(MIN関数を活用)

MIN関数では、指定した範囲内の最小値を求めることができます。
そのため、以下のように、MIN関数で各科目の点数の最小値を求め、その点数が60点以上の場合に「合格」とすることができます。

=IF(MIN(C2:C6)>=60,"合格","不合格")

★補足

いずれかの科目が60点以上の場合に「合格」とする際は、以下のように、MAX関数にすることで求めることができます。

=IF(MAX(C2:C6)>=60,"合格","不合格")

紹介した3つの方法以外にも、求める方法があります。
求め方によっては、入力が大変になる数式もあるため、色んな関数や手段を知っておくと便利かと思います。