2015年8月21日金曜日

オンラインでGoogle Apps Scriptを学ぶ方法 | schoo(スクー)

オンライン学習サービスの1つであるschoo(スクー)をご存じでしょうか?

様々な分野の講義・講座の動画が配信されていて、生放送と録画があります。
生放送では、授業配信サイトを開いたウェブブラウザ上で講師への質問や生徒同士のやり取りをリアルタイムにチャットのようにすることができるのが特徴で、逆に講師側から生徒への質問もあります。

様々な授業の中に、初心者向けGoogle Apps Scriptによるプログラミング講座があります。
現在録画で受講することができるものとして、例えば、

Google Apps Script 入門 -基礎知識編-
Google Apps Script 入門 -Google Spread Sheet編-

があります。

先日はForm編の生放送がありましたので、後日録画配信されるものと思います。

録画版は内容に応じて無料のものと有料(チケット制)のものがあるため、過去の全ての授業を受けられるわけではありませんが、SNSやメールを通じて招待した友人が受講登録することでチケットがもらえたりしますので、興味のある方は一度サイトを覗いてみてはいかがでしょうか。

僕は通勤で片道1時間程度、電車に乗っているため、通勤時間中に受講することでかなり有効に時間を使えるようになったと感じています。

2015年6月3日水曜日

フォーム回答内容をメールで通知する | Google Apps Script

※投稿後に動作確認をしたところ不具合が見つかったため、スクリプトを修正しました。

Googleのサービスの1つにフォームがあります。

アンケートを作成し、回答結果をスプレッドシートにまとめることができて便利なのですが、回答がどれくらい集まっているかを確認するのに、毎回スプレッドシートを開かなければならないのは面倒です。私の場合、最も頻繁に利用するメールで回答状況をざっくりとでも把握したいと考えます。そこで、回答があったときに、その内容を指定したメールアドレスに送るスクリプトを用意しておきます。

---以下スクリプト---
function sendAnswer() {

    var ss = SpreadsheetApp.getActiveSheet();
    var dataRange = ss.getDataRange();
    var lastRow = dataRange.getLastRow();
 
    var date = ss.getRange("A"+lastRow).getValue();
    var name = ss.getRange("B"+lastRow).getValue();
    var answer = ss.getRange("C"+lastRow).getValue();

    var subject = "フォームの回答がありました"

    var mailBody = date + "\n"
                       + name + "\n"
                       + answer;
    var mailTo = "メールアドレス";

    GmailApp.sendEmail(mailTo,subject,mailBody);
}
---以上スクリプト---

フォームでの最新の回答は、前の回答の1つ下の行に入力されます。つまり、最新の回答内容を取得するにはデータ最下端行の各セルの値を取得すればよいことになります。

最終行A列:最新回答送信日時(タイムスタンプ)
最終行B列:本例では回答者の名前
最終行C列:回答内容
(アンケートの設問ごとに回答が入力される列が分かれます)

あとは、Google Apps Scriptでのメール送信ルールに従い、変数subject,mailTo,mailBodyで指定したメール件名と宛先、本文を使って記述します。

最後に大事なことが1つあります。

回答があった時にタイムリーにメール送信してくれると助かりますよね。
それはトリガーで実現します。

フォームから回答が送信されたときにsendAnswer()関数を起動させるトリガーを設定すれば、目的達成です。

2015年1月31日土曜日

Microsoft Excelのソルバー機能の用途 | ポートフォリオリバランス計算

Excelの機能の1つにソルバーがあります。
はまるととても便利なのですが、日常生活ではあまり用途が思い浮かばないものでもあります。
そこで、思いついた使い道を記しておくことにします。

今回は積立投資信託ポートフォリオのリバランス時を想定します。

投資信託で分散投資をする場合、投資する地域と金融商品の組み合わせを考えることになります。
例えば、投資先地域として
  • 日本
  • 日本以外の先進国
金融商品として
  • 債権
  • 株式
がありますと、組み合わせとしては
  1. 日本債権
  2. 日本株式
  3. 先進国債権
  4. 先進国株式
となります。

1~4の配分割合を決めて投資信託を購入し保有していますと、市場の動きによって次第に価格が変化しますので、1~4の割合が購入当初からはずれてきます。このずれを修正するのがリバランスです。

購入時、配分を














としていたものが、価格変動によって














と変化したため、これを購入時の配分割合に戻すことを考えます。戻す方法は、保有している4種類の投資信託をさらに買い増すこととします。

どの資産をいくら分買えば元の割合に戻るのか。パッと金額を出すのは難しいものです。
そこで、ソルバーの出番となります。

買い増すための資金には普通上限がありますので、4資産買い増し金額の合計=資金上限とし、各資産のリバランス後の割合を制約条件としてソルバーを回せば、各資産をいくら分買い増せばよいのかが簡単に算出できます。

2014年9月30日火曜日

Google Ads | Bloggerの場合のAdSenseの始め方7

申請していたAdsenseへの申し込みがやっと承認されました。

申し込んだのが8月上旬でしたので、1ヶ月半かかりました。

2014年9月5日金曜日

Python | Excelワークシートの範囲指定方法

Excelを操作するときに必ず必要となるのが、データ範囲の指定です。Excelワークシートからデータを取得するときも、逆にデータを書き込むときも、ワークシート上の場所を指定する必要があるからです。

---

myRange1 = xlSheet.Cells(4,1) #1つのセルを(row,column)形式で指定
myRange2 = xlSheet.Range("B5:C10") #データ範囲をExcel式で指定
myRange3 = xlSheet.Range(xlSheet.Cells(2,2),xlSheet.Cells(3,8)) #データ範囲を(row,column)形式で指定

---

Python | Excelで新しいワークシートを追加する

---以下スクリプト---

import win32com.client #

xlApp = win32com.client.Dispatch("Excel.Application")

xlApp.Visible = 1

xlApp.Workbooks.open(r"C:\test.xlsx")
xlSheet = xlApp.Workbooks(1).Sheets(1)

xlApp.Worksheets.Add()

---以上スクリプト---

2014年9月2日火曜日

Python | Excelファイルの読み込み方法

Pythonを使ってExcelファイルを操作する方法です。

まずはファイルを読み込んで、指定のセルの値を表示してみます。

---以下スクリプト---

import win32com.client #

xlApp = win32com.client.Dispatch("Excel.Application")

xlApp.Visible = 1

xlApp.Workbooks.open(r"C:\test.xlsx")
xlSheet = xlApp.Workbooks(1).Sheets(1)
xlCell = xlSheet.Cells(7, 3)
value = xlCell.value

xlApp.Quit()

print "Cell(7,3)->", value

---以上スクリプト---

まず、Excelを使うのにwin32comとExcelがインストールされている必要があります。

Python用Windows extensionダウンロードサイト
http://sourceforge.net/projects/pywin32/

その上でimportして使います。

上の例では読み込んだExcelファイルのワークシート1にあるセルC7の値を取得して表示します。
xlCell = xlSheet.Cells(7, 3)ではセル位置を(row, column)で指定するため、

(7, 3) = C7

となります。

SyntaxHighlighter