いつか必要になるかも:エクセルでAWSのJsonを扱う際に便利な関数

はじめに

お久しぶりです。

神谷です。いつも業務で仕方なく開発した、要るのか要らないのかよく判らないテクニックを公開しています。
今回もそんな感じの、どうでもいいテクニックです。

AWS CLIの結果のJsonをエクセルで処理してみる

「データの区切り文字」でチャチャッと出来るんですが、それが許されないような場合に。

A列に下の式を入れて、B列にAWS CLIのJsonの結果をそのまま貼り付けるような使い方を想定しています。
つまり
"key1": "value1"
"key2": "value2"

こんなのがB1,B2にあったら、A1にはvalue1、A2にはvalue2と出力されるような関数です。
誰もが一度はトライしてみて、恐らく途中で挫折してる、例の式です。

=RIGHT(LEFT(B1,FIND("""",B1,FIND("""",B1,FIND("""",B1,FIND("""",B1)+1)+1)+1)-1),LEN(LEFT(B1,FIND("""",B1,FIND("""",B1,FIND("""",B1,FIND("""",B1)+1)+1)+1)-1))-FIND("""",LEFT(B1,FIND("""",B1,FIND("""",B1,FIND("""",B1,FIND("""",B1)+1)+1)+1)-1),FIND("""",LEFT(B1,FIND("""",B1,FIND("""",B1,FIND("""",B1,FIND("""",B1)+1)+1)+1)-1),FIND("""",LEFT(B1,FIND("""",B1,FIND("""",B1,FIND("""",B1,FIND("""",B1)+1)+1)+1)-1))+1)+1))

どうですか。エクセルが沸騰しちゃいそうな関数でしょう。
で、これは
"key": true,
"key2": false

みたいに、valueがダブルコーテーションで括られていない列には対応してないです。
そういう行にはこんな式を。

=IF(LEFT(RIGHT(B1,2),1)=",",LEFT(RIGHT(B1,LEN(B1)-FIND("""",B1,FIND("""",B1)+1)-2),LEN(RIGHT(B1,LEN(B1)-FIND("""",B1,FIND("""",B1)+1)-2))-2),LEFT(RIGHT(B1,LEN(B1)-FIND("""",B1,FIND("""",B1)+1)-2),LEN(RIGHT(B1,LEN(B1)-FIND("""",B1,FIND("""",B1)+1)-2))))

上の2つの式をどうにかこうにか組み合わせれば、"value"だろうがvalueだろうが、対応出来る感じが、何となくするでしょう。
けれど、ダメです。
こんなん、メモリ食い過ぎてすぐエクセルが死にます。

なぜこんな事をしたのか

他の人に試験を任せたら、人力で一生懸命に値を比較してたので、おいおいそういうの自動化しろよと思って、あまり考えずにちゃちゃっと作ってみたのですが……
作ってると面白くなって止まらなくなったというか……
まぁそれ以前の根本的な問題ですよね。
「データの区切り文字」でやれと。
はい。

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.