はじめに
官公庁の統計で使われている「e-Stat 時間軸コード」を見やすく変換する Excel 関数(ユーザー定義関数)です。
こんなもの、探せばありそうな気がしたのですが無かったので VBA で作りました。
関数の使い方イメージ
セルに数式で =E_STAT_TO_STRING(A1)
などとすると、以下のイメージのように文字列変換して表示します。
範囲外のコード値を使用すると「#VALUE!
」エラーに、数字以外の文字が含まれると「#NUM!
」エラーを返します。
教育費が高すぎると思うのなら、無知による損失と比べてみれば良い [ボックの法則]
以下のようなまとめサイトの記事をみました。
この「一年目」の方は、社長の言葉を受け止めて「納得」したようです。
しかしながらサポンテは、いささか異なる見解を持っています。
会社というのは、労働力を提供する代わりに賃金を貰う場所であり、学校ではありません。学びは労働の枠外にあるものであって、それを営利企業が業務時間を使って提供してくれるものと期待するのは筋違いです。
かつては、サポンテもそう思っていました。
では自分で勉強しようと思うとどうなるでしょうか。当然、個人間でばらつきが出てきます。
また、自己教育は少なからぬ費用がかかります。生活のために仕事で稼いだ賃金を、仕事のための勉強に消費する。これは果たして健全なことでしょうか。人生全体を振り返った時に、後悔を残さないでしょうか。
もっと重要なことを言います。企業は今まで、その自己教育が十分に可能になる潤沢な報酬を支払ってきたでしょうか。
サポンテのようにエンジニアをやっている方はわかると思いますが、セミナーなどはもちろん、技術書籍はまったく安くありません。いくら勉強したいとは言っても、躊躇せざるを得ない金額です。
そしてエンジニアはずっと賃金が安いままでした。自己教育に回せるほど家計に余裕を持つ人の方が、むしろ少数派でしょう。
その状況が何十年も続きました。結果、世の中はどうなったでしょうか。
「自社は、高い
社員の教育にコストをかけず、安い給料で長時間働かせ、世界を席巻するイノベーティブなものが、この国からたくさん生まれたでしょうか。
サポンテはとっくに「新人に教える側」になっているのですが、状況は深刻です。これからの若い人は、破綻する年金に怯えながら爪に火を灯す生活を余儀なくされると感じています。もう「この本は、とてもためになるのでぜひ買って読んでおいてね」などとは言えません。とてもそんなことを言える余裕はなくなってきたと感じます。
ためになったとしても、収入は下がる一方なので、それも「ぜひ」とは言えない理由です。
企業は、もっと社員教育に積極的になるべきだと思います。なにも、費用をかけろとは言いません。外部講師を招いて社内セミナーを開くとか、そんな大袈裟なことでなくても良いのです。業務時間外でも構いません。ただ社内の会議室と PC を使わせて、自由に参加できる形の勉強会を開きやすい文化を醸成するだけで良いです。プレゼンターをやりたがる人がいないかもしれませんが、その時だけ報酬を出せば良いでしょう。外部講師を招くよりはずっと安く済むはずです。
サポンテは様々な企業で働きましたが、ほとんど冒頭に引用した言葉の通りの企業ばかりでした。教育費が高すぎると感じるのは、費目があるから見えやすいというだけのこと。無知による損失は会計には載ってきませんからね。一度試算してみれば良いと思います。
macOS には Spotlight がありますが、Windows には無いので代わりに Launchy を使っています。先日作ったものを Windows 用にも作ってみました。
現在、Windows が手元にないので動作未検証です。そのうち検証します。
【追記(2022/06/26):エクスプローラーの「最前面ウィンドウ」が取得できませんでした。ひとまず断念。折を見てまた挑戦します】
以下のソースコードを拡張子 ".vbs" で保存し、Launchy で開けるようにしておきます。
ファイル名は "nm新規マークダウン書類newmarkdown.vbs" のような名前で良いでしょう。
Option Explicit Private Const EXTENSION = ".md" ' --- ' エクスプローラーで開いているフォルダのパスを取得する。 ' 取得できなければ、デスクトップフォルダのパスを取得する。 ' 参考: ' https://r2z.hateblo.jp/entry/20100731/p1 ' https://www.ka-net.org/blog/?p=3782 ' --- Dim shell, fso Set shell = CreateObject("Shell.Application") Set fso = CreateObject("Scripting.FileSystemObject") Dim path path = "" Do Dim wnd For Each wnd In shell.Windows If InStr(TypeName(wnd.document), "IShellFolderViewDual") >= 0 Then ' エスクプローラーウィンドウならパスを取得する path = wnd.Document.Folder.Self.Path Exit For End If Next Exit Do Loop If path = "" Then ' ウィンドウを開いていなければ、デスクトップのパスを取得する Private Const SSFC_DESKTOP_DIRECTORY = 16 path = shell.Namespace(SSFC_DESKTOP_DIRECTORY).Self.Path End If Set shell = Nothing ' --- ' 日付文字列のファイル名を作成する ' --- Dim fileName fileName = Year(Now) & "-" & _ Right("00" & Month(Now), 2) & "-" & _ Right("00" & Day(Now), 2) Dim fullName fullName = path & "\" & fileName & EXTENSION ' --- ' フルパスを作成する ' --- Dim seq seq = 1 Do If fso.FileExists(fullName) Then fullName = path & "\" & fileName & "-" & seq & EXTENSION seq = seq + 1 Else Exit Do End If Loop ' --- ' ファイルを作成する ' --- Dim fileH Private Const FOR_WRITING = 2 Private Const CREATE_FILE = True Set fileH = fso.OpenTextFile(fullName, FOR_WRITING, CREATE_FILE) fileH.Close Set fileH = Nothing Set fso = Nothing ' --- ' エクスプローラーで選択状態にする ' --- Dim wsh Set wsh = CreateObject("WScript.Shell") wsh.Run "explorer.exe /select, """ & fullName & """" Set wsh = Nothing
Launchy には ".lnk" ファイルをカタログするようにしておいて、ショートカットのプロパティで拡張子を起動オプションにすれば、".txt" もほとんど同じコードでいけるかと思います。
この記事の内容は、Windows 専用です。macOS の Excel を持っていないため、同様の不具合が発生しているのか、そもそも確認できていません。
Google 検索 で「excel スクリーンショット edge」と入力すると「真っ黒」というサジェストが出ます。そこそこ困っている人が多いようです。
これはセキュリティのためですが、Edge の画面をスクリーンショットに撮って Excel に貼り付けるという要件は少なくありません。
Excel にはスクリーンショットを簡単に挿入する機能がありますが、一部のアプリ、例えば Web ブラウザの Microsoft Edge などでは、その機能を使うと真っ黒のイメージが貼り付けられます。使えません。他の手段でスクリーンショットを撮ることはできるのですが、手順が多くて面倒です。
他の手段は、以下の通りです。
以上の手順を、VBA で自動実行するようにします。
「個人用マクロブック」に「標準モジュール」を追加して、以下のコードを貼り付けてください。
部分的に赤字になるかもしれませんが、大丈夫、実行できます。
Optional Explicit Private ws As Worksheet #If Win64 Then ' 64bit 用 Private Declare PrtSafe Sub keybd_event Lib "user32" ( _ ByVal bVk As Byte, _ ByVal bScan As Byte, _ ByVal dwFlags As Long, _ ByVal dwExtraInfo As Long _ ) Private Declare PrtSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) #Else ' 32bit 用 Private Declare Sub keybd_event Lib "user32" ( _ ByVal bVk As Byte, _ ByVal bScan As Byte, _ ByVal dwFlags As Long, _ ByVal dwExtraInfo As Long _ ) Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) #End If Public Sub アクティブ画面を撮って貼付ける() On Error GoTo ERR_EXIT Set ws = ActiveSheet Application.Visible = False Application.OnTime Now + TimeValue("00:00:01"), "PrintScreenActiveWindowAndPaste" ' 少し待っているのは、Excel を非表示にした瞬間に Tooltip などが残る可能性があるため。 ERR_EXIT: Application.Visible = True End Sub Private Sub PrintScreenActiveWindow() keybd_event &HA4, 0&, &H1, 0& keybd_event vbKeySnapshot, 0&, &H1, 0& keybd_event vbKeySnapshot, 0&, &H1 Or &H2, 0& keybd_event &HA4, 0&, &H1 Or &H2, 0& End Sub Private Sub PrintScreenActiveWindowAndPaste() PrintScreenActiveWindow DoEvents Sleep 75 DoEvents Application.Visible = True ws.Activate Set ws = Nothing ActiveSheet.Paste End Sub
上記で作成したマクロをリボンに登録します。登録するマクロは「アクティブ画面を撮って貼付ける」です。
設定は以上です。リボンに追加したボタンをクリックすると、マクロが実行されます。
マクロは以下のように動作します。
したがって、Excel が非表示になったときに Edge が最前面になっていれば、期待通りスクリーンショットが撮れます。