tag:blogger.com,1999:blog-34081666057311827452024-08-29T21:19:19.300+09:00プログラミング備忘録いろいろなプログラム言語で遊んでみて、便利だなと思ったことや苦悩や楽しみなどを徒然なるままに記述してみようかと思います。takes90http://www.blogger.com/profile/05643926860275746715[email protected]Blogger139125tag:blogger.com,1999:blog-3408166605731182745.post-10838333990921152332021-06-28T21:49:00.004+09:002021-07-01T08:33:37.289+09:00Google apps script とスプレッドシートでスプレッドシート比較ツールを作ってみる<p>Google apps scriptというのをたんなるエクセルのマクロのような存在と思いこんでいたりすると、大きなまちがいだなと最近すごく感じています。</p><p>実際に、これを使うと、簡単なウェブアプリケーションが作れたりします。例えば、Slackの会話を添付ファイル込みでエクスポートするWebアプリケーションも作れたもします。</p><p> また、Google apps scriptとスプレッドシートをの組み合わせもいい基盤です。入力と出力を必要とするようなツール基盤としていろいろ便利な存在です。</p><p>以下の具体例を交えて説明しておきます。</p><p>Google apps scriptを使うとカスタムメニューを追加することができます。</p><p>コードは簡単です。こんな風に書くだけです。</p><div style="background-color: #fffffe; line-height: 18px;"><div style="color: #3c4043; font-family: "Roboto Mono", Consolas, "Courier New", monospace; font-size: 13px; white-space: pre;"><span style="color: #185abc;">function</span> <span style="color: #202124;">onOpen</span>() {</div><div style="color: #3c4043; font-family: "Roboto Mono", Consolas, "Courier New", monospace; font-size: 13px; white-space: pre;"> <span style="color: #c92786;">SpreadsheetApp</span>.<span style="color: #202124;">getUi</span>()</div><div style="color: #3c4043; font-family: "Roboto Mono", Consolas, "Courier New", monospace; font-size: 13px; white-space: pre;"> .<span style="color: #202124;">createMenu</span>(<span style="color: #b31412;">'比較ツール'</span>)</div><div style="color: #3c4043; font-family: "Roboto Mono", Consolas, "Courier New", monospace; font-size: 13px; white-space: pre;"> .<span style="color: #202124;">addItem</span>(<span style="color: #b31412;">'比較実行'</span>, <span style="color: #b31412;">'executeCompare'</span>)</div><div style="color: #3c4043; font-family: "Roboto Mono", Consolas, "Courier New", monospace; font-size: 13px; white-space: pre;"> .<span style="color: #202124;">addToUi</span>();</div><div style="color: #3c4043; font-family: "Roboto Mono", Consolas, "Courier New", monospace; font-size: 13px; white-space: pre;">}</div><div style="color: #3c4043; font-family: "Roboto Mono", Consolas, "Courier New", monospace; font-size: 13px; white-space: pre;"><br /></div><div style="color: #3c4043; font-family: "Roboto Mono", Consolas, "Courier New", monospace; font-size: 13px; white-space: pre;">Spreadsheetのうち一つのシートをパラメータ設定用のシートにして、結果を出力するシートをもう一つ作ると、</div><div style="color: #3c4043; font-family: "Roboto Mono", Consolas, "Courier New", monospace; font-size: 13px; white-space: pre;">パラメータをセットした後に、ツールを実行ということができるようになります。</div><div style="color: #3c4043; font-family: "Roboto Mono", Consolas, "Courier New", monospace; font-size: 13px; white-space: pre;"><br /></div><div style="color: #3c4043; font-family: "Roboto Mono", Consolas, "Courier New", monospace; font-size: 13px; white-space: pre;">イメージとして、実際のサンプルツールを作ってみました。</div><div style="color: #3c4043; font-family: "Roboto Mono", Consolas, "Courier New", monospace; font-size: 13px; white-space: pre;">こちらは、2つのスプレッドシートを比較するツールになります。</div><div style="color: #3c4043; font-family: "Roboto Mono", Consolas, "Courier New", monospace; font-size: 13px; white-space: pre;"><br /></div><div><span style="color: #3c4043; font-family: Roboto Mono, Consolas, Courier New, monospace;"><span style="font-size: 13px; white-space: pre;"><a href="https://docs.google.com/spreadsheets/d/1zaLJSTasXGTilJ3B_9L3AbrgZVZQVHJTLHRAhstfpyw/edit?usp=sharing">https://docs.google.com/spreadsheets/d/1zaLJSTasXGTilJ3B_9L3AbrgZVZQVHJTLHRAhstfpyw/edit?usp=sharing</a></span></span></div><div style="color: #3c4043; font-family: "Roboto Mono", Consolas, "Courier New", monospace; font-size: 13px; white-space: pre;"><br /></div><div style="color: #3c4043; font-family: "Roboto Mono", Consolas, "Courier New", monospace; font-size: 13px; white-space: pre;">こちらのスプレッドシートをコピーして実行してみてください。</div><div style="color: #3c4043; font-family: "Roboto Mono", Consolas, "Courier New", monospace; font-size: 13px; white-space: pre;"><br /></div><div style="color: #3c4043; font-family: "Roboto Mono", Consolas, "Courier New", monospace; font-size: 13px; white-space: pre;">使い方も簡単に書いておきます。</div><div style="color: #3c4043; font-family: "Roboto Mono", Consolas, "Courier New", monospace; font-size: 13px; white-space: pre;"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhu1DR-tdacxJb0l4mbsi82WpSJXquBXzg9vV-TW2sCm-tUWrco-rvjUYm1txFldtJintw7EexcC00DW4PlQg-ORhEDb6iYsRI_hOI6yNJ2VY5vnWguqwsmel_wRShPgIKnsASAtbkAhw/" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="105" data-original-width="686" height="49" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhu1DR-tdacxJb0l4mbsi82WpSJXquBXzg9vV-TW2sCm-tUWrco-rvjUYm1txFldtJintw7EexcC00DW4PlQg-ORhEDb6iYsRI_hOI6yNJ2VY5vnWguqwsmel_wRShPgIKnsASAtbkAhw/" width="320" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div>上の図のようにvarsのシートに</div></div><div style="color: #3c4043; font-family: "Roboto Mono", Consolas, "Courier New", monospace; font-size: 13px; white-space: pre;"><ol style="text-align: left;"><li>比較したいスプレッドシートのURLを記載します。</li><li>比較したいシートの名称を記載します。</li><li>キーとなるカラムを指定します。(複数時には、カンマ区切り)</li><li>比較したいカラムを指定します。(複数時には、カンマ区切り)</li></ol></div><div style="color: #3c4043; font-family: "Roboto Mono", Consolas, "Courier New", monospace; font-size: 13px; white-space: pre;">これらをセットして、メニューの比較ツール→比較実行から実行すると、Resultタブに結果が出てきます。</div><div style="color: #3c4043; font-family: "Roboto Mono", Consolas, "Courier New", monospace; font-size: 13px; white-space: pre;">それ以外のシートは作業用です。</div><div style="color: #3c4043; font-family: "Roboto Mono", Consolas, "Courier New", monospace; font-size: 13px; white-space: pre;"><br /></div><div style="color: #3c4043; font-family: "Roboto Mono", Consolas, "Courier New", monospace; font-size: 13px; white-space: pre;">結果の例)</div><div style="color: #3c4043; font-family: "Roboto Mono", Consolas, "Courier New", monospace; font-size: 13px; white-space: pre;"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyYayq241cqAsVg207XgYOXKi0_Y79K-jhXBvNIth4JjrITgYOVAGGeA44siJ2btaU9wcNtdTbN2MIOeeuUWvHqMdDI4zLCxoRWvZNVpvpY6SYFX1skjEhlrLE9Vf3lG5td-nELiRMCg/" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="167" data-original-width="501" height="107" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyYayq241cqAsVg207XgYOXKi0_Y79K-jhXBvNIth4JjrITgYOVAGGeA44siJ2btaU9wcNtdTbN2MIOeeuUWvHqMdDI4zLCxoRWvZNVpvpY6SYFX1skjEhlrLE9Vf3lG5td-nELiRMCg/" width="320" /></a></div><br /><br /></div><div style="color: #3c4043; font-family: "Roboto Mono", Consolas, "Courier New", monospace; font-size: 13px; white-space: pre;"><br /></div><div style="color: #3c4043; font-family: "Roboto Mono", Consolas, "Courier New", monospace; font-size: 13px; white-space: pre;">比較に使えるサンプルも用意してみましたのでそのまま実行できるのではないかと思います。</div><div><span style="color: #3c4043; font-family: Roboto Mono, Consolas, Courier New, monospace;"><span style="font-size: 13px; white-space: pre;"><a href="https://docs.google.com/spreadsheets/d/1dCF-3lBFXSmNFZaPGOJV9AMWPNYN9tXhibAiTWwuoRM/edit?usp=sharing">https://docs.google.com/spreadsheets/d/1dCF-3lBFXSmNFZaPGOJV9AMWPNYN9tXhibAiTWwuoRM/edit?usp=sharing</a></span></span></div><div><span style="color: #3c4043; font-family: Roboto Mono, Consolas, Courier New, monospace;"><span style="font-size: 13px; white-space: pre;"><a href="https://docs.google.com/spreadsheets/d/1nYw--oBuCfsoQX9NUzmH32KBTm0LzUputbK4mmnOp2g/edit?usp=sharing">https://docs.google.com/spreadsheets/d/1nYw--oBuCfsoQX9NUzmH32KBTm0LzUputbK4mmnOp2g/edit?usp=sharing</a></span></span></div><div style="color: #3c4043; font-family: "Roboto Mono", Consolas, "Courier New", monospace; font-size: 13px; white-space: pre;"><br /></div><div style="color: #3c4043; font-family: "Roboto Mono", Consolas, "Courier New", monospace; font-size: 13px; white-space: pre;"><div>30分くらいでぱっと作ったものなので、バグってたらすいません。</div><div><br /></div><div>2つのファイルを比較するって比較的ニーズはありそうなんですが、もしも、こんなこともやれるようにしたいなどのご要望があったら、</div><div>コメント欄からいただければ、ちょっとここから改善してみるかもしれません。</div><div><br /></div><div>声がなくても、自分用にいろいろ改善していこうかと思っています。</div></div></div>takes90http://www.blogger.com/profile/05643926860275746715[email protected]0tag:blogger.com,1999:blog-3408166605731182745.post-42293663112722567842021-03-22T12:34:00.002+09:002021-04-02T21:46:36.781+09:00Googleスプレッドシートのフィルタに別シートのListを使ってフィルタしたい<p> フィルタするときのフィルタに指定する値を別表に書いているものを使ってフィルタしたいという例があると思います。</p><p>例えば、</p><p>表1:</p><p><google-sheets-html-origin></google-sheets-html-origin></p><table border="1" cellpadding="0" cellspacing="0" dir="ltr" style="border-collapse: collapse; border: none; font-family: Arial; font-size: 10pt; table-layout: fixed; width: 0px;" xmlns="http://www.w3.org/1999/xhtml"><colgroup><col width="100"></col><col width="100"></col></colgroup><tbody><tr style="height: 21px;"><td data-sheets-value="{"1":2,"2":"A"}" style="border: 1px solid rgb(204, 204, 204); overflow: hidden; padding: 2px 3px; vertical-align: bottom;">A</td><td data-sheets-value="{"1":3,"3":1}" style="border: 1px solid rgb(204, 204, 204); overflow: hidden; padding: 2px 3px; text-align: right; vertical-align: bottom;">1</td></tr><tr style="height: 21px;"><td data-sheets-value="{"1":2,"2":"B"}" style="border: 1px solid rgb(204, 204, 204); overflow: hidden; padding: 2px 3px; vertical-align: bottom;">B</td><td data-sheets-value="{"1":3,"3":2}" style="border: 1px solid rgb(204, 204, 204); overflow: hidden; padding: 2px 3px; text-align: right; vertical-align: bottom;">2</td></tr><tr style="height: 21px;"><td data-sheets-value="{"1":2,"2":"C"}" style="border: 1px solid rgb(204, 204, 204); overflow: hidden; padding: 2px 3px; vertical-align: bottom;">C</td><td data-sheets-value="{"1":3,"3":3}" style="border: 1px solid rgb(204, 204, 204); overflow: hidden; padding: 2px 3px; text-align: right; vertical-align: bottom;">3</td></tr><tr style="height: 21px;"><td data-sheets-value="{"1":2,"2":"D"}" style="border: 1px solid rgb(204, 204, 204); overflow: hidden; padding: 2px 3px; vertical-align: bottom;">D</td><td data-sheets-value="{"1":3,"3":4}" style="border: 1px solid rgb(204, 204, 204); overflow: hidden; padding: 2px 3px; text-align: right; vertical-align: bottom;">4</td></tr><tr style="height: 21px;"><td data-sheets-value="{"1":2,"2":"B"}" style="border: 1px solid rgb(204, 204, 204); overflow: hidden; padding: 2px 3px; vertical-align: bottom;">B</td><td data-sheets-value="{"1":3,"3":5}" style="border: 1px solid rgb(204, 204, 204); overflow: hidden; padding: 2px 3px; text-align: right; vertical-align: bottom;">5</td></tr><tr style="height: 21px;"><td data-sheets-value="{"1":2,"2":"A"}" style="border: 1px solid rgb(204, 204, 204); overflow: hidden; padding: 2px 3px; vertical-align: bottom;">A</td><td data-sheets-value="{"1":3,"3":6}" style="border: 1px solid rgb(204, 204, 204); overflow: hidden; padding: 2px 3px; text-align: right; vertical-align: bottom;">6</td></tr><tr style="height: 21px;"><td data-sheets-value="{"1":2,"2":"B"}" style="border: 1px solid rgb(204, 204, 204); overflow: hidden; padding: 2px 3px; vertical-align: bottom;">B</td><td data-sheets-value="{"1":3,"3":7}" style="border: 1px solid rgb(204, 204, 204); overflow: hidden; padding: 2px 3px; text-align: right; vertical-align: bottom;">7</td></tr><tr style="height: 21px;"><td data-sheets-value="{"1":2,"2":"C"}" style="border: 1px solid rgb(204, 204, 204); overflow: hidden; padding: 2px 3px; vertical-align: bottom;">C</td><td data-sheets-value="{"1":3,"3":8}" style="border: 1px solid rgb(204, 204, 204); overflow: hidden; padding: 2px 3px; text-align: right; vertical-align: bottom;">8</td></tr><tr style="height: 21px;"><td data-sheets-value="{"1":2,"2":"C"}" style="border: 1px solid rgb(204, 204, 204); overflow: hidden; padding: 2px 3px; vertical-align: bottom;">C</td><td data-sheets-value="{"1":3,"3":9}" style="border: 1px solid rgb(204, 204, 204); overflow: hidden; padding: 2px 3px; text-align: right; vertical-align: bottom;">9</td></tr><tr style="height: 21px;"><td data-sheets-value="{"1":2,"2":"D"}" style="border: 1px solid rgb(204, 204, 204); overflow: hidden; padding: 2px 3px; vertical-align: bottom;">D</td><td data-sheets-value="{"1":3,"3":10}" style="border: 1px solid rgb(204, 204, 204); overflow: hidden; padding: 2px 3px; text-align: right; vertical-align: bottom;">10</td></tr></tbody></table><p>表2:</p><p><google-sheets-html-origin></google-sheets-html-origin></p><table border="1" cellpadding="0" cellspacing="0" dir="ltr" style="border-collapse: collapse; border: none; font-family: Arial; font-size: 10pt; table-layout: fixed; width: 0px;" xmlns="http://www.w3.org/1999/xhtml"><colgroup><col width="100"></col></colgroup><tbody><tr style="height: 21px;"><td data-sheets-value="{"1":2,"2":"A"}" style="border: 1px solid rgb(204, 204, 204); overflow: hidden; padding: 2px 3px; vertical-align: bottom;">A</td></tr><tr style="height: 21px;"><td data-sheets-value="{"1":2,"2":"B"}" style="border: 1px solid rgb(204, 204, 204); overflow: hidden; padding: 2px 3px; vertical-align: bottom;">B</td></tr></tbody></table><p>があり、表1をA,Bでフィルタをかけたいというようなイメージです。</p><p><br /></p><p>SQLのイメージ的にいうと</p><p>SELECT * from 表1 where ID in (SELECT ID from 表2)</p><p>みたいなイメージのことをSpreadSheetを使ってやりたいなというところです。</p><p><br /></p><p>これどうやってやるのが一番簡単なのかちょっといろいろ探ってみたのですが、</p><p>おそらく、FILTER関数とMATCH関数を使って実現するのがよさそうです。</p><p><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;"><br /></span></p><p><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">書き方は下記の感じです。</span></p><p><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;"><span class=" default-formula-text-color" dir="auto">=</span><span class=" default-formula-text-color" dir="auto">FILTER</span><span class=" default-formula-text-color" dir="auto">(<span style="color: #f7981d;">フィルタしたい票の範囲</span></span><span class=" default-formula-text-color" dir="auto">,</span><span class=" default-formula-text-color" dir="auto">MATCH</span><span class=" default-formula-text-color" dir="auto">(<span style="color: #7e3794;">フィルタしたい範囲の条件部分</span></span><span class=" default-formula-text-color" dir="auto">,<span style="color: #11a9cc;">フィルタを掛けたい値の別表</span></span><span class=" default-formula-text-color" dir="auto">,</span><span class="number" dir="auto" style="color: #1155cc;">0</span><span class=" default-formula-text-color" dir="auto">)</span><span class=" default-formula-text-color" dir="auto">)</span></span></p><p><span style="font-family: Inconsolata, monospace, arial, sans, sans-serif;"><span style="background-color: white; font-size: 14px; white-space: pre-wrap;">実例はこちらになります。</span></span></p><p><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">=</span><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">FILTER</span><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">(</span><span dir="auto" style="background-color: white; color: #f7981d; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">A1:B10</span><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">,</span><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">MATCH</span><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">(</span><span dir="auto" style="background-color: white; color: #7e3794; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">A1:A10</span><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">,</span><span dir="auto" style="background-color: white; color: #11a9cc; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">'別表2'!A1:A2</span><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">,</span><span class="number" dir="auto" style="background-color: white; color: #1155cc; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">0</span><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">)</span><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">)</span></p><p><br /></p><p>実際のサンプルスプレッドシートはこちらです。</p><p><a href="https://docs.google.com/spreadsheets/d/1tSr8mukLFhREQCYxy6gsp2QUz9-Ie6liPV7uHt3fOh0/edit?usp=sharing">https://docs.google.com/spreadsheets/d/1tSr8mukLFhREQCYxy6gsp2QUz9-Ie6liPV7uHt3fOh0/edit?usp=sharing</a></p><p><br /></p><p><br /></p>takes90http://www.blogger.com/profile/05643926860275746715[email protected]0tag:blogger.com,1999:blog-3408166605731182745.post-33953450536281449152020-11-30T22:33:00.003+09:002020-11-30T22:33:16.095+09:00Spreadsheetにて正規表現にマッチした値を取り出す。<p>例えば、Google spread sheetで数字の部分だけを取り出したいとかいうニーズがあったりします。</p><p>そんな時に利用できるのが、REGEXTRACT関数です。</p><p>正規表現を使って文字列を抽出することができます。</p><p>例えば、「10円」というセルから10を取り出そうと思うと、</p><p><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">=</span><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">REGEXEXTRACT</span><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">(</span><span dir="auto" style="background-color: white; color: #f7981d; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">A2</span><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">,</span><span class=" string " dir="auto" style="background-color: white; color: green; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">"[0-9]+"</span><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">)</span></p><p>と記述することにより、10の部分を取り出すことができます。</p><p><br /></p><p>他の例だと、例えば、メールのアドレス部分が、</p><p>「<span style="font-family: Arial; font-size: 10pt;">サンプル太郎 <[email protected]></span>」のような形式で入っていた場合。</p><p>下記のように記述すると、名前の部分が取り出せます。</p><p><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">=</span><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">REGEXEXTRACT</span><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">(</span><span dir="auto" style="background-color: white; color: #f7981d; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">E2</span><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">,</span><span class=" string " dir="auto" style="background-color: white; color: green; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">"(.+)<"</span><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">)</span></p><p>また、下のように書くとメールアドレスの部分を取り出せますね。</p><p><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">=</span><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">REGEXEXTRACT</span><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">(</span><span dir="auto" style="background-color: white; color: #f7981d; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">E2</span><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">,</span><span class=" string " dir="auto" style="background-color: white; color: green; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">"<(.+)>"</span><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">)</span></p><p><br /></p><p>このように、文字列を自由自在に分解できると、また、spreadsheetの活用範囲が広がるのではないでしょうか。 </p><p>本日の関数の実サンプルは<a href="https://docs.google.com/spreadsheets/d/1s6cJOtYSU9Dxpu_6cDSyCNQ7vBTo6QhOc3T_4Szgsjo/edit?usp=sharing">こちら</a>のリンクを参照ください。</p>takes90http://www.blogger.com/profile/05643926860275746715[email protected]0tag:blogger.com,1999:blog-3408166605731182745.post-60860283860909890942020-11-27T22:43:00.003+09:002020-11-27T22:43:42.846+09:00Google Spread Sheetですべての値の一覧化をしたいときに使う関数(UNIQUE)<p>ある列に入っている値の一覧を取得したいと思うことがあると思います。</p><p>そんな時に使う関数が、UNIQUE関数です。</p><p>利用方法は簡単です。A列に入っている値の一覧が取得したいときには、下記のように記述します。</p><p><span style="background-color: #fff2cc;"><i><span class=" default-formula-text-color" dir="auto" style="font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">=</span><span class=" default-formula-text-color" dir="auto" style="font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">UNIQUE</span><span class=" default-formula-text-color" dir="auto" style="font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">(</span><span dir="auto" style="color: #f7981d; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">A2:A10</span><span class=" default-formula-text-color" dir="auto" style="font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">)</span></i></span></p><p> このように書くと、ここから下に、一意な値が並びます。</p><p>それをさらに並べ替えたい場合には、SORT関数を使います。</p><p><i><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">=</span><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">SORT</span><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">(</span><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">UNIQUE</span><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">(</span><span dir="auto" style="background-color: white; color: #f7981d; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">C2:C10</span><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">)</span><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">)</span></i></p><p>これで、一覧を作成したうえで並び替えることができます。</p><p>実際のSpreadsheetのサンプルのURLは<a href="https://docs.google.com/spreadsheets/d/1mtS_k_4miQHn_s2CrRI18WEHTr9O_7-9DGJmt22ZdKY/edit#gid=0">こちら</a>。</p><p><br /></p>takes90http://www.blogger.com/profile/05643926860275746715[email protected]0tag:blogger.com,1999:blog-3408166605731182745.post-90309674017918715382020-11-05T21:57:00.003+09:002020-11-09T07:58:31.679+09:00Google spreadsheetを使って自動応答メールの作成<p> Google Apps scriptを使ってSpreadSheetを開いたらメールを送る例は、<a href="https://ttimez.blogspot.com/2020/11/google-app-script.html">前回の記事</a>でも紹介しました。</p><p>似たようなユースケースですが、今回は、フォームを使って自動送信メールを実現する方法を紹介します。メール送信プログラムは前回の記事で紹介したので本日は割愛します。</p><p>また、フォームの作成は、<a href="https://ttimez.blogspot.com/2020/10/google-spreadsheetcountcountifcountifs.html">以前の記事</a>で紹介しているのでこれも割愛します。</p><p>メールのプログラムを書いた後に、スクリプトエディタ上の「編集」→「現在のプロジェクトのトリガー」より、トリガを作成のボタンを押していただき、イベントの種類を選択から「フォーム送信時」を選ぶとフォームを提出したときに自動的にメールを送信することができます。</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhmq1QDr6nKjA-UFLxesIeLF19lHlatm5EIv1rcyWqf_5rpkDufvDtl9KRvT_ieWy-f_v4volVbC6zddG8Fxud7MSmFdVSMLXKW5rhb7UAKT1x00o0MG3wLckDkvL1xae25u0mLi0ISaA/" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="502" data-original-width="667" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhmq1QDr6nKjA-UFLxesIeLF19lHlatm5EIv1rcyWqf_5rpkDufvDtl9KRvT_ieWy-f_v4volVbC6zddG8Fxud7MSmFdVSMLXKW5rhb7UAKT1x00o0MG3wLckDkvL1xae25u0mLi0ISaA/" width="319" /></a></div><br />前回の記事のあて先部分を下記のようにすると、提出者に対してメールを送信することができますね。<p></p><p> var toAdr = Session.getActiveUser().getEmail() ;</p><p><br /></p><p>これを使うと例えば下記のようなことが実現できます。</p><p></p><ul style="text-align: left;"><li>フォーム回答時にお礼のメールを送信する</li><li>下記の内容で受け付けました的なお知らせメール</li><li>申込者に対して秘密のURLなどを送付する。アンケート回答のお礼のクーポンとかもそのたぐいですね。</li></ul><div>便利ですね。日々の仕事とかちょっとした部分に色々使えそうです。</div><div><br /></div><div>コメント欄に、こういう使い方がしてみたとか、こういう使い方ってできるかなどの質問なども気軽にいただけるとありがたいです。</div><p></p>takes90http://www.blogger.com/profile/05643926860275746715[email protected]0tag:blogger.com,1999:blog-3408166605731182745.post-90511300082198347892020-11-04T21:37:00.006+09:002020-11-04T21:37:45.762+09:00Google App Script でメールを送信する<p> 例えば、下記のようなことをしたくないでしょうか。</p><p>例えば、鍵が開錠されたら通知をしたいけど、鍵は、単なる物理鍵なので、通知は難しい。</p><p><br /></p><p>そんな時に、下記のような構成にすることによって、疑似的に実現可能かなと思っています。</p><p>・暗証番号などのカギをGoogle spreadsheetに書いておく。</p><p>・Google spreadsheetが開かれたら、誰が開いたかを管理者にメールする</p><p>このようなことが、Google spreadsheetとGoogle apps scriptを使うと簡単にできます。</p><p>暗証番号型のカギで鍵をかけてその暗証番号などの秘密のファイルをどこかにおいておき、</p><p>そのファイルが開封されたら、通知してほしい。</p><p>まず、Google spreadsheetから「ツール」→「スクリプトエディタ」を開きます。</p><p>その後下記のようなコードを書きます。</p><p><pre></p><p>function send_mail(){</p><p> var toAdr = "[email protected]";</p><p> var ccAdr = "";</p><p> var bccAdr = "";</p><p> var subject = "";</p><p> var name = "";</p><p> var files = new Array();</p><p> var body = Session.getActiveUser().getEmail() +</p><p> "さんから訪問がありました。\n";</p><p> </p><p> MailApp.sendEmail({to:toAdr, cc:ccAdr, bcc:bccAdr, subject:subject, name:name, body:body, attachments:files});</p><p>}</p><p></pre></p><p>Session.getActiveUser().getEmail() は接続者のメールアドレス情報を取得します。</p><p>MailApp.sendEmailはメールの送信をする関数です。</p><p><br /></p><p>toAdrに送信したいあtメールアドレスをいれてください。</p><p>その後、スクリプトエディタ上で、実行→関数を実行→send_mailを選択すると許可を求める画面が出てきます。今ログインしているユーザの代わりにメールを送信する許可を求められるので、問題がなければ許可をします。</p><p>すると、メールが送信されると思います。</p><p>次に、スクリプトエディタ上の「編集」→「現在のプロジェクトのトリガー」を選択すると、この関数をいつ発火するかを選択できます。「トリガーを追加」を押して起動時に発火するように下記の通り、選択します。</p><p>イベントの種類を「起動時」とすることでファイルを開いたときにメール送信関数を呼び出すようにすることができます。</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhqNK2ghGKuVescTJZbJTGwM9BhseGmijA-LG0VbzATtxTNMaMf6Ds9HvIQwHBlzGRgoa_dWJ4KCScM0CZUtEvo9ef4ez4LBWpQ6UtD89CH9wugr8VRRq4_B2mcTCyKrvBwQbV00vbWUA/" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="501" data-original-width="666" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhqNK2ghGKuVescTJZbJTGwM9BhseGmijA-LG0VbzATtxTNMaMf6Ds9HvIQwHBlzGRgoa_dWJ4KCScM0CZUtEvo9ef4ez4LBWpQ6UtD89CH9wugr8VRRq4_B2mcTCyKrvBwQbV00vbWUA/" width="319" /></a></div>以上のステップのみで、冒頭に述べたことが実現できます。<p></p><p>とても簡単ですね。。。<br /><br /></p><p><br /></p>takes90http://www.blogger.com/profile/05643926860275746715[email protected]0tag:blogger.com,1999:blog-3408166605731182745.post-43893735397719115462020-10-30T23:35:00.002+09:002020-11-04T21:38:26.580+09:00Google spreadsheetの関数を使ってみる(QUERY)<p><a href="https://ttimez.blogspot.com/2020/10/google-spreadsheetsumsumifsumifs.html"> 前回の記事</a>では、集計の方法として、SUMIFなどの関数を紹介しました。</p><p>今回の集計に使える関数の紹介です。SQLなどになじみのある方は、この関数が便利に感じると思います。</p><p>前回の記事と同じように、支払い種別、用途、金額という表があった時に、支払種別と用途ごとに集計したいというような場合に、SQLだと、</p><p>select 支払い,用途,sum(金額) from xxx group by 支払い、用途 </p><p>というようなSQLで集計するとおもいます。これはSpreadsheetでも同様に描くことができます。</p><p><google-sheets-html-origin></google-sheets-html-origin></p><table border="1" cellpadding="0" cellspacing="0" dir="ltr" style="border-collapse: collapse; border: none; font-family: Arial; font-size: 10pt; table-layout: fixed; width: 0px;" xmlns="http://www.w3.org/1999/xhtml"><colgroup><col width="100"></col><col width="100"></col><col width="100"></col></colgroup><tbody><tr style="height: 21px;"><td data-sheets-value="{"1":2,"2":"支払い"}" style="background-color: #f4cccc; border: 1px solid rgb(204, 204, 204); overflow: hidden; padding: 2px 3px; vertical-align: bottom;">支払い</td><td data-sheets-value="{"1":2,"2":"用途"}" style="background-color: #f4cccc; border: 1px solid rgb(204, 204, 204); overflow: hidden; padding: 2px 3px; vertical-align: bottom;">用途</td><td data-sheets-value="{"1":2,"2":"金額"}" style="background-color: #f4cccc; border: 1px solid rgb(204, 204, 204); overflow: hidden; padding: 2px 3px; vertical-align: bottom;">金額</td></tr><tr style="height: 21px;"><td data-sheets-value="{"1":2,"2":"現金"}" style="border: 1px solid rgb(204, 204, 204); overflow: hidden; padding: 2px 3px; vertical-align: bottom;">現金</td><td data-sheets-value="{"1":2,"2":"食費"}" style="border: 1px solid rgb(204, 204, 204); overflow: hidden; padding: 2px 3px; vertical-align: bottom;">食費</td><td data-sheets-numberformat="{"1":4,"2":"[$¥]#,##0"}" data-sheets-value="{"1":3,"3":1000}" style="border: 1px solid rgb(204, 204, 204); overflow: hidden; padding: 2px 3px; text-align: right; vertical-align: bottom;">¥1,000</td></tr><tr style="height: 21px;"><td data-sheets-value="{"1":2,"2":"現金"}" style="border: 1px solid rgb(204, 204, 204); overflow: hidden; padding: 2px 3px; vertical-align: bottom;">現金</td><td data-sheets-value="{"1":2,"2":"交通費"}" style="border: 1px solid rgb(204, 204, 204); overflow: hidden; padding: 2px 3px; vertical-align: bottom;">交通費</td><td data-sheets-numberformat="{"1":4,"2":"[$¥]#,##0"}" data-sheets-value="{"1":3,"3":1000}" style="border: 1px solid rgb(204, 204, 204); overflow: hidden; padding: 2px 3px; text-align: right; vertical-align: bottom;">¥1,000</td></tr><tr style="height: 21px;"><td data-sheets-value="{"1":2,"2":"現金"}" style="border: 1px solid rgb(204, 204, 204); overflow: hidden; padding: 2px 3px; vertical-align: bottom;">現金</td><td data-sheets-value="{"1":2,"2":"食費"}" style="border: 1px solid rgb(204, 204, 204); overflow: hidden; padding: 2px 3px; vertical-align: bottom;">食費</td><td data-sheets-numberformat="{"1":4,"2":"[$¥]#,##0"}" data-sheets-value="{"1":3,"3":600}" style="border: 1px solid rgb(204, 204, 204); overflow: hidden; padding: 2px 3px; text-align: right; vertical-align: bottom;">¥600</td></tr><tr style="height: 21px;"><td data-sheets-value="{"1":2,"2":"現金"}" style="border: 1px solid rgb(204, 204, 204); overflow: hidden; padding: 2px 3px; vertical-align: bottom;">現金</td><td data-sheets-value="{"1":2,"2":"娯楽費"}" style="border: 1px solid rgb(204, 204, 204); overflow: hidden; padding: 2px 3px; vertical-align: bottom;">娯楽費</td><td data-sheets-numberformat="{"1":4,"2":"[$¥]#,##0"}" data-sheets-value="{"1":3,"3":1500}" style="border: 1px solid rgb(204, 204, 204); overflow: hidden; padding: 2px 3px; text-align: right; vertical-align: bottom;">¥1,500</td></tr><tr style="height: 21px;"><td data-sheets-value="{"1":2,"2":"現金"}" style="border: 1px solid rgb(204, 204, 204); overflow: hidden; padding: 2px 3px; vertical-align: bottom;">現金</td><td data-sheets-value="{"1":2,"2":"食費"}" style="border: 1px solid rgb(204, 204, 204); overflow: hidden; padding: 2px 3px; vertical-align: bottom;">食費</td><td data-sheets-numberformat="{"1":4,"2":"[$¥]#,##0"}" data-sheets-value="{"1":3,"3":500}" style="border: 1px solid rgb(204, 204, 204); overflow: hidden; padding: 2px 3px; text-align: right; vertical-align: bottom;">¥500</td></tr><tr style="height: 21px;"><td data-sheets-value="{"1":2,"2":"クレジットカード"}" style="border: 1px solid rgb(204, 204, 204); overflow: hidden; padding: 2px 3px; vertical-align: bottom;">クレジットカード</td><td data-sheets-value="{"1":2,"2":"医療費"}" style="border: 1px solid rgb(204, 204, 204); overflow: hidden; padding: 2px 3px; vertical-align: bottom;">医療費</td><td data-sheets-numberformat="{"1":4,"2":"[$¥]#,##0"}" data-sheets-value="{"1":3,"3":30000}" style="border: 1px solid rgb(204, 204, 204); overflow: hidden; padding: 2px 3px; text-align: right; vertical-align: bottom;">¥30,000</td></tr><tr style="height: 21px;"><td data-sheets-value="{"1":2,"2":"現金"}" style="border: 1px solid rgb(204, 204, 204); overflow: hidden; padding: 2px 3px; vertical-align: bottom;">現金</td><td data-sheets-value="{"1":2,"2":"薬代"}" style="border: 1px solid rgb(204, 204, 204); overflow: hidden; padding: 2px 3px; vertical-align: bottom;">薬代</td><td data-sheets-numberformat="{"1":4,"2":"[$¥]#,##0"}" data-sheets-value="{"1":3,"3":1500}" style="border: 1px solid rgb(204, 204, 204); overflow: hidden; padding: 2px 3px; text-align: right; vertical-align: bottom;">¥1,500</td></tr><tr style="height: 21px;"><td data-sheets-value="{"1":2,"2":"現金"}" style="border: 1px solid rgb(204, 204, 204); overflow: hidden; padding: 2px 3px; vertical-align: bottom;">現金</td><td data-sheets-value="{"1":2,"2":"医療費"}" style="border: 1px solid rgb(204, 204, 204); overflow: hidden; padding: 2px 3px; vertical-align: bottom;">医療費</td><td data-sheets-numberformat="{"1":4,"2":"[$¥]#,##0"}" data-sheets-value="{"1":3,"3":3000}" style="border: 1px solid rgb(204, 204, 204); overflow: hidden; padding: 2px 3px; text-align: right; vertical-align: bottom;">¥3,000</td></tr><tr style="height: 21px;"><td data-sheets-value="{"1":2,"2":"クレジットカード"}" style="border: 1px solid rgb(204, 204, 204); overflow: hidden; padding: 2px 3px; vertical-align: bottom;">クレジットカード</td><td data-sheets-value="{"1":2,"2":"医療費"}" style="border: 1px solid rgb(204, 204, 204); overflow: hidden; padding: 2px 3px; vertical-align: bottom;">医療費</td><td data-sheets-numberformat="{"1":4,"2":"[$¥]#,##0"}" data-sheets-value="{"1":3,"3":18000}" style="border: 1px solid rgb(204, 204, 204); overflow: hidden; padding: 2px 3px; text-align: right; vertical-align: bottom;">¥18,000</td></tr></tbody></table><p>セルに下記のように書いてみましょう。</p><p><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">=</span><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">QUERY</span><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">(</span><span dir="auto" style="background-color: white; color: #f7981d; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">A2:C10</span><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">,</span><span class=" string " dir="auto" style="background-color: white; color: green; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">"select A,B,sum(C) group by A,B"</span><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">,</span><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">-</span><span class="number" dir="auto" style="background-color: white; color: #1155cc; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">1</span><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">)</span></p><p>SQLの集計関数と同じ文法が書けます。最初の引数は、範囲。次がQuery文字。</p><p>これを書くと下記のように表示することができます。</p><p><google-sheets-html-origin></google-sheets-html-origin></p><table border="1" cellpadding="0" cellspacing="0" dir="ltr" style="border-collapse: collapse; border: none; font-family: Arial; font-size: 10pt; table-layout: fixed; width: 0px;" xmlns="http://www.w3.org/1999/xhtml"><colgroup><col width="100"></col><col width="100"></col><col width="100"></col></colgroup><tbody><tr style="height: 21px;"><td data-sheets-value="{"1":2,"2":"クレジットカード"}" style="border: 1px solid rgb(204, 204, 204); overflow: hidden; padding: 2px 3px; vertical-align: bottom;">クレジットカード</td><td data-sheets-value="{"1":2,"2":"医療費"}" style="border: 1px solid rgb(204, 204, 204); overflow: hidden; padding: 2px 3px; vertical-align: bottom;">医療費</td><td data-sheets-value="{"1":3,"3":48000}" style="border: 1px solid rgb(204, 204, 204); overflow: hidden; padding: 2px 3px; text-align: right; vertical-align: bottom;">48000</td></tr><tr style="height: 21px;"><td data-sheets-value="{"1":2,"2":"現金"}" style="border: 1px solid rgb(204, 204, 204); overflow: hidden; padding: 2px 3px; vertical-align: bottom;">現金</td><td data-sheets-value="{"1":2,"2":"交通費"}" style="border: 1px solid rgb(204, 204, 204); overflow: hidden; padding: 2px 3px; vertical-align: bottom;">交通費</td><td data-sheets-value="{"1":3,"3":1000}" style="border: 1px solid rgb(204, 204, 204); overflow: hidden; padding: 2px 3px; text-align: right; vertical-align: bottom;">1000</td></tr><tr style="height: 21px;"><td data-sheets-value="{"1":2,"2":"現金"}" style="border: 1px solid rgb(204, 204, 204); overflow: hidden; padding: 2px 3px; vertical-align: bottom;">現金</td><td data-sheets-value="{"1":2,"2":"医療費"}" style="border: 1px solid rgb(204, 204, 204); overflow: hidden; padding: 2px 3px; vertical-align: bottom;">医療費</td><td data-sheets-value="{"1":3,"3":3000}" style="border: 1px solid rgb(204, 204, 204); overflow: hidden; padding: 2px 3px; text-align: right; vertical-align: bottom;">3000</td></tr><tr style="height: 21px;"><td data-sheets-value="{"1":2,"2":"現金"}" style="border: 1px solid rgb(204, 204, 204); overflow: hidden; padding: 2px 3px; vertical-align: bottom;">現金</td><td data-sheets-value="{"1":2,"2":"娯楽費"}" style="border: 1px solid rgb(204, 204, 204); overflow: hidden; padding: 2px 3px; vertical-align: bottom;">娯楽費</td><td data-sheets-value="{"1":3,"3":1500}" style="border: 1px solid rgb(204, 204, 204); overflow: hidden; padding: 2px 3px; text-align: right; vertical-align: bottom;">1500</td></tr><tr style="height: 21px;"><td data-sheets-value="{"1":2,"2":"現金"}" style="border: 1px solid rgb(204, 204, 204); overflow: hidden; padding: 2px 3px; vertical-align: bottom;">現金</td><td data-sheets-value="{"1":2,"2":"薬代"}" style="border: 1px solid rgb(204, 204, 204); overflow: hidden; padding: 2px 3px; vertical-align: bottom;">薬代</td><td data-sheets-value="{"1":3,"3":1500}" style="border: 1px solid rgb(204, 204, 204); overflow: hidden; padding: 2px 3px; text-align: right; vertical-align: bottom;">1500</td></tr><tr style="height: 21px;"><td data-sheets-value="{"1":2,"2":"現金"}" style="border: 1px solid rgb(204, 204, 204); overflow: hidden; padding: 2px 3px; vertical-align: bottom;">現金</td><td data-sheets-value="{"1":2,"2":"食費"}" style="border: 1px solid rgb(204, 204, 204); overflow: hidden; padding: 2px 3px; vertical-align: bottom;">食費</td><td data-sheets-value="{"1":3,"3":2100}" style="border: 1px solid rgb(204, 204, 204); overflow: hidden; padding: 2px 3px; text-align: right; vertical-align: bottom;">2100</td></tr></tbody></table><p>Joinなどはできませんが、それでもSQLに慣れている人にとっては非常に便利な関数です。</p><p>SQLに慣れ親しんでいる人は、いろいろ関数を組んで書くよりも楽かもしれませんね。</p><p>今回のスプレッドシートの例は、<a href="https://docs.google.com/spreadsheets/d/10pYLcvTSrOssV15RJIbbNwe2LUUhpMTds_eBgiyExHw/edit?usp=sharing">こちら</a>。</p>takes90http://www.blogger.com/profile/05643926860275746715[email protected]0tag:blogger.com,1999:blog-3408166605731182745.post-25304607671481012662020-10-29T21:57:00.004+09:002020-10-29T21:57:42.665+09:00Google spreadsheetの関数を使ってみる(SUM/SUMIF/SUMIFS)<p>昨日は、件数を算出する関数について書きました。</p><p><a href="https://ttimez.blogspot.com/2020/10/google-spreadsheetcountcountifcountifs.html">昨日の記事</a>。 </p><p>本日は、似たような関数の集計系の関数について記載します。</p><p>まず、一番有名でシンプルな関数は、単純にすべての数字を足す関数です。</p><p>これは、シンプルに下記のように書きます。</p><p><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">=SUM</span><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">(</span><span dir="auto" style="background-color: white; color: #f7981d; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">C2:C100</span><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">)</span></p><p>C列の2行目から100行目を足すときにつかします。</p><p>次に条件に一致したときに足すという関数SUMIFです。</p><p><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">=</span><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">SUMIF</span><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">(</span><span dir="auto" style="background-color: white; color: #f7981d; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">B2:B100</span><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">,</span><span class=" string " dir="auto" style="background-color: white; color: green; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">"食費"</span><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">,</span><span dir="auto" style="background-color: white; color: #7e3794; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">C2:C100</span><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">)</span></p><p><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">B列に用途、C列に金額というような表があった時には、上のように書くと、食費の合計値を算出することができます。</span></p><p><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">さらに、複合条件にしたい場合には、SUMIFSという関数を利用します。</span></p><p><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;"><span class=" default-formula-text-color" dir="auto">=</span><span class=" default-formula-text-color" dir="auto">SUMIFS</span><span class=" default-formula-text-color" dir="auto">(</span><span dir="auto" style="color: #f7981d;">C2:C100</span><span class=" default-formula-text-color" dir="auto">,</span><span dir="auto" style="color: #7e3794;">B2:B100</span><span class=" default-formula-text-color" dir="auto">,</span><span class=" string " dir="auto" style="color: green;">"医療費"</span><span class=" default-formula-text-color" dir="auto">,</span><span dir="auto" style="color: #11a9cc;">A2:A100</span><span class=" default-formula-text-color" dir="auto">,</span><span class=" string " dir="auto" style="color: green;">"クレジットカード"</span><span class=" default-formula-text-color" dir="auto">)</span></span></p><p><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;"><span class=" default-formula-text-color" dir="auto">A列に支払い種別、</span></span><span style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">B列に用途、C列に金額というような表があった時にクレジットカード払いの医療費というのを集計したい場合には、SUMIFなどの関数を利用します。</span></p><p>いりいろと便利な関数が多いですね。</p><p>本日のサンプルスプレッドシートは<a href="https://docs.google.com/spreadsheets/d/1TSvXMBJw3EIMuL_mJGrqpsa0jVWg_spB3gyptHvr9QE/edit?usp=sharing">こちら</a>になります。</p>takes90http://www.blogger.com/profile/05643926860275746715[email protected]0tag:blogger.com,1999:blog-3408166605731182745.post-11840898613244949572020-10-28T23:23:00.001+09:002020-10-28T23:23:16.225+09:00Google spreadsheetの関数を使ってみる(COUNT/COUNTIF/COUNTIFS)Google Spreadsheetには、アンケートフォームを作って、その結果をspreadsheetに転記する機能があります。これは、「挿入」→「フォーム」で作成できます。<div><br /></div><div>例えばこんなフォームができます。</div><div><a href="https://docs.google.com/forms/d/e/1FAIpQLSdSfizwWS_FP94glDc91hyoLsj6rwcKNmcwM0UWjyTKj1w6GA/viewform?usp=sf_link">https://docs.google.com/forms/d/e/1FAIpQLSdSfizwWS_FP94glDc91hyoLsj6rwcKNmcwM0UWjyTKj1w6GA/viewform?usp=sf_link</a></div><div><br /></div><div>そして、これに回答すると、こんな感じのシートに自動的に転記されます。</div><div><a href="https://docs.google.com/spreadsheets/d/1_YZq5FrqiZTS1Fn5k6Dc7LHmrepLAq6wexM8BrwKuT4/edit?usp=sharing">https://docs.google.com/spreadsheets/d/1_YZq5FrqiZTS1Fn5k6Dc7LHmrepLAq6wexM8BrwKuT4/edit?usp=sharing</a></div><div><br /></div><div>さて、このような状況の中、今回は、これらと一緒に集計をしていきたいというようなケースに利用可能なCOUNT系の関数を紹介します。</div><div><ul style="text-align: left;"><li>アンケートの合計数</li><li>男性数</li><li>20代の数</li></ul></div><div> という3つのパターンを集計する方法を紹介します。</div><div><br /></div><div>アンケートの合計数は、 <span style="color: #2b00fe;"><span class="default-formula-text-color" dir="auto" face="Inconsolata, monospace, arial, sans, sans-serif" style="background-color: white; font-size: 14px; white-space: pre-wrap;">=</span><span class="default-formula-text-color" dir="auto" face="Inconsolata, monospace, arial, sans, sans-serif" style="background-color: white; font-size: 14px; white-space: pre-wrap;">COUNT</span><span class="default-formula-text-color" dir="auto" face="Inconsolata, monospace, arial, sans, sans-serif" style="background-color: white; font-size: 14px; white-space: pre-wrap;">(</span><span class="default-formula-text-color" dir="auto" face="Inconsolata, monospace, arial, sans, sans-serif" style="background-color: white; font-size: 14px; white-space: pre-wrap;">FormResponses3!A2:A10001</span></span><span class="default-formula-text-color" dir="auto" face="Inconsolata, monospace, arial, sans, sans-serif" style="background-color: white; font-size: 14px; white-space: pre-wrap;"><span style="color: #2b00fe;">)</span> という感じです。</span></div><div><span class="default-formula-text-color" dir="auto" face="Inconsolata, monospace, arial, sans, sans-serif" style="background-color: white; font-size: 14px; white-space: pre-wrap;">単純にA2からA10001までの件数を返してくれます。</span></div><div><span class="default-formula-text-color" dir="auto" face="Inconsolata, monospace, arial, sans, sans-serif" style="background-color: white; font-size: 14px; white-space: pre-wrap;"><br /></span></div><div><span class="default-formula-text-color" dir="auto" face="Inconsolata, monospace, arial, sans, sans-serif" style="background-color: white; font-size: 14px; white-space: pre-wrap;">男性数は、 </span><span style="color: #2b00fe;"><span class="default-formula-text-color" dir="auto" face="Inconsolata, monospace, arial, sans, sans-serif" style="background-color: white; font-size: 14px; white-space: pre-wrap;">=</span><span class="default-formula-text-color" dir="auto" face="Inconsolata, monospace, arial, sans, sans-serif" style="background-color: white; font-size: 14px; white-space: pre-wrap;">COUNTIF</span><span class="default-formula-text-color" dir="auto" face="Inconsolata, monospace, arial, sans, sans-serif" style="background-color: white; font-size: 14px; white-space: pre-wrap;">(</span><span class="default-formula-text-color" dir="auto" face="Inconsolata, monospace, arial, sans, sans-serif" style="background-color: white; font-size: 14px; white-space: pre-wrap;">FormResponses3!B2:B10002</span><span class="default-formula-text-color" dir="auto" face="Inconsolata, monospace, arial, sans, sans-serif" style="background-color: white; font-size: 14px; white-space: pre-wrap;">,</span><span class="string" dir="auto" face="Inconsolata, monospace, arial, sans, sans-serif" style="background-color: white; font-size: 14px; white-space: pre-wrap;">"男"</span></span><span class="default-formula-text-color" dir="auto" face="Inconsolata, monospace, arial, sans, sans-serif" style="background-color: white; font-size: 14px; white-space: pre-wrap;"><span style="color: #2b00fe;">)</span> という感じです。</span></div><div>引数の最初の部分は、範囲、2番目は条件です。つまりB列が"男"の件数が返ってきます。</div><div><br /></div><div>20代の数は、COUNTIFSという関数を使います。</div><div><br /></div><div><span class="default-formula-text-color" dir="auto" face="Inconsolata, monospace, arial, sans, sans-serif" style="background-color: white; font-size: 14px; white-space: pre-wrap;">=</span><span class="default-formula-text-color" dir="auto" face="Inconsolata, monospace, arial, sans, sans-serif" style="background-color: white; font-size: 14px; white-space: pre-wrap;">COUNTIFS</span><span class="default-formula-text-color" dir="auto" face="Inconsolata, monospace, arial, sans, sans-serif" style="background-color: white; font-size: 14px; white-space: pre-wrap;">(</span><span class="default-formula-text-color" dir="auto" face="Inconsolata, monospace, arial, sans, sans-serif" style="background-color: white; font-size: 14px; white-space: pre-wrap;">FormResponses3!C2:C10002</span><span class="default-formula-text-color" dir="auto" face="Inconsolata, monospace, arial, sans, sans-serif" style="background-color: white; font-size: 14px; white-space: pre-wrap;">,</span><span class="string" dir="auto" face="Inconsolata, monospace, arial, sans, sans-serif" style="background-color: white; color: green; font-size: 14px; white-space: pre-wrap;">">=20"</span><span class="default-formula-text-color" dir="auto" face="Inconsolata, monospace, arial, sans, sans-serif" style="background-color: white; font-size: 14px; white-space: pre-wrap;">,</span><span class="default-formula-text-color" dir="auto" face="Inconsolata, monospace, arial, sans, sans-serif" style="background-color: white; font-size: 14px; white-space: pre-wrap;">FormResponses3!C2:C10002</span><span class="default-formula-text-color" dir="auto" face="Inconsolata, monospace, arial, sans, sans-serif" style="background-color: white; font-size: 14px; white-space: pre-wrap;">,</span><span class="string" dir="auto" face="Inconsolata, monospace, arial, sans, sans-serif" style="background-color: white; color: green; font-size: 14px; white-space: pre-wrap;">"<30"</span><span class="default-formula-text-color" dir="auto" face="Inconsolata, monospace, arial, sans, sans-serif" style="background-color: white; font-size: 14px; white-space: pre-wrap;">)</span></div><div><br /></div><div>という感じです。範囲と条件を繰り返して書いていきます。上は、C列が20以上で30未満のものの件数が返却されます。</div><div><br /></div><div>これらを応用すると、例えば下記のようなこともできるでしょう。</div><div><ul style="text-align: left;"><li>男女比率の算出</li><li>年代の割合の算出</li><li>年代のグラフの追加</li></ul></div><div>アンケートを実施しながら、同時に集計結果が出てしまうのはありがたいですね。</div><div>Google spreadsheetの関数を覚えれば覚えるほど、いろいろと便利になると思います。</div><div><br /></div><div>実際の利用例は上のシートと同じところに書かれています。</div><div><a href="https://docs.google.com/spreadsheets/d/1_YZq5FrqiZTS1Fn5k6Dc7LHmrepLAq6wexM8BrwKuT4/edit#gid=0">https://docs.google.com/spreadsheets/d/1_YZq5FrqiZTS1Fn5k6Dc7LHmrepLAq6wexM8BrwKuT4/edit#gid=0</a></div>takes90http://www.blogger.com/profile/05643926860275746715[email protected]0tag:blogger.com,1999:blog-3408166605731182745.post-29789011874510897592020-10-27T22:38:00.004+09:002020-10-27T22:38:49.886+09:00Google spreadsheetの関数を使ってみる(CONCATENATE/CELL)<p> <a href="https://ttimez.blogspot.com/2020/10/google-spreadsheetimportrange.html">昨日の記事</a>で紹介した</p><p><span class=" default-formula-text-color" dir="auto" style="color: #323232; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">=</span><span class=" default-formula-text-color" dir="auto" style="color: #323232; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">IMPORTRANGE</span><span class=" default-formula-text-color" dir="auto" style="color: #323232; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">(</span><span class=" string " dir="auto" style="color: green; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">"1CoJnqVABFhSx0CNgl7hSgGn-_w6hqtCq3PhBVUJ3VCM"</span><span class=" default-formula-text-color" dir="auto" style="color: #323232; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">,</span><span class=" string " dir="auto" style="color: green; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">"Sheet1!B3"</span><span class=" default-formula-text-color" dir="auto" style="color: #323232; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">)</span></p><p><span style="color: #323232; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">という記述ですが、2番目の引数が文字型になってしまっていることにより、実はちょっと不便な感じになってます。行を追加してコピーすると、通常の方式であれば参照部分が行に対応して、</span></p><p>B4,B5</p><p>と増えていってくれる部分が、文字列のままなのでB3のままになってしまう問題があります。</p><p>それを解消するために、文字列結合関数のCONCATENATEとCELL情報を取得するCELLという関数を使って下記のように書き換えられます。</p><p><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">=IMPORTRANGE</span><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">(</span><span style="color: green; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">"1CoJnqVABFhSx0CNgl7hSgGn-_w6hqtCq3PhBVUJ3VCM"</span><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">,</span><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">CONCATENATE</span><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">(</span><span class=" string " dir="auto" style="background-color: white; color: green; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">"Sheet1!"</span><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">,</span><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">Cell</span><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">(</span><span class=" string " dir="auto" style="background-color: white; color: green; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">"address"</span><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">,</span><span dir="auto" style="background-color: white; color: #f7981d; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">B3</span><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">)</span><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">)</span><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">)</span></p><p><br /></p><p><span style="color: green; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">"Sheet1!B3" の部分が </span><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">CONCATENATE</span><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">(</span><span class=" string " dir="auto" style="background-color: white; color: green; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">"Sheet1!"</span><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">,</span><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">Cell</span><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">(</span><span class=" string " dir="auto" style="background-color: white; color: green; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">"address"</span><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">,</span><span dir="auto" style="background-color: white; color: #f7981d; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">B3</span><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">)</span><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">) にリファクタリングされています。</span></p><p><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;"><br /></span></p><p><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">CONCATENATEは、複数の文字列を結合する関数です。</span></p><p><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">CELL関数は、</span><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">Cell</span><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">(</span><span class=" string " dir="auto" style="background-color: white; color: green; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">"address"</span><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">,</span><span dir="auto" style="background-color: white; color: #f7981d; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">B3</span><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">)のアドレス情報を文字列化してくれます。実際には、$B$3が返却されます。</span></p><p><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;"><br /></span></p><p><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">文字列の結合とかってあんまり利用しないと思われがちですが、こういう関数を使いこなそうと思った時には、あると便利に使えたりしますね。</span></p><p><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;"><br /></span></p><p><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">本日の関数を使ったサンプルのスプレッドシートはこちらになります。</span></p><p><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-size: 14px; white-space: pre-wrap;"><span style="font-family: Inconsolata, monospace, arial, sans, sans-serif;"><a href="https://docs.google.com/spreadsheets/d/1wgeeUHpZfemXc0cg0QhEwKHbHw3QxpiNxs0Gi9d9zVA">https://docs.google.com/spreadsheets/d/1wgeeUHpZfemXc0cg0QhEwKHbHw3QxpiNxs0Gi9d9zVA</a></span></span></p><p><br /></p><p><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-size: 14px; white-space: pre-wrap;"><span style="font-family: Inconsolata, monospace, arial, sans, sans-serif;"><br /></span></span></p>takes90http://www.blogger.com/profile/05643926860275746715[email protected]0tag:blogger.com,1999:blog-3408166605731182745.post-2461995109262700102020-10-26T21:43:00.004+09:002020-10-26T21:43:38.847+09:00Google spreadsheetの関数を使ってみる(IMPORTRANGE)<p> 昨日に続き、Import系の関数サンプルです。</p><p>本日は、IMPORTRANGEという、他のSpreadSheetを取り込むための関数です。</p><p>個人的には、こちらの関数が一番実用的かなと思っています。</p><p>SpreadSheetだと、毎月、同じフォーマットで値を出すことも多いかと思います。</p><p>例えば、簡単な例として、<a href="https://docs.google.com/spreadsheets/d/1d2EW-83Jd68q8oeuzww_Mrnz23pVnedQdFSgXyeIn7w/edit#gid=0">9月分の家計簿</a>と<a href="https://docs.google.com/spreadsheets/d/1CoJnqVABFhSx0CNgl7hSgGn-_w6hqtCq3PhBVUJ3VCM/edit#gid=0">10月分の家計簿を</a>作ってみました。もちろん、こちらは架空の家計簿です。</p><p>ここでシートが分かれていると、困るのが、前月との差額を計算したいときに困ります。</p><p>その問題を解決してくれる関数がIMPORTRANGEという関数です。別ファイルに作成された票をあたかも自分の表にあるかのように扱えるのが素晴らしい点です。</p><p>使い方は簡単です。</p><p><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">=</span><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">IMPORTRANGE</span><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">(<span style="color: #7e3794;">"</span></span><a class="waffle-rich-text-link" data-sheets-formula-bar-text-link="https://docs.google.com/spreadsheets/d/1d2EW-83Jd68q8oeuzww_Mrnz23pVnedQdFSgXyeIn7w" data-sheets-formula-bar-text-style="font-size:13px;color:#1155cc;font-weight:normal;text-decoration:underline;font-family:'Arial';font-style:normal;text-decoration-skip-ink:none;" style="font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">https://docs.google.com/spreadsheets/d/1d2EW-83Jd68q8oeuzww_Mrnz23pVnedQdFSgXyeIn7w</a><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;"><span style="color: #7e3794;">"</span></span><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">,</span><span class=" string " dir="auto" style="background-color: white; color: green; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">"Sheet1!B3"</span><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">)</span></p><p>のように書くと、リンク先のSheet1のB3列目を取得することができます。</p><p><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;"><span class=" default-formula-text-color" dir="auto">=</span><span class=" default-formula-text-color" dir="auto">IMPORTRANGE</span><span class=" default-formula-text-color" dir="auto">(</span><span class=" string " dir="auto" style="color: green;">"1CoJnqVABFhSx0CNgl7hSgGn-_w6hqtCq3PhBVUJ3VCM"</span><span class=" default-formula-text-color" dir="auto">,</span><span class=" string " dir="auto" style="color: green;">"Sheet1!B3"</span><span class=" default-formula-text-color" dir="auto">)</span></span></p><p><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;"><span class=" default-formula-text-color" dir="auto">というように省略して書くことも可能です。</span></span></p><p>また、範囲を指定すると、複数列・複数行を取り込むことも可能です。</p><p><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">=</span><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">IMPORTRANGE</span><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">(</span><span style="background-color: white; color: green; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">"1CoJnqVABFhSx0CNgl7hSgGn-_w6hqtCq3PhBVUJ3VCM"</span><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">,</span><span class=" string " dir="auto" style="background-color: white; color: green; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">"Sheet1!A1:B3"</span><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">)</span></p><p>これも他の関数と組み合わせることにより、可能性は無限に広がっていきます。</p><p>サンプルのSpreadsheetはこちらです。</p><p><a href="https://docs.google.com/spreadsheets/d/1CoJnqVABFhSx0CNgl7hSgGn-_w6hqtCq3PhBVUJ3VCM/edit#gid=0">https://docs.google.com/spreadsheets/d/1CoJnqVABFhSx0CNgl7hSgGn-_w6hqtCq3PhBVUJ3VCM/edit#gid=0</a></p><p><br /></p><p>こちらも、こんな風に使っているなどの情報を下記のコメントかメールで送信していただけるとありがたいです。</p>takes90http://www.blogger.com/profile/05643926860275746715[email protected]0tag:blogger.com,1999:blog-3408166605731182745.post-2941681710614593922020-10-24T23:36:00.003+09:002020-10-24T23:40:30.500+09:00Google spreadsheetの関数を使ってみる(IMPORTHTML)<p> 2日連続で書いてみます。とりあえず、なるべく毎日書くように頑張ってみようと現段階では考えてます。</p><p>昨日紹介した(IMPORTDATA)関数とやりたいことは似ているんですが、本日は、IMPORTHTML関数を使ってみます。</p><p>昨日はcsvファイルなどを取り込むときに使う関数でしたが、この関数は、HTML上のテーブルやリスト値を取得することができます。</p><p>csv形式での後悔はしてないけど、ブラウザ上に表示されているような場合には便利です。</p><p>例えば、Yahooの株情報を表示するページを例にとってみます。</p><p><a href="https://info.finance.yahoo.co.jp/ranking/?kd=8&mk=1&tm=d&vl=a" style="font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">https://info.finance.yahoo.co.jp/ranking/?kd=8&mk=1&tm=d&vl=a</a></p><p>このページでは、配当利回りが高い順に表示されるページですが、これをGoogleSpread Sheetに下記のように記述することにより取り込むことが可能になります。</p><p><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">=</span><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">IMPORTHTML</span><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">(</span><span class=" string " dir="auto" style="background-color: white; color: green; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">"https://info.finance.yahoo.co.jp/ranking/?kd=8&mk=1&tm=d&vl=a"</span><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">,</span><span class=" string " dir="auto" style="background-color: white; color: green; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">"table"</span><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">,</span><span class="number" dir="auto" style="background-color: white; color: #1155cc; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">1</span><span class=" default-formula-text-color" dir="auto" style="background-color: white; font-family: Inconsolata, monospace, arial, sans, sans-serif; font-size: 14px; white-space: pre-wrap;">)</span></p><p>これだけだと、正直あまりうれしくないと思いますが、これと他の関数を組み合わせてやることによりいろいろ便利にすることができます。</p><p>例えば、ほかに用意された関数を使って自分が買おうと思っている株価を別のシートで管理しておいて、配当利回りが4%を超えるようなものを絞り込むとか、そいういう応用をすることができるようになります。こういう応用例もおいおい紹介していければいいかと思ってます。</p><p>また、Google App Scriptなどを組み合わせて使うと、一定条件を満たしたときに通知するとかもできるようになると思います。</p><p>下記が実際に使ってみたサンプルです。</p><p><a href="https://docs.google.com/spreadsheets/d/16a3TRguKFndLx3oGFZPgFml91F8h4xxgMN4le1gtB-4/edit?usp=sharing">https://docs.google.com/spreadsheets/d/16a3TRguKFndLx3oGFZPgFml91F8h4xxgMN4le1gtB-4/edit?usp=sharing</a></p><p>こちらも、こういう風に利用したなどの情報をコメントやメールで頂けるとありがたいです。</p>takes90http://www.blogger.com/profile/05643926860275746715[email protected]0tag:blogger.com,1999:blog-3408166605731182745.post-37998403330202175582020-10-23T23:18:00.004+09:002020-10-23T23:24:02.295+09:00Google spreadsheetの関数を使ってみる(IMPORTDATA)<p> 久々の更新になりますが、Google spreadsheetはいろいろと使いこなせば日々の仕事にも役に立ちそうな気がするので、そこら辺を追及していこうかと思ってます。</p><p>しばらくは、Google spreadsheetの関数を使っていろいろ遊んだ結果を残していこうということで、暫くいろいろな関数で遊んだ結果を書いていこうかと思っています。</p><p>初回は、IMPORTDATAという関数です。こちらは、どういう関数かというと、インターネット上からダウンロードできるcsvファイルをSpreadsheetに取り込むことができるというものです。</p><p>例えば、コロナの陽性者数情報を厚生労働省のホームページからcsvファイルとしてダウンロードできます。下記を見ていただくと、いろいろな情報をcsvファイルとして公開しています。</p><p><a href="https://www.mhlw.go.jp/stf/covid-19/open-data.html">https://www.mhlw.go.jp/stf/covid-19/open-data.html</a></p><p>この中の陽性者情報を取得するcsvファイルのURLを確認して、下記のようにspreadSheetに書いてみましょう。</p><p><span class="default-formula-text-color" dir="auto" face="Inconsolata, monospace, arial, sans, sans-serif" style="background-color: white; font-size: 14px; white-space: pre-wrap;">=</span><span class="default-formula-text-color" dir="auto" face="Inconsolata, monospace, arial, sans, sans-serif" style="background-color: white; font-size: 14px; white-space: pre-wrap;">IMPORTDATA</span><span class="default-formula-text-color" dir="auto" face="Inconsolata, monospace, arial, sans, sans-serif" style="background-color: white; font-size: 14px; white-space: pre-wrap;">(</span><span class="string" dir="auto" face="Inconsolata, monospace, arial, sans, sans-serif" style="background-color: white; color: green; font-size: 14px; white-space: pre-wrap;">"https://www.mhlw.go.jp/content/pcr_positive_daily.csv"</span><span class="default-formula-text-color" dir="auto" face="Inconsolata, monospace, arial, sans, sans-serif" style="background-color: white; font-size: 14px; white-space: pre-wrap;">)</span></p><p>すると、データが取得できます。これに、チャートを追加してみるとこんな感じで表示することが可能です。</p><p></p><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiEOyRm-EKBu9puGQ7Kjw6qza2QpZhL1ZM_zNCi0BG_0VCd4DKcumfeO0-aNGxobYFnkdBMAEQhcm6eZeZHJaFoSjVGjGe9s-eTYAQHZbJOHFZQdopXNmNqjriaVeVxxmWFRO9XuEhlOw/s967/%25E7%2584%25A1%25E9%25A1%258C.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="441" data-original-width="967" height="183" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiEOyRm-EKBu9puGQ7Kjw6qza2QpZhL1ZM_zNCi0BG_0VCd4DKcumfeO0-aNGxobYFnkdBMAEQhcm6eZeZHJaFoSjVGjGe9s-eTYAQHZbJOHFZQdopXNmNqjriaVeVxxmWFRO9XuEhlOw/w400-h183/%25E7%2584%25A1%25E9%25A1%258C.png" width="400" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div></div><br /></div>このサンプルに利用したspreadsheetは下記にリンクをしておきます。<p></p><p><a href="https://docs.google.com/spreadsheets/d/1MSh4XPO8LdBJkNhHbnD9QCW9nV1qKVnjdtvuo9MMpeQ/edit?usp=sharing">https://docs.google.com/spreadsheets/d/1MSh4XPO8LdBJkNhHbnD9QCW9nV1qKVnjdtvuo9MMpeQ/edit?usp=sharing</a></p><p>なんかいろいろと他にも応用できそうですね。</p><p>こんな風に利用したなどの情報をコメント欄でいただけると嬉しいです。</p>takes90http://www.blogger.com/profile/05643926860275746715[email protected]0tag:blogger.com,1999:blog-3408166605731182745.post-48950352095903489982019-10-06T10:10:00.000+09:002020-11-04T21:38:54.732+09:00Google ドキュメントで章番号・節番号を付与Google ドキュメントで見出しに章番号を付与しようといろいろ調べてみたけど標準ではそういう機能がなさそうな感じ。<br />
<br />
ということで、スクリプト使ってできそうだったのでちょっと作成してみました。<br />
<br />
基本的に、必要な概念は、<br />
<br />
<pre>var pars = DocumentApp.getActiveDocument().getBody().getParagraphs();</pre>
<pre></pre>
<pre>でパラグラフを取得してループを回していきます。</pre>
<br />
<br />
<pre> var hdg = par.getHeading();
if (hdg == DocumentApp.ParagraphHeading.HEADING1</pre>
<pre>
</pre>
<pre>ここでヘッダ1なら章番号を加算して出力するという感じでやってます。</pre>
<pre>
</pre>
<pre>par.setText(counterh1+'.\t'+chunks[0]);</pre>
<pre>
</pre>
<pre>
</pre>
<pre>初めて書いてみましたが、なるほどなかなか便利ですね。</pre>
<br />
コード例:<br />
<br />
<a name='more'></a><br />
<br />
<pre>
function main(){
var pars = DocumentApp.getActiveDocument().getBody().getParagraphs();
var counterh1 =0;
var counterh2 =0;
var counterh3 =0;
for(var i=0; i < pars.length; i++) {
var par = pars[i];
var hdg = par.getHeading();
if (hdg == DocumentApp.ParagraphHeading.HEADING1) {
counterh1 = counterh1+1;
counterh2 = 0;
counterh3 = 0;
var content = par.getText();
var chunks = content.split('\t')
if(chunks.length > 1) { par.setText(counterh1+'.\t'+chunks[1]); }
else { par.setText(counterh1+'.\t'+chunks[0]); }
} else if (hdg == DocumentApp.ParagraphHeading.HEADING2) {
counterh2 = counterh2+1;
counterh3 = 0;
var content = par.getText();
var chunks = content.split('\t')
if(chunks.length > 1) { par.setText(counterh1+'.'+counterh2+'.\t'+chunks[1]); }
else { par.setText(counterh1+'.'+counterh2+'.\t'+chunks[0]); }
} else if (hdg == DocumentApp.ParagraphHeading.HEADING3) {
counterh3 = counterh3+1;
var content = par.getText();
var chunks = content.split('\t')
if(chunks.length > 1) { par.setText(counterh1+'.'+counterh2+'.'+counterh3+'.\t'+chunks[1]); }
else { par.setText(counterh1+'.'+counterh2+'.'+counterh3+'.\t'+chunks[0]); }
}
}
}
main();
</pre>
takes90http://www.blogger.com/profile/05643926860275746715[email protected]0tag:blogger.com,1999:blog-3408166605731182745.post-11122104970562347982012-12-02T23:38:00.001+09:002012-12-02T23:39:03.981+09:00findbugsプラグインを作ってみるfindbugsプラグインを作ってみました。<br />
とりあえず、簡単なチェックなら簡単にできそうだということがわかっりました。<br />
<br />
作り方は、下記のページを参考にしました。<br />
・FingBugsのプラグインのTutorial
<a href="http://code.google.com/p/findbugs/wiki/DetectorPluginTutorial">http://code.google.com/p/findbugs/wiki/DetectorPluginTutorial</a><br />
<br />
・DM_DEFAULT_ENCODINGを検出するfindbugsのソースコード
<a href="http://code.google.com/p/findbugs/source/browse/trunk/findbugs/src/java/edu/umd/cs/findbugs/detect/DefaultEncodingDetector.java?r=14166">http://code.google.com/p/findbugs/source/browse/trunk/findbugs/src/java/edu/umd/cs/findbugs/detect/DefaultEncodingDetector.java?r=14166</a>
<br/>
<br/>
とりあえず、ある関数を呼び出しているというのを検出するものを書いてみました。
<br/>
<br/>
そして、BigDecimal.divide(java.math.BigDecimal)を呼んでいる箇所を
検出する場合には、下記のように書けばいい感じになりました。
<br/>
<br/>
あとは、Tutorialに書いているようにmessages.xmlとfindbugs.xmlと必要であればmessages_ja.xmlを
書いてあげてjarファイルにでもしてあげて、Findbugsのpluginフォルダに入れて
実行してあげれば、チェックを追加してあげることができます。
<br/>
<br/>
<pre>
import edu.umd.cs.findbugs.BugInstance;
import edu.umd.cs.findbugs.BugReporter;
import edu.umd.cs.findbugs.MethodAnnotation;
import edu.umd.cs.findbugs.ba.XFactory;
import edu.umd.cs.findbugs.ba.XMethod;
import edu.umd.cs.findbugs.bcel.OpcodeStackDetector;
public class BigDecimalDevide9Detector extends OpcodeStackDetector{
private final BugReporter bugReporter;
public BigDecimalDevide9Detector(BugReporter bugReporter) {
this.bugReporter = bugReporter;
}
@Override
public void sawOpcode(int seen) {
switch (seen) {
case INVOKEVIRTUAL:
case INVOKESPECIAL:
case INVOKESTATIC:
XMethod callSeen = XFactory.createXMethod(MethodAnnotation.fromCalledMethod(this));
XMethod badMethod = XFactory.createXMethod("java.math.BigDecimal", "divide","(Ljava/math/BigDecimal;)Ljava/math/BigDecimal;", false);
if (badMethod.equals(callSeen)) {
bugReporter.reportBug(new BugInstance(this, "TUTORIAL_BUG", HIGH_PRIORITY).addClassAndMethod(this)
.addClassAndMethod(this).addSourceLine(this));
}
}
}
}
</pre>
本当は、もっと細かいロジックも書いてみたいのだけど、今後、いろいろとFindBugsのソースを
見ながらちょっとずつ見ていこうかなと思っています。
takes90http://www.blogger.com/profile/05643926860275746715[email protected]0tag:blogger.com,1999:blog-3408166605731182745.post-29219528990938911662012-10-13T10:54:00.002+09:002012-10-13T17:45:12.753+09:00SVNKitでShowLogするサンプルSVNKit(<a href="http://svnkit.com/">http://svnkit.com/</a>)を利用してSVNのログ表示を実行してみた。
こんな感じで書けばいけるようである。
<pre><code>import java.io.File;
import org.tmatesoft.svn.core.ISVNLogEntryHandler;
import org.tmatesoft.svn.core.SVNException;
import org.tmatesoft.svn.core.SVNLogEntry;
import org.tmatesoft.svn.core.SVNURL;
import org.tmatesoft.svn.core.auth.ISVNAuthenticationManager;
import org.tmatesoft.svn.core.internal.io.dav.DAVRepositoryFactory;
import org.tmatesoft.svn.core.internal.io.fs.FSRepositoryFactory;
import org.tmatesoft.svn.core.internal.io.svn.SVNRepositoryFactoryImpl;
import org.tmatesoft.svn.core.wc.SVNLogClient;
import org.tmatesoft.svn.core.wc.SVNRevision;
import org.tmatesoft.svn.core.wc.SVNWCUtil;
public class SVNLogSample {
private static class LogEntryHandler implements ISVNLogEntryHandler{
@Override
public void handleLogEntry(SVNLogEntry arg0) throws SVNException {
System.out.print(arg0.getDate());
// System.out.print(arg0.getChangedPaths());
System.out.print(arg0.getAuthor());
System.out.println(arg0.getMessage());
}
}
private static final String SVN_USER="svnuser";
private static final String SVN_PASS="svnuserpass";
public static void main(String[] args) throws SVNException {
new SVNLogSample().execute();
}
private void execute() throws SVNException {
System.out.println("start");
init();
ISVNAuthenticationManager auth = SVNWCUtil.createDefaultAuthenticationManager(new File("tmp"),SVN_USER,SVN_PASS,false);
SVNLogClient lc = new SVNLogClient(auth,null);
SVNURL targetUrl=SVNURL.parseURIEncoded("svn://xxxxxxx");
ISVNLogEntryHandler handler = new LogEntryHandler();
String[] path = new String[]{"/path1","/path1"};
lc.doLog(targetUrl,path,SVNRevision.HEAD, SVNRevision.HEAD, SVNRevision.create(0), true, true, 50, handler);
}
private void init() {
DAVRepositoryFactory.setup();
SVNRepositoryFactoryImpl.setup();
FSRepositoryFactory.setup();
}
}</code></pre>takes90http://www.blogger.com/profile/05643926860275746715[email protected]0tag:blogger.com,1999:blog-3408166605731182745.post-78920508997367247552012-10-13T10:51:00.002+09:002012-10-13T10:55:15.160+09:00SVNKitでSvnDiffのサンプルコードSVNKit(<a href="http://svnkit.com">http://svnkit.com</a>/)を利用してSVNDiffを実行してみた。
<br />
こんな感じで書けば実行できるようである。
<pre><code>import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.UnsupportedEncodingException;
import org.tmatesoft.svn.core.ISVNLogEntryHandler;
import org.tmatesoft.svn.core.SVNException;
import org.tmatesoft.svn.core.SVNLogEntry;
import org.tmatesoft.svn.core.SVNURL;
import org.tmatesoft.svn.core.auth.ISVNAuthenticationManager;
import org.tmatesoft.svn.core.internal.io.dav.DAVRepositoryFactory;
import org.tmatesoft.svn.core.internal.io.fs.FSRepositoryFactory;
import org.tmatesoft.svn.core.internal.io.svn.SVNRepositoryFactoryImpl;
import org.tmatesoft.svn.core.wc.ISVNDiffStatusHandler;
import org.tmatesoft.svn.core.wc.SVNDiffClient;
import org.tmatesoft.svn.core.wc.SVNDiffStatus;
import org.tmatesoft.svn.core.wc.SVNLogClient;
import org.tmatesoft.svn.core.wc.SVNRevision;
import org.tmatesoft.svn.core.wc.SVNWCUtil;
public class SVNDiffSample {
private static class DiffStatusHandler implements ISVNDiffStatusHandler{
@Override
public void handleDiffStatus(SVNDiffStatus arg0) throws SVNException {
System.out.print(arg0.getPath());
System.out.print(":");
System.out.println(arg0.getModificationType());
}
}
private static final String SVN_USER="svn_user";
private static final String SVN_PASS="svn_pass";
public static void main(String[] args) throws SVNException, UnsupportedEncodingException {
new SVNDiffSample().execute();
}
private void execute() throws SVNException, UnsupportedEncodingException {
System.out.println("start");
init();
ISVNAuthenticationManager auth = SVNWCUtil.createDefaultAuthenticationManager(new File("tmp"),SVN_USER,SVN_PASS,false);
SVNDiffClient lc = new SVNDiffClient(auth,null);
SVNURL targetUrl=SVNURL.parseURIEncoded("svn://urlstring");
ISVNDiffStatusHandler handler = new DiffStatusHandler();
//lc.doDiffStatus(targetUrl, SVNRevision.create(revNo), targetUrl,SVNRevision.create(revNo), true, true, handler);
ByteArrayOutputStream bao = new ByteArrayOutputStream();
lc.doDiff(targetUrl, SVNRevision.create(revNo), targetUrl,SVNRevision.create(revNo), SVNDepth.INFINITY, true, bao);
System.out.println("SIZE:"+bao.size());
System.out.println(bao.toString("MS932"));
}
private void init() {
DAVRepositoryFactory.setup();
SVNRepositoryFactoryImpl.setup();
FSRepositoryFactory.setup();
}
}
</code></pre>takes90http://www.blogger.com/profile/05643926860275746715[email protected]0tag:blogger.com,1999:blog-3408166605731182745.post-33919235136023698292012-10-13T10:45:00.000+09:002012-10-13T10:55:34.044+09:00GWTでCookieを扱うGWTでCookieを扱ってみた。<br />
<br />
クライアント側のコード
<pre>
import com.google.gwt.user.client.Cookies;
略
Cookies.setCookie("COOKIE_NAME", edUserName.getText());
</pre>
サーバ側でこれらを取得する場合
<pre>
Cookie[] cookies = getThreadLocalRequest().getCookies();
if (cookies != null) {
for (Cookie cookie : cookies) {
System.out.println(cookie.getName()+cookie.getValue());
}
}
</pre>takes90http://www.blogger.com/profile/05643926860275746715[email protected]0tag:blogger.com,1999:blog-3408166605731182745.post-91036241544242564372012-08-26T15:59:00.000+09:002012-08-26T15:59:50.999+09:00AutoItを利用して定期的に処理を実行するあるbatファイルの処理を10分に一回実行させたいなと思ったのですが、<br />
標準のDOSコマンドではそれらしきものがなかったのでAutoItを利用してやってみた<br />
<br />
<br />
下記がサンプルです。
10分に1回exec.batを起動するというのを100回繰り返す
というサンプルです。
SW_HIDEを指定しているのは、画面を出したくないためです。
<pre>
For $i = 1 to 100 Step 1
RunWait('exec.bat','.',@SW_HIDE)
sleep(1000*60*10)
Next
MsgBox(0, "情報","ループ終了")
</pre>takes90http://www.blogger.com/profile/05643926860275746715[email protected]0tag:blogger.com,1999:blog-3408166605731182745.post-71213874890378557872012-07-22T21:04:00.000+09:002012-07-22T21:04:41.976+09:00GWTのCellTableで行選択をするGWTのCellTableで行選択をする方法。
SelectionModelをCellTableに割り当てるという方法をとる
<pre>
final SelectionModel<GridInfo> gsm=new SingleSelectionModel<GridInfo>();
celtable.setSelectionModel(gsm);
</pre>
もしも複数選択可能なタイプならばSingleSelectionModelではなく
MultiSelectionModelを利用する。
<pre>
final SelectionModel<GridInfo> gsm=new MultiSelectionModel<GridInfo>();
celtable.setSelectionModel(gsm);
</pre>
その後、プログラム内で選択行にするには下記のような感じになる。
<pre>
//giはCellTableに表示されたオブジェクトをさします。
gsm.setSelected(gi, true);
</pre>takes90http://www.blogger.com/profile/05643926860275746715[email protected]0tag:blogger.com,1999:blog-3408166605731182745.post-57221684431159699882012-07-22T20:58:00.001+09:002012-07-22T20:58:21.681+09:00GWTで終了時にメッセージを出すGWTで終了時(またはページ移動時)にメッセージを出す方法のサンプル
たとえば、変更を保存する前に終了させてしまった場合にメッセージを出すような場合に
下記のように書く。
<pre>
Window.ClosingHandler closingHandler = new Window.ClosingHandler(){
@Override
public void onWindowClosing(ClosingEvent event) {
if (isModified()){
event.setMessage("変更した内容が保存されていません。");
}else{
event.setMessage(null);
}
};
};
Window.addWindowClosingHandler(closingHandler);
</pre>takes90http://www.blogger.com/profile/05643926860275746715[email protected]0tag:blogger.com,1999:blog-3408166605731182745.post-16137556545057245102012-07-22T20:40:00.000+09:002012-07-22T20:40:40.211+09:00GWT Cell Tableで値を直接編集するときの扱いGWT Cell Tableを用いたときEditTextCellを用いると<br />
Cell上で直接編集できるようになる。<br />
ここで編集した値をオブジェクトに更新を書けるためには、FieldUpdaterという仕組みを用いる必要がある。<br />
<br />
サンプルとしては下記のように記述することになる<br />
<br />
<br />
<pre>
//CellTableにカラムを追加する。
Column<GridInfo, String> col = new Column<GridInfo, String>(new EditTextCell()) {
@Override
public String getValue(GridInfo object) {
return object.getColValue();
}
};
dataGrid.addColumn(col, "カラム");
//追加したカラムにFieldUpdaterを設定する。
col.setFieldUpdater(new FieldUpdater<GridInfo, String>() {
@Override
public void update(int index, GridInfo object, String value) {
object.setColValue(value);
}
});
</pre>
これでCellTableに対応するオブジェクトのGridInfoに値をセットすることができる。takes90http://www.blogger.com/profile/05643926860275746715[email protected]0tag:blogger.com,1999:blog-3408166605731182745.post-51425374983491013182011-10-22T18:03:00.001+09:002011-10-22T18:04:25.229+09:00SVNWCClientの利用方法SVNkitの使用方法がよく分からず今までよく知らなかったのだけど、<br />
<br />
SVNWCClientあたりにというクラスを利用すると、SVNクライアントと<br />
同じような操作ができるということを知った。<br />
<br />
例えば、最新のSVNの最終更新者を表示する場合には、下記のような感じで<br />
書けばいける。<br />
<br />
<span class="Apple-style-span" style="background-color: white; font-family: arial, sans-serif; font-size: 13px;"><br /></span><br />
<span class="Apple-style-span" style="background-color: white; font-family: arial, sans-serif; font-size: 13px;">SVNInfo info = client.doInfo(new File(filePath),SVNRevision.HEAD);</span><span class="Apple-style-span" style="background-color: white; font-family: arial, sans-serif; font-size: 13px;"></span><br />
<div>
SVNWCClient client = new SVNWCClient((ISVNAuthenticationManager)null,null);</div>
<div>
System.out.println(info.getAuthor());</div>
<div>
<br /></div>
<div>
他にもSVNBasicClientあたりを継承しているクラスを利用すると他にも<br />
いろいろなことができそうな感じです。<br />
<a href="http://svnkit.com/kb/javadoc/org/tmatesoft/svn/core/wc/SVNBasicClient.html">http://svnkit.com/kb/javadoc/org/tmatesoft/svn/core/wc/SVNBasicClient.html</a><br />
<br />
<br />
今度いろいろと試してみることにしよう。<br />
<br />
ちなみに、現在の<span class="Apple-style-span" style="background-color: #fafbfc; color: #535353; font-family: Verdana, Tahoma, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16px;">SVNKit (1.3.6.1)</span>では、まだ<span class="Apple-style-span" style="background-color: #fafbfc; color: #535353; font-family: Verdana, Tahoma, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16px;">Subversion 1.7.0</span>には未対応で<br />
現在開発中とのこと。<br />
<br />
<a href="http://svnkit.com/download.php">http://svnkit.com/download.php</a><br />
<br />
11月にリリース予定とのことなので、こちらも対応したら試してみようと思う。<br />
<br />
<br /></div>takes90http://www.blogger.com/profile/05643926860275746715[email protected]0tag:blogger.com,1999:blog-3408166605731182745.post-20760838445981385302011-07-26T22:08:00.001+09:002011-07-26T22:09:06.699+09:00GWTでURLのパラメータの取得GWTでURLのパラメータの取得ってどうやるのかと<br />
調べていたら意外に簡単に出来ることがわかった。<br />
<br />
<br />
Window.Locationというクラスを利用すれば出来る。<br />
<br />
Location.getParameter(”val”)<br />
<br />
と書けば、<br />
<br />
http://hoge/?val=xxxx<br />
<br />
というようなURLのvalの値を取得することが出来る。<br />
<br />takes90http://www.blogger.com/profile/05643926860275746715[email protected]0tag:blogger.com,1999:blog-3408166605731182745.post-63772271426128381162011-07-25T22:36:00.000+09:002011-07-25T22:36:34.871+09:00GWTのログ機能GWTにはログ機能がある。<br />
それをいじってみた。<br />
本家のドキュメントはこちら。<br />
<br />
<a href="http://code.google.com/webtoolkit/doc/latest/DevGuideLogging.html">http://code.google.com/webtoolkit/doc/latest/DevGuideLogging.html</a><br />
<br />
<br />
java.util.loggingクラスをエミュレートしたログクラスが用意されており、<br />
クライアント側、サーバ側の両方にログを出力することが出来るようです。<br />
<br />
手順は簡単で、下記の2ポイントだけ。<br />
<br />
.gwt.xmlファイルに下記の記述の追加。<br />
<br />
<pre><inherits name="com.google.gwt.logging.Logging"/>
<set-property name="gwt.logging.logLevel" value="SEVERE"/>
<set-property name="gwt.logging.enabled" value="FALSE"/>
<set-property name="gwt.logging.consoleHandler" value="DISABLED"/>
</pre><br />
ログハンドラの種類は、<br />
SystemLogHandler <br />
DevelopmentModeLogHandler <br />
ConsoleLogHandler <br />
FirebugLogHandler <br />
PopupLogHandler <br />
SimpleRemoteLogHandler <br />
などがあり、必要に応じてENABLE,DISABLEを設定する。<br />
<br />
<br />
ソースには、通常の java.util.loggingクラスを利用した方法と同様に記述<br />
<pre> Logger logger = Logger.getLogger("NameOfYourLogger");
logger.log(Level.SEVERE, "ログ");
</pre><br />
<br />
SimpleRemoteLogHandler をENABLEにするとサーバ側にログが記録されるようになる。<br />
<br />
これをこのまま実行するとサーブレットが定義されていないというようなエラーが<br />
出てしまうので、web.xmlにログ記録用のサーブレットを定義しておく必要がある。<br />
<br />
<pre>
< servlet >
< servlet-class>com.google.gwt.logging.server.RemoteLoggingServiceImpl </servlet-class >
< servlet-name >logger < /servlet-name >
< /servlet >
< servlet-mapping >
< servlet-name>logger </servlet-name >
< url-pattern>/(ここは、環境によって変更する)/remote_logging </url-pattern >
< /servlet-mapping >
</pre><br />
takes90http://www.blogger.com/profile/05643926860275746715[email protected]0