Windows Searchをスタートメニュー代わりにする

スタートメニューがくっそ使いづらくなってしまった (スタートボタンとピン留め項目が離れ過ぎ…) ので、Windows Searchでなんとかするためのアイデアです。

How To

クイックアクセスへの登録

  1. 適当なフォルダによく使うツールのショートカットを集め、サブフォルダにグループ分けしておく
  2. 1.のフォルダで検索欄に「System.Kind:Link」と入力
  3. リボンの「...」→「クイックアクセスにピン留めする」を実行

グループ分け表示

  1. 表示を一旦「詳細」に変更
  2. カラムヘッダのコンテキストメニューの「その他(M)...」を実行
  3. 「フォルダー名」を探してチェックをONし「OK」ボタンを押下し確定
  4. リボンの「並べ替え」→「グループ化」→「フォルダー名」を実行
  5. Ctrl+マウスホイールで見た目を調整

以上の手順で↓のような状態になります。

クイックアクセスだけでなくエクスプローラーのジャンプメニューにも登録されます。

補足

  • Windows Search の記法については、ここ に情報があります。
  • 「検索条件を保存」で作成した .search-ms ファイルの結果はピン止めできませんが、↓のようなショートカット(.url)で代用できます。
    search-ms:query=System.Kind:Link&crumb=location:フォルダのパス
    ※パスはURLエンコード
  • ショートカットを集めたフォルダをインデックス対象にしておくと表示が高速化します。

「ネットワークの場所」という隠れた(?)神機能

Windowsには「ネットワークの場所」という機能が有ります。

表向き上はローカルPC上にファイルサーバ等へリンクする特殊フォルダを作成できる機能なのですが、色々と面白い使い方ができます。

 

基本的な使い方

  1. エクスプローラのナビゲーションペインのPCコンテキストメニューネットワークの場所を追加するという項目があるのでそれを実行します。
  2. ウィザードに従ってファイルサーバの共有フォルダのパスなどを入力していけばPCにぶら下がる形でネットワークの場所が作成されます。

作成されるフォルダは、一見するとドライブレターが無い以外にネットワークドライブと大差無いのですが、アドレスバーをフォーカスするとリモート側のパスが出てくるので同じサーバを使うメンバーにパスを伝えるのが簡単という利点が有ります。

 

Network Shortcuts

ウィザードで作成したネットワークの場所の実体は %AppData%\Microsoft\Windows\Network Shortcuts

に在ります。

このNetwork Shortcutsフォルダには、次のような特性があります。

  1. フォルダやドライブへのショートカットをこのフォルダに作成すると、ウィザードで作成するのと同様の特殊フォルダになる。
  2. ここに配置したフォルダはナビゲーションペインのPCにぶら下がる形で表示される。

 

特殊フォルダの正体

コマンドプロンプトでアクセスすると分かりますがdesktop.iniとtarget.lnkが入った読み取り専用属性が付いたディレクトがその正体です。

リパースポイント(ジャンクションまたはシンボリックリンク)と異なり、ファイルシステムではなくエクスプローラのレベルで実装されている様です。

コマンドプロンプト

attrib /d -r ディレクトリ名

と打ちディレクトリの読み取り専用属性を外すとエクスプローラでもdesktop.iniとtarget.lnkにアクセス出来るようになります。

 

特殊フォルダのカスタマイズ

target.lnkは単なるショートカットですが、コレを弄ってディレクトリに読み取り専用属性を付け直すと、特殊ディレクトリのアイコンや動作に反映されます。

要するにナビゲーションペインのPCに色々なものをぶら下げることができます。

更にこの特殊フォルダは、Network Shortcuts の外に移動したりコピペしても機能が損なわれないので、PC以外の場所にもぶら下げることが可能です。

メモ帳をランチャーにする

b.hatena.ne.jp

↑で「ランチャーにできる」と書きましたが、具体例を交えつつもう少し詳しく説明します。

利用できるプロトコル

以下のように色々なプロトコル(スキーム)を利用して色々なことができます。

[Program Filesフォルダを開く](file:///C:/Program%20Files)
[デスクトップフォルダを開く](shell:desktop)
[「既定のアプリ」を開く](ms-settings:defaultapps)
[OneDrive上のファイルをExcelで直接開く](ms-excel:ofe|u|https://d.docs.live.net/~)
[teamsのアクティビティタブを開く](msteams://activity)
[C:\\Users\\Public以下のiniを検索](search-ms:crumb=location:C:\\Users\\Public&query=*.ini&)
[TortoiseSVNのリポジトリブラウザを開く](tsvncmd:command:https://~)
[pdfの8ページ目を開く](https://kb2.adobe.com/jp/cps/511/511759/attachments/511759_pdf_open_parameters.pdf?page=8)

関連付け実行

以下のようにファイルのパスを記述すればそのファイルを開く(関連付け実行する)リンクになります。

[ファイルが置かれているディレクトリ](.)
[↑の親ディレクトリ](..)
[↑のドライブ](\\)
[電卓](calc.exe)

見ての通り相対パスでの指定や環境変数pathも有効なようです。 但しパスに空白が入っていると駄目でした。 fileプロトコルを使って空白を%20に置き換えればOKですが、絶対パスしか受け付けません。

[デスクトップ](::{B4BFCC3A-DB2C-424C-B029-7FE99A87C641})

上記の様にCLSIDによる指定も可能なようです。

もっと詳しく知りたい人向け

以下の文献が参考になるかと思います。

政治家や官僚が税金の累進性強化に消極的な理由

まずは結論

原理的に税率対所得の関係が↓のような対数(log)みたいな関係にしかできないからです。

後ほど説明しますが、どの国も似たような曲線になっているのは決して偶然ではありません。

累進性をどれだけ強化しようが所得が上がるほど税率の上がり方が緩やかになるのは変わらず、それが高所得者優遇にしか見えないので低~中所得層を満足させることができないのです。

またこのような制約があるので、上限を上げる際には低~中所得層の税率上昇率は高所得者より高くなります。

https://www.mof.go.jp/tax_policy/summary/income/028a.gif https://www.mof.go.jp/tax_policy/summary/income/b02.htmから引用

何故そうなるのか?

例えば「税率が所得に単純比例する」場合 税率 = 係数 × 所得 と表現できますが手取り(税金を差し引いた残り)は

 手取り = 所得 - 税率×所得
 手取り = 所得 - (係数 × 所得) × 所得
 手取り = 所得 - 係数 × 所得 ^2

となり、所得と手取りの関係をグラフにするとこんな感じになります。

(縦軸=手取り、横軸=所得、係数は適当)

www.desmos.com

おわかりでしょうか。所得が多過ぎると手取りが減ってしまうという理不尽なことになるのです。

このような理不尽を回避しつつ「手取りが多いほど税率が上がる」という条件は満たそうとすると、税率を対数(的な曲線)にするしかないのです。

(Excel)VBAマクロを呼び出すリンクを作成する方法

sgo2.hatenablog.com で紹介したVBAマクロを呼び出すリンクを作成するテクニックですが、通常のリンクでもVBAマクロを呼び出す方法が分かったので紹介したいと思います。

方法

呼び出すマクロは前回と同様にRangeを返すFunctionとして実装するだけです。 肝心の呼び出し方ですが、「ハイパーリンクの編集」ダイアログで

  • 「ファイル、Webページ」
  • 「ブラウズしたページ」

を選んで「アドレス」にHyperLink関数の時と同様に関数名の前に「#」を付けて記述するだけです。 ↓がその見本です。

VBAマクロを呼び出すリンクの書き方

補足

  • この方法で作成したリンクは「ハイパーリンクの編集」ダイアログでは修正することができません。
  • この方法であれば画像などにもリンクを設定できます。元々マクロの登録が可能なので無意味に見えますが、この方法であれば引数を与える事が可能です
  • VBAHyperLink オブジェクトを見ると、SubAddress「#」を付けずにマクロを呼び出す式を書けば同様のリンクを作成できるようです。

MS Teams(職場または学校用)で特定のタブへジャンプするリンク

職場でTeamsの使用を強いられているんだ!というビジネスパーソンはそこそこ居ると思いますが、アクティビティやカレンダーなどのタブを直接開けるリンクが欲しいと思った事はないでしょうか?(私はあります)

そんな貴方に耳寄りな情報です。

方法

msteams というURIスキームを使えば実現できます。

URI(短縮ver) 開くタブ
msteams://activity アクティビティ
msteams:calendarv2 カレンダー
msteams://channels チャンネル
msteams://meet ミーティング
msteams://chats チャット

※フルバージョンのURIは長いのでリンクだけにしました。

補足

エクスプローラで新規作成→ショートカットを実行しURIを貼り付ければショートカットファイルが出来ます。

個人用teamsではアクティビティしか使えないようでした。残念。

ミーディングとチャットは「コンテンツを別ウィンドウ表示」に設定していると動きがおかしくなります。

参考情報

変更履歴

2025/1/16 少し間違えていたので修正&情報追加。

(Excel)HyperLink関数でVBAマクロを呼び出すリンクを作成する方法

HyperLinkワークシート関数でVBAマクロを呼び出すリンクを作成するという割と強烈なテクニックです。

ボタンなどにマクロを登録する方法と比べると

  • リンク毎に引数を指定できる
  • コピペで量産できる

という利点が有ります。

方法

Step.1 VBA関数を作る

まずは呼び出したいVBAマクロをRangeオブジェクトを返すFunctionとして作成します。 返すRangeオブジェクトはクリック後のジャンプ先として扱われます。 とりあえずSelectionを返しておけばクリックしたリンクが入っているセルに留まります。

Function OnClick(msg As string) As Range
    Set OnClick = Selection
    MsgBox msg
End Function

Step2. HyperLink関数でリンクを作る

HyperLink関数のURLを以下の様に記述することで先ほど作成したVBA関数を呼び出す事が出来ます。

引数の指定方法
直接指定 =HyperLink("#OnClick(""Hello World"")")
アドレス指定 =HyperLink("#OnClick(A1)")
数式指定 =HyperLink("#OnClick(Concat(A1:B1))")

汎用化

勘の良い方ならもうお気付きでしょうが、引数に数式を記述できるので以下の様な関数を1つ作っておけば任意のFunctionマクロやSubマクロを呼び出す事ができます。

Function CallVBA(ParamArray dummy() As Variant) As Range
    Set CallVBA = Selection
End Function

注意点

1. 制限

呼び出すVBAマクロはユーザー定義関数として扱われるので出来ないことが有ります。

2. URL合成の負荷

URL文字列は関数を使って合成する事もできますが、マウスホバー時にカーソルを動かすたびに評価される💩な実装になっているので注意が必要です。 うっかりVBAを使ってしまうとホバー時にCPU使用率が跳ね上がります。