はじめに
お久しぶりです。
神谷です。いつも業務で仕方なく開発した、要るのか要らないのかよく判らないテクニックを公開しています。
今回もそんな感じの、どうでもいいテクニックです。
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だろうが、対応出来る感じが、何となくするでしょう。
けれど、ダメです。
こんなん、メモリ食い過ぎてすぐエクセルが死にます。
なぜこんな事をしたのか
他の人に試験を任せたら、人力で一生懸命に値を比較してたので、おいおいそういうの自動化しろよと思って、あまり考えずにちゃちゃっと作ってみたのですが……
作ってると面白くなって止まらなくなったというか……
まぁそれ以前の根本的な問題ですよね。
「データの区切り文字」でやれと。
はい。