2023/12/13
【Excel】表の最終行を選択するリンクを作成

【Excel】表の最終行を選択するリンクを作成

以下の表の、最終行を瞬時に選択することができるハイパーリンクの作成方法について解説していきます。

今回は、表をテーブルにしてからハイパーリンクを作成していきます。


表をテーブルにする

まず初めに、対象の表を選択し、[挿入]タブの中の[テーブル]を選択します。

以下の画面が表示されたら、表の範囲が正しいことを確認します。
また、こちらの表の先頭行は表の見出しになるため、「先頭行をテーブルの見出しとして使用する」にチェックしてから[OK]で確定します。

作成されたテーブルを選択すると、[テーブルデザイン]タブが表示されます。
そのタブの中から[テーブル名]を好みの名前に変更します。
※こちらでは「売上」という名前にしています。

以上でテーブルの設定は完了です。


ハイパーリンクの作成

次に、HYPERLINK関数を用いてハイパーリンクを作成していきます。

=HYPERLINK(リンク先, [別名])
// [リンク先]に「#アドレス(#A1など)」を指定すると、そのセルへ遷移するハイパーリンクになる
// [別名]に、ハイパーリンクに表示させる文字列を指定する

以下の表の場合、表の最終行は52行目になります。

そのため、B52へ遷移するハイパーリンクをHYPERLINK関数で求めていきます。
直接セルを指定する場合は、以下のようになります。

=HYPERLINK("#B52","表の最終行")

こちらを先頭行のセルに入力すると、このようにハイパーリンクに変換されます。

こちらのリンクを選択することで、表の最終行を瞬時に選択することができます。

ただ実際は、セルB52と固定ではなく、テーブルの行数によって、遷移先の行番号は異なるかと思います。
そのため、まずはテーブルの行数を取得する数式を考えていきます。

指定した範囲の行数を取得するには、ROWS関数を活用します。

=ROWS(配列)
// 配列(参照)に含まれる範囲の行数を返す

またテーブルの範囲は、テーブル名にて指定することができます。
そのため、以下のように行数を求めることができます。

=ROWS(売上)

このように表の行数を取得することができました。

ただ表の最終行の行番号は52なので、2行分の差があります。
そのため、最終行の行番号を求めるには、1行目と2行目分の2を加える必要があります。

=ROWS(売上)+2
ExcelVBAレベル確認

次に、ROWS関数を使った数式を、HYPERLINK関数と組み合わせます。
HYPERLINK関数の数式を確認します。

=HYPERLINK("#B52","表の最終行")

この「#B52」の「52」を先ほどの数式で求めたい場合は、「&」を活用して文字結合させます。

=HYPERLINK("#B"&ROWS(売上)+2,"表の最終行")

これでデータの増減に対応した、表の最終行を選択するハイパーリンクが完成しました。

表の最終行の1行下の、新規登録の行を選択させたい場合は、さらに1を加えることで実現できます。

=HYPERLINK("#B" & ROWS(売上)+3,"新規登録")

更に応用すると、表の中の最新の日付の先頭を選択させることも可能です。
最新の日付の先頭とは以下の場合は、セルB51になります。

このようなハイパーリンクを作成することで、日の始まりのセルを瞬時に選択でき、当日データの確認がスムーズになります。
では早速、このようなハイパーリンクを数式で作成していきます。

特定の日付が入力されている先頭の行番号を取得するには、MATCH関数を使います。

=MATCH(検査値, 検査範囲, [照合の種類])
// [検査範囲]内を上から確認し、[照合の種類]を満たす[検査値]が見つかった最初の通し番号を返す
// [照合の種類]:(1)以下、(0)完全一致、(-1)以上

以下のように活用することができます。

=MATCH(B6,売上[日付],0)
// 「B6」とは「2023/9/19」の日付
// 「売上[日付]」とは、売上テーブルの「日付」の項目範囲のこと

この数式を確認すると、結果が「4」になりました。
「2023/9/19」の先頭の行が、表の先頭から4行目ということを表しています。

ここで、指定したセルB6を、日付の項目の直近の日付にする必要があります。
日付はシリアル値という数値で管理されているため、MAX関数で求めることができます。

>シリアル値とは

=MAX(数値1, [数値2], [数値3], …)
// 指定した数値の中から最大値を返す

実際に、直近の日付を求める場合は、以下のような数式になります。

=MAX(売上[日付])
// シリアル値が表示される場合は、表示形式を日付にする必要があります。

この数式をMATCH関数の検査値に渡して、テーブルとの差分の2を加えることで、該当する行番号を取得することができます。

=MATCH(MAX(売上[日付]),売上[日付],0)+2

後は、このMATCH関数で求めた行番号を、HYPERLINK関数と組み合わせることで完成です。

=HYPERLINK("#B" & MATCH(MAX(売上[日付]),売上[日付],0)+2,"最新情報")

HYPERLINK関数を活用することで、好みの位置へのハイパーリンクを作成することができます。
瞬時に該当する項目を選択するハイパーリンクなどと、必要に応じてカスタマイズすると、効率化が図れます。

2023/12/08
【Excel】昇順や降順ではなく、好みの順番に並べ替える方法

【Excel】昇順や降順ではなく、好みの順番に並べ替える方法

以下のような表で、「支店」を「東京→名古屋→大阪」の順番に並べ替えたいとします。

ただ、昇順の場合は、「大阪→東京→名古屋」になり、降順の場合は、「名古屋→東京→大阪」になります。
そのため、「東京→名古屋→大阪」という順番にすることができません。

※昇順や降順の並び替えは、対象の項目を選択し、[データ]タブの中の[昇順]もしくは[降順]を選択することで行えます。

こちらでは、「東京→名古屋→大阪」のように好みの順番に並べ替える方法について解説しています。


好みの順番に並べ替える

「東京→名古屋→大阪」のように好みの順番に並べ替えるには、「並べ替え」という機能を活用します。
対象の表の中を選択している状態で、[データ]タブの中の[並べ替え]を選択します。

選択後に表示される以下の画面にて、[列]を[支店]、[並べ替えのキー]を[セルの値]にして、[順序]から[ユーザー設定リスト]を選択します。

次の画面が表示されましたら、[リストの項目]に項目名を好みの順番になるように入力します。
こちらでは、「東京→名古屋→大阪」となるように並べています。

入力後に確定すると、[順序]に入力した順番で値が表示されます。

表示された内容で問題がなければ、確定します。
確定することで、以下のように理想の順番に並べ替えることができます。

ExcelVBAレベル確認

一覧に表示される

「ユーザー設定リスト」にて設定すると、次からは一覧に表示されるようになります。

不要な場合は、「ユーザー設定リスト」から対象のデータを選択し、[削除]を選択することで、削除することができます。
この「ユーザー設定リスト」は、「Excelのオプション」からでも開くことができます。

「Excelのオプション」は、[ファイル]タブから[オプション]を選択することで、開くことができます。
開いた画面の中の、[ユーザー設定リストの編集]から開くことができます。


「ユーザー設定リスト」の別の活用方法

この「ユーザー設定リスト」ですが、別の活用方法もあります。
実は、表を作成する際にも便利な機能になります。

「ユーザー設定リスト」に設定することで、設定した1つの値を入力してオートフィルでコピーすると、リストの内容を順番に表示することができます。

設定した要素以上にコピーすると、同じ値が繰り返し表示されます。

「ユーザー設定リスト」に部署名や部門名、自社製品のカテゴリーなどを登録することで、表の項目を簡単に入力することができるようになります。
また、「ユーザー設定リスト」に設定した順番で表示されるため、すべての表で統一した順番にすることができます。


補足

「ユーザー設定リスト」の設定は、PC単位の設定になります。
他のPCから操作する場合は、再度リストの内容を追加する必要があります。

他の方にも設定してほしい場合は、誤った設定を防ぐために、自動で設定するマクロなどを開発して共有するのが、安全かつ便利になります。

2023/11/29
【Excel】ピボットテーブルの意外と知られていない小技3選

【Excel】ピボットテーブルの意外と知られていない小技3選

今回は、ピボットテーブルの意外と知られていない小技を3つ解説していきます。

・要素の順番を自由に変更
・瞬時に詳細データの確認
・要素を結合して表示

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


要素の順番を自由に変更

以下のピボットテーブルで、好みの順番に変更していきます。

こちらは要素として、「支店」、「分類」、「商品名」、「売上」があります。
「支店」や「分類」、「商品名」といった「行」(列も同様)に追加されている項目は、フィルターボタンより並べ替えることができます。
ただ、「値」に追加されている「売上」に関しては、フィルターボタンが使えません。

フィルターボタンを活用して並べ替える場合は、メニューを展開後に項目(フィールド)を選択します。
選択後に、昇順や降順といった並べ替えを行います。

「値」に追加されている「売上」に関しては、売上の数値のいずれかのセルを選択し、[データ]タブの中の[並べ替え]より並べ替えができます。

各商品の合計を並べ替える場合は、対象の合計のいずれかのセルを選択して行います。

昇順や降順ではなく、好みの順番にしたい場合は、ドラッグ操作で移動することができます。

移動したい要素の上にカーソルを移動させ、十字矢印になったところで、クリックしながら移動させます。

ExcelVBAレベル確認

瞬時に詳細データの確認

以下のピボットテーブルには、「支店」と「分類」のみで分けられています。
「売上」は、「支店」ごとの「分類」の合計になります。

このピボットテーブルの「売上」の詳細(「商品名」)を簡単に確認したい場合、ピボットテーブルに要素を追加せずに確認する方法があります。
その方法は、詳細を確認したい「売上」の合計のセル上でダブルクリックします。

それだけで、新しいシートに詳細のテーブルが作成されます。
不要になりましたら、シートごと削除していただいて問題ございません。

ExcelVBAレベル確認

要素を結合して表示

ピボットテーブルは、以下のように、要素を結合して表示させることができます。
セルの結合とは異なり、データの増減やフィルターにも対応しています。

では、設定方法について解説していきます。

まずは、対象のピボットテーブル内を選択し、[デザイン]タブ内の[レポートのレイアウト]の[表形式で表示]を選択します。

次に、ピボットテーブル上で右クリックし、[ピボットテーブル オプション]を選択します。

[ピボットテーブル オプション]内の[レイアウト]タブの[セルとラベルを結合して中央揃えにする]をチェックし、確定します。

以上の手順で、以下のように結合して表示させることができます。

テキストを左揃えなどにしたい場合は、対象の範囲を選択し、[ホーム]タブ内から設定できます。

2023/11/26
【便利】文字列検索ツール:アドイン開発

【便利】文字列検索ツール:アドイン開発

#文字列検索 #アドイン #InputBox #InStr #Characters #RGB #標準モジュール

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

特定の文字を検索して、その文字の部分のみ赤色に色付けする検索ツールの開発方法を解説しています。
また、こちらではアドインとして開発しているため、一度設定すれば、いつでも実行できます。

アドインを開発してみたい方にも参考になります。

00:00 挨拶
00:10 完成イメージ
01:07 準備
01:12 作成(検索ツール)
12:26 作成(アドイン)
16:51 完成
17:18 プログラムの全体
20:43 まとめ

2023/11/24
【Excel】同じセル内の複数の値を集計

【Excel】同じセル内の複数の値を集計

Microsoft Formsなどで複数回答したものをExcelで確認すると、以下のように同じセルに複数の値が出力されることがあります。

こちらでは、このように同じセル内に「;」区切りで入力された複数の値を集計する方法について、2通りで解説しています。


重複した文字が含まれない場合

以下の表の項目「好きな食べ物」には、「りんご、ばなな、みかん、いちご、ぶどう」の5通りがあります。

また、これらの食べ物には「重複した文字」がありません。

この「重複した文字」とは、「もも」と「すもも」のような文字を指します。
このような「重複した文字」の要素が含まれていると、若干、集計が大変になります。
※「重複した文字」を考慮した集計方法については後半に解説しています。

「重複した文字」が含まれていない場合は、単純に「りんご」を含む件数などと求めることができます。
「○○が含まれている件数」は、COUNTIF関数を用いて求めることができます。

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

以下の右の表に集計結果を求めていきます。

まず、セルF2の「りんご」の数について集計していきます。
「りんご」の数は、「B列の中で、「りんご」という文字が含まれるセルの数」になります。
これを数式で求めると、以下のようになります。

=COUNTIF(B:B,"*"&E2&"*")

検索条件の「”*”&E2&”*”」は、セルE2の値の左右に「*」を加えた文字「*りんご*」を表しています。
COUNTIF関数での「*」は、「0文字以上の文字」を表し、「「りんご」が含まれる」という条件になります。

この式で、以下のように集計することができます。

他の集計結果に関しては、オートフィルを活用して以下のように求めることができます。


重複した文字が含まれる場合

次に「重複した文字」が含まれる場合です。
以下の表を元に、右側の表に集計していきます。

この表の場合、セルF2の集計結果を「B列の中で、「1」という文字が含まれるセルの数」とすると、「10」も含まれて集計されてしまいます。
そのため、少し工夫をする必要があります。

B列の数値は、先頭と末尾の数値を除くと、他は「;」に囲まれています。
そのため、B列の文字の左右に「;」を加えることで、「「;数値;」が含まれる場合」という条件にすることができます。
「;」は、以下のように数式で加えていきます。

=";"&B2&";"

このC列の値を元に、COUNTIF関数を用いて求めていきます。

=COUNTIF(C:C,"*;"&E2&";*")

このように集計することができます。

何かしら集計する場合は、集計するルールを統一することで正しく行えます。
必要に応じて、後半の解説のように、左右に「;」を加えるなどとして、ルールを統一すると、より簡単に集計できます。


補足

細かな解説は省略しますが、以下のように「;」を基準に分割することでも集計することができます。

=TEXTSPLIT(B2,";")
=COUNTIF($C$2:$L$6,A9)
2023/11/15
【ExcelVBA】「マクロの記録」でクラス分け

【ExcelVBA】「マクロの記録」でクラス分け

以下のような名簿があります。
こちらの名簿には、A~Cの複数のクラスが含まれます。

この表をクラス分けして、以下の別々のシート(A~C)に表示させる機能の開発方法について解説していきます。


解説の流れ

今回、こちらでは「マクロの記録」という機能を活用して開発していきます。
解説する流れは以下になります。

1.手順の確認
2.「マクロの記録」の実行
3.記録内容の確認と修正(修正後のファイルも配布)

実際に、「マクロの記録」にて開発したファイルは以下になります。
※こちらのファイルは、記録後の未修正ファイルです。

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


1.手順の確認

「マクロの記録」を上手く活用するには、無駄な手順を無くし、尚且つ、繰り返し実行できる手順を考える必要があります。
今回は、以下の手順で記録することで実現していきます。

① 表にフィルターを設定(ショートカット:Ctrl+Shift+L)

② Aクラスで絞る

③ A~B列をコピー(ショートカット:Ctrl+C)

④ シート「A」のセルA1を選択して貼り付け(ショートカット:Ctrl+V)

⑤ シート「A」のセルA1を選択

⑥ ②~⑤の手順を、Bクラス、Cクラスでも実行する

⑦ 表のフィルターを解除(ショートカット:Ctrl+Shift+L)

この手順のポイントは、③でコピーする際に列全体をコピーしているというところです。
列全体を選択することで、今後、データ数が増えてきた場合にも対応することができます。

ExcelVBAレベル確認

2.「マクロの記録」の実行

では、先ほどの手順を記録していきます。
[開発]タブの中の[マクロの記録]を選択し、好みの名前で作成します。

[作成]を選択した後は、以下のように[記録終了]という文字に切り替わり、記録が開始します。

記録が開始すると、その後の操作は、すべて記録されてしまうため、無駄な操作なく、先ほどの手順を行います。
※記録される操作は、「マクロの記録」に対応している操作のみになるため、Windowsの操作などは記録されません。

先ほどの①~⑦の操作が完了したら、上記の[記録終了]を選択することで完成です。
実行は、[マクロ]の中の作成した名前を選択することで行えます。

ExcelVBAレベル確認

3.記録内容の確認と修正

記録された内容を確認します。
記録されたコードは、[VisualBasic]を選択することで確認することができます。

記録されたコードは以下になります。

こちらには、無駄なコードが多く存在します。
[マクロの記録]を活用するデメリットはここにあります。
[マクロの記録]を活用した後は、中身を確認し、無駄な処理を修正した方が、保守的になります。

では、無駄な処理を確認していきます。

まずは以下の内容です。

Selection.AutoFilter
ActiveSheet.Range("$A$1:$C$51").AutoFilter Field:=3, Criteria1:="A"

この処理は、「選択したセルを基準にフィルターを設定し、その後にセルA1~C51が含まれるフィルターの3列目が「A」のもので絞り込む」という内容になっています。
ここの無駄なポイントは、以下になります。

・フィルターの設定と絞り込みを分ける必要がない
・フィルターの範囲を指定するには、設定が含まれるセルであればよいので、A1~C51などの指定が不要
・ActiveSheet(現在選択されているシート)というのが抽象的で、別のシートを選択して実行すると不具合を起こす

こちらを改善すると、以下のようになります。

Sheets("学年").Range("A1").AutoFilter Field:=3, Criteria1:="A"

この処理は、「シート「学年」のセルA1を基準にフィルターを設定し、設定したフィルターの3列目が「A」のもので絞り込む」という内容になっています。
このように、無駄な処理を修正し、より不具合が起こりにくい処理にすることができました。

次に、以下の処理です。

Columns("A:B").Select
Range("B1").Activate
Selection.Copy
Sheets("A").Select
ActiveSheet.Paste
Range("A1").Select

この処理は、「現在選択されているシートのA列とB列を選択し、セルB1をアクティブにしてコピーし、シート「A」を選択し、貼り付けて、セルA1を選択する」という内容です。
ここの無駄なポイントは、以下になります。

・コピー対象は選択されている範囲であり、現在、どのセルが選択されているのかは関係ない
・シート情報が省略されているため、別のシートを選択して実行すると不具合を起こす

こちらを改善すると、以下のようになります。

Sheets("学年").Columns("A:B").Copy
Sheets("A").Range("A1").PasteSpecial
Sheets("A").Select
Range("A1").Select

この処理は、「シート[学年」のA~B列をコピーし、シート「A」のセルA1を基準に貼り付け、シート「A」のセルA1を選択する」という内容です。
Pasteメソッドはシートに対してしか使えないため、セルに対して直接貼り付けできるPasteSpecialメソッドを使用しています。

この流れで他も修正すると、以下のようになります。

これだけでも、かなり見やすくなったかと思います。
こちらのファイルは以下になります。

ExcelVBAレベル確認

まとめ

「マクロの記録」は、とても便利な機能ですが、無駄な処理も多く記録されてしまいます。
また、中身の確認が出来ない場合は、機能の仕組みはブラックボックスとなり、どのタイミングで不具合を起こすのかが予測できません。

その状態での業務での運用は、かなり危険になります。
初めは大変ですが、「マクロの記録」を活用した場合は、コードの内容を確認することを推奨します。

2023/11/12
【便利】選択した範囲の値を瞬時に交換する機能

【便利】選択した範囲の値を瞬時に交換する機能

#データ交換 #Selection #Split #UBound #Range #Value #標準モジュール

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

複数の範囲選択をするだけで、その範囲単位の値を瞬時に交換する機能について解説しています。

例えば、クラスの席替え時に座席表で特定の人を交換する際や、グループ学習用のグループ表のグループリーダーを時計回りに交換する際に役立ちます。

今回の1つの機能だけで実現できるので、よく使う場合は、アドインにするのも良いかと思います。
>アドインの設定方法

00:00 挨拶
00:35 完成イメージ
01:47 準備
02:02 作成(選択範囲の値交換)
14:13 作成(交換ボタン)
14:51 完成
16:10 プログラムの全体
19:20 まとめ

▼準備ファイル▼

2023/11/06
【Excel】特定のセルに値がある場合に行全体を色付け

【Excel】特定のセルに値がある場合に行全体を色付け

以下の表に関して、「済」が入力されている行を全体的にグレーにする方法について、3パターンで解説していきます。

今回解説する3パターンは以下になります。

・E列に「済」が入力されている場合に、行全体を色付け
・E~G列すべてに「済」が入力されている場合に、行全体を色付け
・E~G列のいずれかに「済」が入力されている場合に、行全体を色付け

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


E列に「済」が入力されている場合に、行全体を色付け

1つのセルを参照して行全体を色付けする場合は、開始のセル(B3)を基準とした条件式を作成します。

セルB3に色付けする場合とは、“セルE3に「済」が入力されている場合”になります。
この内容を数式で表現すると、以下のようになります。

=E3="済"

では、次に隣のセル(C3)を基準とした条件式を作成します。
セルC3の場合に関しても同様に、以下のようになります。

=E3="済"

では、次に下のセル(B4)を基準とした条件式を作成します。
セルB4の場合は、以下のようになります。

=E4="済"

ここで分かることとして、行番号は基準の位置によって相対的に変化しますが、列は固定になります。
そのため、列を固定の条件式を作成する必要があります。
セルB3が基準の条件式の列を固定すると、以下のようになります。

=$E3="済"

この数式を条件付き書式で設定していきます。

まずは、セルB3を基準とした対象の範囲を全選択します。

次に、[ホーム]タブの中の[条件付き書式]の[新しいルール]を選択します。

[数式を使用して、…]より、先ほどの数式を入力し、[書式]を[塗りつぶし]のグレーにします。

=$E3="済"

これで確定することで、以下のように設定することができます。


E~G列すべてに「済」が入力されている場合に、行全体を色付け

先ほどの内容を踏まえ、次は、指定の列全体に「済」が入力されている場合に色付けしていきます。

先ほどと同様に、開始のセル(B3)を基準にした条件式を作成します。

求め方は色々ありますが、今回は、「済」が入力されたセルの数が3の場合という条件式にしていきます。
先ほどと同様に、列を固定した場合の式は、以下になります。

=COUNTIF($E3:$G3,"済")=3

COUNTIF関数で、指定した範囲の「済」が入力されたセルの数を数えることができます。

では、この数式を条件付き書式にて設定していきます。

先ほどと同様に、セルB3を基準に対象の範囲を全選択し、[ホーム]タブの中の[条件付き書式]の[新しいルール]を選択します。

[数式を使用して、…]より、先ほどの数式を入力し、[書式]を[塗りつぶし]のグレーにします。

=COUNTIF($E3:$G3,"済")=3

これで確定することで、以下のように設定することができます。


E~G列のいずれかに「済」が入力されている場合に、行全体を色付け

先ほどは、対象の列すべてに「済」が入力されている場合という条件でしたが、次はいずれかに入力されているという条件にします。

先ほどの数式は以下になります。

=COUNTIF($E3:$G3,"済")=3

この数式をいずれかにする場合は、“「済」が入力されたセルの数が1以上の場合”という条件式にする必要があります。
その数式を求めると以下のようになります。

=COUNTIF($E3:$G3,"済")>=1

では、こちらの条件式を条件付き書式にて設定していきます。

先ほどと同様に、セルB3を基準に対象の範囲を全選択し、[ホーム]タブの中の[条件付き書式]の[新しいルール]を選択します。

[数式を使用して、…]より、先ほどの数式を入力し、[書式]を[塗りつぶし]のグレーにします。

=COUNTIF($E3:$G3,"済")>=1

これで確定することで、以下のように設定することができます。

2023/10/27
【Excel】連続した文字の色を自動で薄くする

【Excel】連続した文字の色を自動で薄くする

以下のように、同じ項目に同じ値が続く場合に、自動で文字の色を薄くする設定方法について解説していきます。


条件を定義する

このような設定をする場合、まず初めに「どのような条件の時に色を薄くするのか」を定義する必要があります。
また、その定義は、より具体的である必要があります。

今回の場合、「同じ項目に同じ値が続く場合に、自動で文字の色を薄くする」という内容を、より細かい表現にします。
例えば、以下のように表現することができます。

・「対象のセルの値」と、そのセルの「1つ上のセルの値」が一致する場合に、対象のセルの「文字の色」をグレーにする

このように、「同じ値が続く場合」という抽象的な表現を、より具体的にします。

この条件を、特定のセルに対する数式で表現していきます。

今回の場合、適用したい範囲は「C3」以降になるかと思います。
※「C3」は文字が重複する可能性がないため、「C4」を基準にしても問題ございません

その場合、適用したい範囲の一番上のセルを基準にした条件式を作成します。
「「対象のセルの値」と、そのセルの「1つ上のセルの値」が一致する場合」という条件を数式で表現すると、以下のようになります。

=C3=C2
// C3とC2が等しい場合

他のセルに関して、例えば、「C4」を基準とした数式の場合は、以下のようになります。

=C4=C3

ここから分かる通り、「C3」以降は、一番上の数式から相対的に変化する数式になります。
※今回のケース以外で、相対的にならない場合は、固定すべき行や列に「$」を付けて、絶対参照にします。

このような一番上の数式を導くことができましたら、「条件付き書式」にて設定していきます。

ExcelVBAレベル確認

条件付き書式の設定

今回は、設定する範囲を「C3」から一番下の行までにします。
その場合は、C列を全体的に選択し、不要なセルをCtrlキーを押しながら選択することで選択を解除します。

恐らく、「C3」が基準のセルになっているかと思います。
基準のセルが「C3」以外の場合は、その基準のセルの条件式を考える必要があります。
※基準のセルというのは、選択範囲内で色が白くなっているセル「C3」を指します。

次に、[ホーム]タブから[条件付き書式]の[新しいルール]を選択します。

[新しい書式ルール]の設定画面にて、ルールの種類を[数式を使用して、…]にし、テキストボックスに基準のセルの条件式を入力します。
こちらでは、以下の数式になります。

=C3=C2

[書式]に関しては、好みの文字の色を設定します。

上記のように設定することが出来ましたら[OK]で確定することで、以下のように、連続した値を薄くすることができます。

条件付き書式に設定した数式は、選択範囲全体に相対参照で設定されます。
そのため、基準のセルによって、設定する数式が異なります。

2023/10/26
【便利】開きながらファイル名を変更

【便利】開きながらファイル名を変更

#ファイル名変更 #InputBox #ActiveWorkbook #Name #SaveAs #Kill #アドイン #標準モジュール

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

Excelファイルを閉じずに開いた状態で、Excelのファイル名が変更できる機能の開発方法について解説しています。
Excelファイルを操作している際にファイルの名前を変更したくなった時、ファイルを閉じてから名前を変更する必要がなくなります。

00:00 挨拶
00:19 完成イメージ
01:13 実現方法
02:01 作成(ファイル名変更)
09:35 アドインの保存・設定
12:39 完成
14:02 プログラムの全体
16:35 まとめ

2023/10/16
【ExcelVBA】瞬時にフィルターで絞り込み

【ExcelVBA】瞬時にフィルターで絞り込み

以下のような表に関して、対象のデータを探す際に、フィルターボタンから絞り込みをするとします。

この絞り込み作業が毎回発生する場合、フィルターのメニューから絞り込み条件を毎回設定するのは大変に感じることがあります。

こちらでは、データを絞り込む際に、フィルターのメニューを操作せずに、瞬時に絞り込む機能の開発方法について解説していきます。
具体的には、対象の項目の上の空白セルに、検索したい文字を入力することで、その文字が含まれるデータのみを瞬時に絞り込むという機能になります。
以下の画像がイメージになります。

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

こちらでは、項目[ふりがな]を絞り込むための機能を開発する方法について解説していきます。
全項目に対応した機能を開発する場合は、以下のコンテンツをご確認ください。

>【業務】瞬時に表のデータを絞り込む機能


開発準備

まず初めに、[開発]タブの中の[Visual Basic]を選択します。

次に[プロジェクト]から対象のシートモジュールを開きます。

※[プロジェクト]が表示されていない場合は、[表示]タブから表示することができます。

開いたシートモジュールのエディターの上に[General]と書かれたリストがあります。
こちらから[Worksheet]を選択します。

選択すると、隣のリストの[Declarations]が[SelectionChange]に切り替わり、「Private Sub Worksheet_SeletionChange」というプロシージャが表示されます。
今回は、こちらを使用せず「Worksheet_Change」というプロシージャを使用するため、隣のリストから[Change]を選択します。

選択することで、「Worksheet_Change」というプロシージャが表示されます。
「Worksheet_SelectionChange」のプロシージャに関しては、今回は使用しないため、削除しても問題ないです。


コードの記述

次に「Worksheet_Change」のプロシージャ内に以下のように記述します。

このコードの意味を説明します。

「Worksheet_Change」というプロシージャは、対象シートのセルの値を編集した際に自動で実行される、イベントプロシージャと呼ばれる特殊なプロシージャになります。
引数の「Target」には、編集したセルの情報がRange型で格納されます。

その「Target」の情報を活用して、対象のセルが編集されたかどうかを確認します。

If Target.CountLarge = 1 And Target.Address = "$D$1" Then ~ End If
// 上記の画像内の「_」はコードを改行する際に使用します。

上記のコードにて、編集されたセル「Target」が1つのセルなのかどうかと、アドレスがセルD1なのかを確認しています。
「.CountLarge」で対象のセルの数を取得することができ、「.Address」で対象のアドレスを絶対参照で取得することができます。

この条件を満たした時に以下のコードが実行されます。

Range("B2").AutoFilter 3, "*" & Range("D1").Value & "*"

上記のコードにて、セルB2が属している表にフィルターを設定し、「3」で列番号を指定、「”*” & Range(“D1”).Value & “*”」で絞り込み条件を指定しています。

「3」は表の先頭からの列番号になります。
[ふりがな]の項目は先頭から3番目の要素になるため、「3」と指定しています。

「”*” & Range(“D1”).Value & “*”」は、条件として、「セルD1の値を含む」という意味になります。
「Range(“D1″).Value」でセルD1の値を取得し、「”*” &」と「& “*”」で、セルD1の値に「*」という文字を結合しています。
「*」は0文字以上の文字という特殊な意味があり、「*」で囲むことによって、「その値を含む」という条件にすることができます。


完成

以上の手順にて完成です。
セルD1に好みの値を入力することで、その文字を含む値のみに絞り込むことができます。

数値の項目に適用する場合は、「○○を含む」という条件では実現できないため、「*」の結合を無くすなどと条件を変更する必要があります。

▼サンプルファイル▼

2023/10/13
【便利】リンク取得可能な検索関数

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

#データ抽出 #データ検索 #ハイパーリンク #Hyperlinks #Address #SubAddress #HYPERLINK #VLOOKUP #標準モジュール

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

該当するセルのハイパーリンクの情報を抽出できる関数の開発方法について解説しています。

検索用の関数として、VLOOKUP関数やXLOOKUP関数などがあります。
しかし、これらの関数は、対象範囲の文字列のみしか取得することができません。
対象範囲内にハイパーリンクが含まれている場合は、そのハイパーリンクの情報を取得することができず、文字列のみの取得になってしまいます。

こちらで開発する関数(ユーザー定義関数/自作関数)を活用すると、対象範囲内のハイパーリンクの情報(URLやセルのアドレス、ファイルやフォルダのパス)を取得することができます。

00:00 挨拶
00:54 完成イメージ
01:54 準備
02:14 作成(リンク情報取得用の検索関数)
15:52 完成
19:35 プログラムの全体
24:26 まとめ

▼準備ファイル▼