2021年4月19日月曜日

エクセルのワークシート関数を独自に定義する(任意のセル範囲の文字列に対するSHA256ハッシュ値を取得する)

Excel VBAは言わずもがな強力なツールであるが、ユーザへのアナウンスというかマニュアル作成というか、まぁ使ってもらうためのお膳立て面が面倒だったりする。

そこで、VBAで組んだ機能をワークシート関数化してしまえば、そのファイルの中ではワークシート関数(=sum(A1:A10)の様なのと同じ扱い)として使用可能になる。

場面により使える場合使えない場合があるが、VBAで作り込んだ機能の説明を0から行うよりは、簡単になる場面が多いかと思われる。

今回は引数とした任意のセル範囲の文字列に対するSHA256ハッシュ値を取得する関数をVBAで作成し、ワークシート関数として使用してみたい。

ちなみに標準のワークシート関数では現在のところ文字列のハッシュ値を取得は不可。

2021年4月14日水曜日

Excel VBAで異なるテーブルに存在するデータをキーとなる値を使って大量・高速に結合する

こんな状況がある。

従業員うん万人、

システムAのテーブル1にユーザIDと所属部署の情報、

システムBのテーブル2にユーザIDと居住都道府県の情報、

がそれぞれ格納されている。

システムA、Bともに外部へのデータ連携手段としてはCSVファイルのダウンロードのみ提供している。

私はシステムCの担当者でキーとなるユーザIDに所属部署と、居住都道府県両方の情報を紐づけてシステムCへインポートしたい。

色々とやり方はあるが、予算もないのでExcelで何とかする。

ワークシートに関数を入力してVlookupやらMatch+IndexやらやればVBAを使わずとも実現できるのだが、現実の場面ではシステムA,B共に他にも結合したいカラムが多数あってワークシート上に関数を大量に入力した神エクセルでは重くなって破綻するのが怖い。

データベースに取り込んじゃってjoinするってのもありだが、将来誰かに引き継ぐ事を考えると、裾野が広いExcelにしておきたい。

こんな場面をVBAでどう乗り切るかのアイデア。

2021年4月12日月曜日

同姓同名のユーザ(あるいは同一文字列で表現される)の情報をルックアップ元のテーブルから正しく識別してインポートする

Servicenowのインポート機能は強力なのだが、時に躓くことがある。

この例も実際自分が躓いた例。Type がReferenceになっていて同名レコードが元テーブル(参照先テーブル)に存在するフィールドの正しいインポート方法。

例えばであるがsys_userに「山田 太郎」という名前の人物が2名いる。

例えばこんなケース。

yamada.taro1とyamada.taro2は「User ID」や「Sys_ID」では区別ができるので、sys_userテーブルに対するインポートや更新では特に問題になる事はない。

問題になるのはこの同名のエントリをルックアップしているテーブルのインポートを行うときである。

例えばグループとユーザの関係性を定義している、sys_user_grmemberテーブルを見ると次のようになっている。

Help Deskグループに山田 太郎が二人とも所属している場合こうなる。

インポート機能を使った事がある方はお分かりと思うが、このようなデータをインポートしようとして、テーブルをエクスポートしたり、更新インポート用のエクセルフォーマットを出力したとしても、次のようなフィールドが得られるだけである。

要するにこのままでは、「山田 太郎」がyamada.taro1とyamada.taro2のいずれなのかを区別して扱う事が出来ない。

当然ながらこのようなデータをインポートしても、1と2どちらの山田太郎が選択されたデータが出来上がるかが不明である(ちゃんと検証していないがSys_IDが若い方が勝手に選ばれていた様な気がする)。

これでは困るので、SYS IDなりユーザIDなり一意の情報を指定してインポートしたいわけだが、User列にyamada.taro1のIDなりSYS_IDなりを記載してインポートしてもエラーになるだけなのである。

色々と検索してみても(どこかにはあるのかもしれないが)なかなかこれを解決するためのドキュメントが見つからず困った。

2021年4月7日水曜日

Powershell+Excel VBA周りの( ..)φメモメモ

Excel VBAから引数を渡す.ps1スクリプトを呼び出してExcelマクロで全体の処理をハンドリングするための材料調査。

という事でそこそこ簡単に実現できそうだ。

調べた内容は次の二点。

やりたい事①:VBAからのPS1スクリプト呼び出し。

やりたい事②:PS1スクリプトで引数を受けるお作法

ウェブサイトのURLにおけるトレイリングスラッシュの解釈と有無による動作の違い

インターネットが現代社会におけるコミュニケーションの基盤となっている今日、ウェブサイトのURLはビジネスや個人ブランディングにとって重要な役割を果たしています。URLは単にウェブページへの経路を示すだけでなく、SEO(検索エンジン最適化)においても重要な要素です。この記事では、U...