Quantcast
Channel: いつも隣にITのお仕事
Viewing all 2073 articles
Browse latest View live

【GAS&Vue.js】v-bindディレクティブを使ってデータバインディングをしてみよう

$
0
0
binding

photo credit: Domiriel Spiral Bound via photopin (license)

みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

GASとVue.jsを使ってWebアプリケーションを作成する方法をシリーズでお伝えしています。

前回の記事はコチラ。

GASにVue.jsを導入する方法とその動作確認、そしてVue.jsの超基本を解説
初心者向けにGASとVue.jsによるWebアプリケーションの作り方についてお伝えしています。今回は、GASにVue.jsを導入する方法とその動作確認、そしてVue.jsの超基本を解説していきます。

GASのプロジェクトにVue.jsを導入して、Mustache構文を使ったシンプルなテキストのデータバインディングについて確認をしました。

今回は、href属性などの属性のデータバインディングをするv-bindディレクティブの使い方です。

そもそもディレクティブとは何か、という点も解説します。

では、行ってみましょう!

今回のお題:記事一覧ページを作りたい

今回は、以下のような記事一覧ページを作成することを目標にしたいと思います。

GASとVue.jsで作成したいWebページ
記事一覧のようなものですね。各記事をクリックすると、それぞれのページにリンクするものとします。

GASで実現しますので、doGet関数を含むサーバー側のスクリプトを以下のようにまず用意しておきましょう。

function doGet() {
  var htmlOutput = HtmlService.createTemplateFromFile("index").evaluate();
  htmlOutput
    .setTitle('GAS+Vue.js')
    .addMetaTag('viewport', 'width=device-width, initial-scale=1')
  return htmlOutput;
}

表示するページのもととなるindex.htmlですが、ベタっとHTMLで実現しようとすると、以下のようなコードになります。


  
    
    != HtmlService.createHtmlOutputFromFile('css').getContent(); ?>
  
  
    

連載目次:GASユーザーのためのVue.js&Webアプリ作成入門

Google Apps ScriptではHTML・CSSを使ってWebページを作成し公開することができます。このシリーズでは、その続きとしてはじめてクライアント側JavaScriptを動かすところからスタートし、人気急上昇中のフレームワークVue.jsを使ってWebアプリケーションを作成する方法をお伝えしていきます。
  1. GASのWebアプリケーションでクライアント側JavaScriptを使うための基礎知識
  2. GASでクライアントJavaScriptを使用する超簡単なプログラム
  3. GASとJavaScriptフレームワークVue.jsを使ってWebアプリを作成するための最初の一歩
  4. GASにVue.jsを導入する方法とその動作確認、そしてVue.jsの超基本を解説
!= HtmlService.createHtmlOutputFromFile('js').getContent(); ?>

このHTMLの解説については、以下のページにありますので、必要に応じてご覧ください。

【GASユーザーのためのHTML入門】アンカーリンクを張るaタグの書き方
GASユーザーのためのはじめてのHTML・CSS入門ということで、簡単なWebページの作成を目指しております。今回は、リンクを貼るアンカーリンクを作るaタグとhref属性の書き方について解説をしますよ。

このHTMLを、Vue.jsを学びながら徐々にスッキリさせていきたいと思いますよ。

テキストデータをデータバインディングする

まず、前回のおさらいも兼ねて、テキストをVueインスタンスのdataオプションに設定して、データバインディングしましょう。

h2タグ、pタグ、liタグ内のテキストを対象にして、以下のようにjs.htmlとindex.htmlを構成してみました。

まずは、このようにデータバインディングしたいテキストをdataオプションに設定します。

プロパティ名はそれっぽいネーミングで。

title1,title2,…は気の早い人は配列を…!とか、v-forを…!とかイライラするかも知れませんが、連載を進める上でスッキリさせますので、今は我慢してください。

さて、このようにjs.htmlを作ると、index.html側では以下のようにできます。


  
    
    != HtmlService.createHtmlOutputFromFile('css').getContent(); ?>
  
  
    

{{ tocTitle }}

{{ tocDescription }}
  1. {{ title1 }}
  2. {{ title2 }}
  3. {{ title3 }}
  4. {{ title4 }}
!= HtmlService.createHtmlOutputFromFile('js').getContent(); ?>

どばーっとテキストを書き込んでいたところは、それぞれのプロパティ名について、二重波括弧のMustache構文で参照することができます。

こっちはだいぶスッキリしましたね。

表示すると以下のようになります。

GASとVue.jsを使ってテキストデータをバインディング

属性データをv-bindディレクティブでバインディングする

さて、テキストデータであれば先ほどのように、dataオプションに設定したプロパティの値を、Mustache構文で参照することができるのですが、属性はどうしましょうか?

今回は、リンクを張る必要があるので、aタグのhref属性を指定しなければいけません。

その問題は、「v-bindディレクティブ」を使うことでサッと解決できます。

ディレクティブとは

ディレクティブというのは「v-」ではじまるVue.js専用の属性のことで、属性ですからHTMLのいずれかのタグ要素の属性として指定をします。

Vue.jsでは数々の便利なディレクティブが用意されています。

なお、テキストのバインディングをしたい場合、これまでお世話になってきたMustache構文の代わりに、v-textディレクティブを使って以下のように記述することができます。

<タグ v-text=“プロパティ”></タグ>

これは以下と同義です。

<タグ>{{ プロパティ }}</タグ>

まあ、Mustacheさんのほうがいいですよね。

属性のバインディングをするv-bindディレクティブ

お伝えした通り、属性にデータバインディングをするには、v-bindディレクティブを使用します。

v-bindディレクティブを使う場合は、HTMLのタグを以下のように記述します。

<タグ v-bind:属性=“プロパティ”>~</タグ>

v-bindディレクティブは省略表記も用意されていて、以下のように記述することができます。

<タグ :属性=“プロパティ”>~</タグ>

属性のデータバインディングをしたWebページ

では、以上を踏まえてjs.htmlとindex.htmlを修正してみましょう。

まず、js.htmlのほうです。

属性に設定する値もVueインスタンスのdataオプションに、同様に追加していきます。

url1,url2,…のところを配列…!とかv-for…!とかイライラしている方、ごめんなさい。大丈夫です。連載のできるだけ早い段階で解決しますので。

index.htmlのほうはコチラです。


  
    
    != HtmlService.createHtmlOutputFromFile('css').getContent(); ?>
  
  
    

{{ tocTitle }}

{{ tocDescription }}
  1. {{ title1 }}
  2. {{ title2 }}
  3. {{ title3 }}
  4. {{ title4 }}
!= HtmlService.createHtmlOutputFromFile('js').getContent(); ?>

こっちは、引き続きわりとスッキリですね。

ただ、もっとスッキリできます。

表示してみましょう。

GASとVue.jsでhref属性にデータバインディング

無事にリンクも張れていますね。

まとめ

以上、GASとVue.jsでWebアプリケーションを作るシリーズ、今回はv-bindディレクティブを使って属性のデータバインディングをする方法をお伝えしました。

ディレクティブとは何か、またv-bindディレクティブを使ってVueインスタンスのdataオプションのデータをhref属性などの属性にバインディングする方法がわかったと思います。

次回はv-forディレクティブを使って、「繰り返し処理」を実現していきますよ。

どうぞお楽しみに!

連載目次:GASユーザーのためのVue.js&Webアプリ作成入門

Google Apps ScriptではHTML・CSSを使ってWebページを作成し公開することができます。このシリーズでは、その続きとしてはじめてクライアント側JavaScriptを動かすところからスタートし、人気急上昇中のフレームワークVue.jsを使ってWebアプリケーションを作成する方法をお伝えしていきます。
  1. GASのWebアプリケーションでクライアント側JavaScriptを使うための基礎知識
  2. GASでクライアントJavaScriptを使用する超簡単なプログラム
  3. GASとJavaScriptフレームワークVue.jsを使ってWebアプリを作成するための最初の一歩
  4. GASにVue.jsを導入する方法とその動作確認、そしてVue.jsの超基本を解説
  5. 【GAS&Vue.js】v-bindディレクティブを使ってデータバインディングをしてみよう

GASとVue.jsによるWebアプリでv-forディレクティブを使って繰り返し要素を描画する方法

$
0
0

みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

GASとVue.jsでWebアプリケーションを作成する方法をお伝えしています。

前回の記事はコチラ。

【GAS&Vue.js】v-bindディレクティブを使って属性のデータバインディングをしてみよう
GASとVue.jsを使ってWebアプリケーションを作成する方法をお伝えしています。今回は、属性のデータバインディングをするv-bindディレクティブの使い方、ディレクティブとは何かについて解説します。

テキストや属性のデータバインディングをする方法をお伝えしてきました。

ただ、前回のコード…ちょっと同じような記述が多くてイライラしますよね。

そんなときに便利なのがv-forディレクティブです。

ということで、今回はGASとVue.jsによるWebアプリでv-forディレクティブを使って繰り返しで要素を描画する方法をお伝えします。

では、行ってみましょう!

前回のおさらいと今回の課題

まず、前回のコードをおさらいしておきましょう。

URLリクエストを受けてHTMLを返すdoGet関数を含むmain.gsはコチラ。

function doGet() {
  var htmlOutput = HtmlService.createTemplateFromFile("index").evaluate();
  htmlOutput
    .setTitle('GAS+Vue.js')
    .addMetaTag('viewport', 'width=device-width, initial-scale=1')
  return htmlOutput;
}

HTMLにバインドするデータを保有するVueインスタンスを生成するのが、こちらのjs.htmlです。

そして、そのデータバインディングを受けて表示するindex.htmlです。


  
    
    != HtmlService.createHtmlOutputFromFile('css').getContent(); ?>
  
  
    

{{ tocTitle }}

{{ tocDescription }}
  1. {{ title1 }}
  2. {{ title2 }}
  3. {{ title3 }}
  4. {{ title4 }}
!= HtmlService.createHtmlOutputFromFile('js').getContent(); ?>

js.htmlのほうではtitle1,title2,…とか、url1,url2,…とかのプロパティの設定が、そしてindex.htmlのほうでは、li要素を要素数分記述するのが、それぞれ冗長な感じはありますよね。

こんなとき、使いたくなるのが「反復処理」です。

Vue.jsでは配列やオブジェクトについて反復処理をする便利なディレクティブが用意されているんです。

v-forディレクティブで反復処理をする

v-forディレクティブの構文

Vue.jsで、dataオプションに指定した配列やオブジェクトなどについて反復処理を行うときにはv-forディレクティブを使います。

配列について反復を行う場合のv-forディレクティブの書式はコチラです。

<タグ v-for=”仮変数 in 配列”>~</タグ>

配列には、Vueインスタンスのdataオプションに指定した配列のプロパティ名を指定します。

上記記述により、配列にある要素を順番に一つずつ取り出し仮変数に格納しながら繰り返され、その分のタグが描画されます。

仮変数の要素は、Mustache構文やディレクティブに渡す値として利用することができます。

なお、以下のようにすると、仮変数として配列の要素だけでなく、インデックスも同時に取り出すことができます。

<タグ v-for=”(仮変数1, 仮変数2) in 配列”>~</タグ>

仮変数1に要素、仮変数2に取り出した要素に対応するインデックスが格納されます。

v-forディレクティブを使用して記事一覧を表示する

例として以下のように、dataオプションのプロパティlistsに配列を指定してみます。

7=12行目ですが、listsというプロパティに記事タイトルを要素とする配列をセットしています。

一方、HTML側のliタグについて、以下のようにv-forディレクティブを指定してあげます。


  
    
    != HtmlService.createHtmlOutputFromFile('css').getContent(); ?>
  
  
    

{{ tocTitle }}

{{ tocDescription }}
  1. {{ list }}
!= HtmlService.createHtmlOutputFromFile('js').getContent(); ?>

12行目がv-forディレクティブを仕込んだ部分です。プロパティlistsから、ひとつずつ取り出してそれをlistに格納しています。

そのlistの中身(つまり、記事タイトルですが)をMustache構文で表示した上で、それぞれのli要素を描画するわけです。

Webページを表示すると、以下のような結果が得られます。

Vue.jsのv-forディレクティブを使ってGASのWebページを表示

一行にまとめることができましたね。

反復の対象となる配列の要素をオブジェクトにする

ただ、今回の場合、記事タイトルだけでなく、そのリンク先となるURLも必要です。

タイトルとセットでURLをaタグのhref属性にセットする必要があります。

そのような場合は、ループの対象となる配列の要素をオブジェクトにすると便利です。

つまり、以下のようにデータ側、js.htmlを準備します。

8行目からのlistsプロパティに注目してください。配列をセットしていますが、それはオブジェクトを要素とするものとなっています。

オブジェクトのプロパティとして、以下のような値をそれぞれ設定しておくわけです。

– title: 記事タイトル
– url: リンクURL

そして、HTML側は以下のようにします。



  
    
    != HtmlService.createHtmlOutputFromFile('css').getContent(); ?>
  
  
    

{{ tocTitle }}

{{ tocDescription }}
  1. {{ list.title }}
!= HtmlService.createHtmlOutputFromFile('js').getContent(); ?>

13行目をご覧ください。

仮変数としてlistを取り出していますが、これはオブジェクトですから、ドット記法でプロパティを指定することで、さらにその要素を取り出すことができるわけです。

Mustache構文には記事タイトルを参照するlist.tilte、aタグのv-bindディレクティブでhref属性にlist.urlを渡しながらループをしています。

表示結果を見てみましょう。

Vue.jsのv-forディレクティブを使ってGASのWebページにリンク付きリストを表示

バッチリ記事タイトルにリンクもつきましたね。

まとめ

以上、GASとVue.jsによるWebアプリでv-forディレクティブを使って繰り返しで要素を描画する方法をお伝えしました。

これで、HTMLがスッキリ書けますよね…!

なお、v-forディレクティブは配列だけでなく、オブジェクトや数値、文字列なども反復対象とすることができます。機会があれば紹介したいと思います。

ただ、Vueインスタンスのdataオプションの記述がちょっと面倒…

ほら、スプレッドシートからデータ取得できたら便利ですよね!

次回以降、この部分を解決していきます。

どうぞお楽しみに!

連載目次:GASユーザーのためのVue.js&Webアプリ作成入門

Google Apps ScriptではHTML・CSSを使ってWebページを作成し公開することができます。このシリーズでは、その続きとしてはじめてクライアント側JavaScriptを動かすところからスタートし、人気急上昇中のフレームワークVue.jsを使ってWebアプリケーションを作成する方法をお伝えしていきます。
  1. GASのWebアプリケーションでクライアント側JavaScriptを使うための基礎知識
  2. GASでクライアントJavaScriptを使用する超簡単なプログラム
  3. GASとJavaScriptフレームワークVue.jsを使ってWebアプリを作成するための最初の一歩
  4. GASにVue.jsを導入する方法とその動作確認、そしてVue.jsの超基本を解説
  5. 【GAS&Vue.js】v-bindディレクティブを使って属性のデータバインディングをしてみよう
  6. GASとVue.jsによるWebアプリでv-forディレクティブを使って繰り返し要素を描画する方法

GASのWebアプリでクライアント側JavaScriptからサーバー側の関数を呼び出す方法

$
0
0
call

photo credit: Zach K Penn Station Payphone via photopin (license)

みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

GASとVue.jsでWebアプリを作る方法をお伝えしています。

前回の記事はコチラ。

GASとVue.jsによるWebアプリでv-forディレクティブを使って繰り返し要素を描画する方法
GASとVue.jsでWebアプリケーションを作成する方法をお伝えしています。今回はGASとVue.jsによるWebアプリでv-forディレクティブを使って繰り返しで要素を描画する方法をお伝えします。

Vue.jsのv-forディレクティブとdataオプションの配列を使って、DOM要素を繰り返し描画する方法をお伝えしました。

HTMLの記述はだいぶスッキリしたのですが、代わりにdataオプションの記述が面倒になってしまいました。

ここは、スプレッドシートから引っ張ってこれると便利ですよね…!

クライアント側JavaScriptから、サーバー側のGASを呼び出してスプレッドシートのデータを取得してみましょう。

google.script.runというオブジェクトを使用します。

ということで、今回はGASのWebアプリでクライアント側JavaScriptからサーバー側の関数を呼び出す方法です。

では、行ってみましょう!

クライアント側JavaScriptとサーバー側GASの動作の整理

さて、今回やりたいこととその課題を一回整理しておきましょう。

GASのプロジェクト構成は以下のようにするとします。

  • main.gs: サーバー側GASスクリプト、URLリクエストを受けてindex.htmlを返すdoGet関数を含む
  • index.html: Webページとして表示するHTMLドキュメント
  • js.html: index.html内に埋め込むブラウザ(つまりクライアント側)で動作するJavaScript

URLリクエストによりdoGet関数が動作し、ユーザーのブラウザにindex.htmlを元にしたWebページが表示されます。

つまり、クライアント側にはindex.htmlとjs.htmlが渡されています。

サーバー側JavaScript(GAS)とクライアント側JavaScript

ただ、その表示する際に、スプレッドシートの情報を参照したいとします。

スプレッドシートはGoogleサーバー内にありますから、それにアクセスする処理はgsファイル、つまりサーバー側のGASとして記述する必要があります。

GASのクライアント側とサーバー側のスクリプト

ですから、クライアント側JavaScriptがユーザーのブラウザに展開された時点に、何らかの方法でサーバー側のGASの処理を呼び出す必要があるのです。

クライアント側JavaScriptからサーバー側の関数を呼び出す

google.script.runオブジェクト

GASでは、クライアント側からサーバー側の関数を呼び出すためのオブジェクトgoogle.script.runが用意されています。

クライアント側JavaScriptで以下のように記述することで、サーバー側の関数を呼び出すことができます。

google.script.run.関数(引数1, 引数2,…)

関数はサーバー側のgsファイルに記述された関数名です。引数は必要であれば記述しますが、必要がなければ省略可です。

google.script.runによる呼び出しは非同期

実は、もうひと工夫必要です。

例えば、ブラウザ上で「google.script.run.関数」でサーバー側で呼び出す処理を行うとします。

その際に、ブラウザからGoogleサーバーに通信網を介して指示が飛びますよね。

Googleサーバー内のgsファイルがその要求を受け取って、関数を実行します。例えば、スプレッドシートのデータを取得するわけです。

ただ…この場合、そのGoogleサーバーの処理と返事を待たずに、クライアント側のJavaScriptは次のスクリプトを実行してしまいます。

このような通信を、非同期通信といいます。

ブラウザの処理を待ってもらうために、ひと工夫する必要があります。

サーバー側の関数の呼び出しが成功したらクライアント側関数を呼び出す

そのために用意されている仕組みが、google.script.runオブジェクトのwithSuccessHandlerメソッドです。

google.script.run.withSuccessHandler(コールバック関数).関数(引数1, 引数2,…)

このメソッドは、サーバー側関数が正常に実行された場合に、その戻り値をコールバック関数に渡して実行するように設定をするものです。

コールバック関数はクライアント側JavaScriptに記述しておきます。

これを使うことで、サーバー側の処理完了時にクライアント側の必要な関数を呼び出すことができるようになるわけです。

なお、サーバー側の関数呼び出しが失敗したときに、クライアント側関数を呼び出すwithFailureHandlerメソッドも用意されています。必要に応じて使用しましょう。

クライアント側JavaScriptからサーバー側関数を呼びだすスクリプト

では、実際にgoogle.script.runオブジェクトを使ってサーバー側のスクリプトを呼び出してみましょう。

まずは、サーバー側のmain.gsには、URLリクエストを受けてHTMLを表示するdoGet関数と、このプロジェクトのコンテナとしているスプレッドシート名を返すgetSpreadsheetName関数を記述しておきます。

function doGet() {
  var htmlOutput = HtmlService.createTemplateFromFile("index").evaluate();
  htmlOutput
    .setTitle('GAS+Vue.js')
    .addMetaTag('viewport', 'width=device-width, initial-scale=1')
  return htmlOutput;
}

function getSpreadsheetName(){
  return SpreadsheetApp.getActiveSpreadsheet().getName();
}

続いて、js.htmlです。

3行目で、google.run.scriptオブジェクトを使って、getSpreadsheetNameメソッドを呼び出します。

その呼び出しが成功した時点で、戻り値をinitializeVue関数に渡して実行するのです。

受け取った戻り値ssNameをそのままdataオプションのプロパティssNameに設定していますね。

そして、そのデータを参照してWebページを表示するindex.htmlがコチラです。


  
    
    != HtmlService.createHtmlOutputFromFile('css').getContent(); ?>
  
  
    
バインドしているスプレッドシート名は {{ ssName }} です。
!= HtmlService.createHtmlOutputFromFile('js').getContent(); ?>

Webページの表示結果

このWebページを表示すると、以下のようになります。

GASとVue.jsでスプレッドシート名を取得してWebページに表示する

きちんと、スプレッドシート名「GAS+Vue.jsで記事一覧」が表示されています。

なお、URLリクエストで表示する前に、スクリプトエディタでgetSpreadsheetNameメソッドを実行して、スプレッドシートのアクセス認証をしておいてくださいね。

まとめ

以上、GASでクライアント側JavaScriptからサーバー側のGASの関数を呼び出す方法をお伝えしました。

google.script.runオブジェクトと、withSuccessHandlerメソッド…これさえ使えれば、色々なことができますね!

次回は、スプレッドシートのシート上のデータをWebアプリに反映させてみたいと思います。

どうぞお楽しみに!

連載目次:GASユーザーのためのVue.js&Webアプリ作成入門

Google Apps ScriptではHTML・CSSを使ってWebページを作成し公開することができます。このシリーズでは、その続きとしてはじめてクライアント側JavaScriptを動かすところからスタートし、人気急上昇中のフレームワークVue.jsを使ってWebアプリケーションを作成する方法をお伝えしていきます。
  1. GASのWebアプリケーションでクライアント側JavaScriptを使うための基礎知識
  2. GASでクライアントJavaScriptを使用する超簡単なプログラム
  3. GASとJavaScriptフレームワークVue.jsを使ってWebアプリを作成するための最初の一歩
  4. GASにVue.jsを導入する方法とその動作確認、そしてVue.jsの超基本を解説
  5. 【GAS&Vue.js】v-bindディレクティブを使って属性のデータバインディングをしてみよう
  6. GASとVue.jsによるWebアプリでv-forディレクティブを使って繰り返し要素を描画する方法
  7. GASのWebアプリでクライアント側JavaScriptからサーバー側の関数を呼び出す方法

GAS&Vue.jsでスプレッドシートのデータを使ってWebページを作成する方法

$
0
0
sheets

photo credit: Una_Clara Whites done via photopin (license)

みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

GASとVue.jsを使ってWebアプリケーションを作る方法をお伝えしています。

前回の記事はコチラ。

GASのWebアプリでクライアント側JavaScriptからサーバー側の関数を呼び出す方法
GASとVue.jsでWebアプリを作る方法をお伝えしています。今回は、google.script.runオブジェクトを使用しつつ、GASのWebアプリでクライアント側JavaScriptからサーバー側の関数を呼び出す方法です。

クライアント側JavaScriptからサーバー側GASの関数を呼び出すgoogle.script.runオブジェクトについてお伝えしました。

今回は、これを発展させてGAS&Vue.jsでスプレッドシートのデータを使ってWebページを生成する方法をお伝えします。

では、行ってみましょう!

これまでのおさらい

まず、前々回のおさらいです。

以下のようなWebページを作る方法をお伝えしました。

Vue.jsのv-forディレクティブを使ってGASのWebページにリンク付きリストを表示

プロジェクトの各コードについて紹介します。

まず、URLのリクエストを受け付けるdoGet関数を含むmain.gs。これがいわゆるサーバー側のGASです。

function doGet() {
  var htmlOutput = HtmlService.createTemplateFromFile("index").evaluate();
  htmlOutput
    .setTitle('GAS+Vue.js')
    .addMetaTag('viewport', 'width=device-width, initial-scale=1')
  return htmlOutput;
}

HTMLにバインドするデータをVue.jsのインスタンスに設定するjs.htmlはコチラ、つまりクライアント側のJavaScriptですね。

そして、そのバインドしたデータをHTMLとして参照・表示するのがコチラのindex.htmlです。


  
    
    != HtmlService.createHtmlOutputFromFile('css').getContent(); ?>
  
  
    

{{ tocTitle }}

<p>{{ tocDescription }}</p>
  1. {{ list.title }}
!= HtmlService.createHtmlOutputFromFile('js').getContent(); ?>

index.htmlはまだいいとしても、js.htmlのdataオプションの記述が面倒ですよね。

ここをスプレッドシートから取得したいというのが、しばらくの目標になります。

データソースとして使用するスプレッドシート

そして、スプレッドシートのデータを以下のように用意しておきます。

Vueのdataオプションにセットするスプレッドシートのデータ

A列に記事タイトル、B列にリンクURLですね。

Vueのdataオプションのデータをスプレッドシートから取得する

[前回]の記事でお伝えしたのは、以下のgoogle.script.runオブジェクトと、withSuccessHandlerメソッドによる命令です。

google.script.run.withSuccessHandler(コールバック関数).関数(引数1, 引数2,…)

一番最後に指定している「関数(引数1, 引数2,…)」はサーバー側のgsファイルに記述されているものです。

この関数を呼び出して、正常に実行された場合に、その戻り値を渡しつつクライアント側に記述している「コールバック関数」を呼び出すことができます。

スプレッドシートのデータを取得してリターンをする関数

まず、main.gsにスプレッドシートのデータを二次元配列で取得してリターンをする関数getSpreadsheetValuesを追加します。

function doGet() {
  var htmlOutput = HtmlService.createTemplateFromFile("index").evaluate();
  htmlOutput
    .setTitle('GAS+Vue.js')
    .addMetaTag('viewport', 'width=device-width, initial-scale=1')
  return htmlOutput;
}

function getSpreadsheetValues(){
  return SpreadsheetApp.getActiveSpreadsheet().getDataRange().getValues();
}

サーバー側関数からデータを受け取ってdataオプションにセット

クライアント側JavaScriptでは、そのサーバー側の関数getSpreadsheetValuesを呼び出し、リターンをされたデータを受け取り、Vueインスタンスのdataオプションにセットします。

コードはコチラです。

3行目がgoogle.script.runオブジェクトとwithSuccessHandlerメソッド。サーバー側関数getSpreadsheetValuesを呼び出し、成功したらその戻り値を渡して、関数initializeVueを呼び出します。

関数initializeVue内の6行目で、valuesに対してshiftメソッドを使っているのは、二次元配列の最初の要素(見出し行のデータが格納されている)を削除するためのものです。

それを13行目で、dataオプションのlistsプロパティにセットします。

dataオプションに設定した二次元配列をHTMLに展開する

そして、index.htmlはコチラです。


  
    
    != HtmlService.createHtmlOutputFromFile('css').getContent(); ?>
  
  
    

{{ tocTitle }}

<p>{{ tocDescription }}</p>
  1. {{ list[0] }}
!= HtmlService.createHtmlOutputFromFile('js').getContent(); ?>

今回でいうと、12行目が全てですね。

v-forディレクティブでlistsプロパティの要素分を繰り返してli要素を描画しています。

listsプロパティの要素は二次元配列になりますので、その要素listは一次元配列です。

そして、そのインデックスと内容の関係でいうと

  • 0: 記事タイトル
  • 1: リンクURL

ですから、それぞれのインデックスの要素をMustache構文を使ってaタグ内のテキストとして、またv-bindディレクティブを使ってhref属性としてセットします。

Webページの表示結果

以上のコードでWebページを表示してみると…

スプレッドシートのデータをもとにして作成したGASとVue.jsによるWebページ

このように、スプレッドシートのデータをもとにWebページを生成することができました。

まとめ

以上、GAS&Vue.jsでスプレッドシートのデータを使ってWebページを生成する方法をお伝えしました。

これで、index.htmlはもちろん、js.htmlのほうもだいぶスッキリさせることができました。Webページに表示させるデータの更新もとっても楽ちんです。

あと、tocTitleとかtocDescriptionもスプレッドシートに渡しちゃいたいですよね…ぜひ、トライしてみてください。

さて、次回以降、入力フォームを作り込んでみたいと思います。

どうぞお楽しみに!

連載目次:GASユーザーのためのVue.js&Webアプリ作成入門

Google Apps ScriptではHTML・CSSを使ってWebページを作成し公開することができます。このシリーズでは、その続きとしてはじめてクライアント側JavaScriptを動かすところからスタートし、人気急上昇中のフレームワークVue.jsを使ってWebアプリケーションを作成する方法をお伝えしていきます。
  1. GASのWebアプリケーションでクライアント側JavaScriptを使うための基礎知識
  2. GASでクライアントJavaScriptを使用する超簡単なプログラム
  3. GASとJavaScriptフレームワークVue.jsを使ってWebアプリを作成するための最初の一歩
  4. GASにVue.jsを導入する方法とその動作確認、そしてVue.jsの超基本を解説
  5. 【GAS&Vue.js】v-bindディレクティブを使って属性のデータバインディングをしてみよう
  6. GASとVue.jsによるWebアプリでv-forディレクティブを使って繰り返し要素を描画する方法
  7. GASのWebアプリでクライアント側JavaScriptからサーバー側の関数を呼び出す方法
  8. GAS&Vue.jsでスプレッドシートのデータを使ってWebページを作成する方法

エクセルVBAのQueryTables.Addメソッドでクエリテーブルを作成する方法

$
0
0

querytable
みなさん、こんにちは!
フジタニ(@libartweb)です。

エクセルVBAでQueryTableオブジェクトを使って高速にCSVを取り込む方法をシリーズでお伝えしていきます。

前回の記事はこちら

エクセルVBAでQueryTableオブジェクトを使って高速にCSVを取り込む方法
エクセルVBAを使用したCSVの取り込みは、ループを使用した方法が一般的です。今回紹介するQuertyTableオブジェクトはループを一切使用せずしかも爆速でCSVの取り込みが可能です。概要を説明します。

一般的に使われている、ループを使用したCSVの取り込みの他に、QueryTableオブジェクトを使用して、高速にCSVを取り込む方法があることをお伝えしました。

QueryTableオブジェクトの概要と、その速さを少しはご理解いただけたと思います。

QueryTableオブジェクトにはたくさんのメソッドやプロパティが存在しますので、CSV取り込みでよく使うもののみを取り上げて行きます。

今回はまず最初にエクセルVBAにクエリテーブルを作成する方法を解説します!

QueryTableオブジェクトでCSVを取り込む方法

QueryTableオブジェクトでCSVを取り込む場合は、クエリテーブルの作成が必要です。

クエリテーブルとは

Microsoftの公式ページでは下記の通り解説されています。

Excel では、新しいデータベース クエリを作成し、データをそのワークシートに返した際、ワークシート内にクエリ テーブルが作成されます。

Excel のクエリ テーブルで動的レポートを作成する

「クエリテーブルの作成」とは、エクセルと外部ファイル(今回はCSV)をリンクさせることです。

リンクすることでWorksheet上のクエリテーブルにCSVが取り込まれます。このクエリテーブルは、仮想のテーブルで、実際にセルなどには表示されない見えないテーブルです。

それでは、クエリテーブルを作成する方法を解説していきます。

QueryTables.Addメソッドとは

最初にサンプルコードを。

Private Sub csvSelect()
    Dim strPath As String
    Dim qtCsv   As QueryTable
    
    strPath = "C:\Users\hirom\Desktop\test.csv"
    
    'QueryTableオブジェクトをQueryTables.Addメソッドで追加する
    Set qtCsv = Sheet1.QueryTables.Add(Connection:="TEXT;" & strPath, _
        Destination:=Sheet1.Range("B1")) '取り込むCSVファイルパスと、出力先のシート、セルを指定
    
    Debug.Print "取り込むCSVのパス:" & qtCsv.Connection
    Debug.Print "出力先セルの行番号:" & qtCsv.Destination.Row
    Debug.Print "出力先セルの列番号:" & qtCsv.Destination.Column

End Sub

Worksheetオブジェクト.QueryTables

クエリテーブルを作成するには、WorksheetオブジェクトのQueryTablesプロパティを使って、QueryTableオブジェクトの集まりであるQueryTablesコレクションを参照し、これをオブジェクトとして扱います。

QueryTablesコレクション.Add(Connection,Destination,Sql)

QueryTablesコレクションのAddメソッドを使用して、WorksheetにQueryTableオブジェクトを追加します。

Addメソッドにより、QueryTableオブジェクトが返ります。追加されたQueryTableオブジェクトに対して、CSVの型など様々なプロパティを指定します。(プロパティは次回以降の記事で紹介します)

  1. 新しいクエリテーブルを作成
  2. クエリテーブルにCSVを取り込む
  3. 出力先のセル位置を取得する

以上の流れを実現するメソッドです。図で説明すると下記の通りです。
QueryTables

QueryTables.Addメソッドの引数

引数は3つあります。そのうちのConnectionとDestinationについて解説していきます。Sqlはクエリ文字列を指定しますが、CSVの取り込みでは使用しないので省略します。

引数 内容
Connection 取り込むCSVのパス
Destination 取り込み先セル位置
Sql クエリ文字列

ConnectionでCSVのパスを指定する

CSVのパス名を指定しますが、CSVを取り込む場合は必ず「TEXT;」から記載します。CSVはテキストファイルの一種だからです。「TEXT;」は、エクセルの画面上だと以下の箇所を意味します。

テキストファイル取り込み

TEXT;に続いてファイルのパスを指定します。これで、どのCSVを取り込むか?の指定が完了します。

Connectionはエクセルの画面上だと以下のファイル選択ダイアログを表します。

connection

Destinationで出力先セルを指定する

Destinationは、取り込むCSVファイルをどのWorksheetのどのセル位置を開始位置として取り込むか?を指定できます。

ここで指定するWorksheetは、クエリテーブルを作成したWorksheetじゃないとエラーになります。

サンプルコードではクエリテーブルの作成先、CSVの出力先両方にSheet1オブジェクトが指定されていますが、これはイコールになっている必要があります。

異なるシートを指定すると以下のようなエラーとなりますのでご注意ください。
エラー

ここで指定したセル位置への出力は、次回以降紹介するQueryTable.Refreshメソッドで行います。

この段階ではセル位置を取得するだけです。

実行結果

では実行結果を見ていきましょう。

今回はConnectionで取り込むCSVのパスを指定、Destinationで出力先のセルを指定しました。

イミディエイトウィンドウで、正しく取り込まれたかを確認します。

※サンプルコードを実行した結果です。

実行結果

CSVのパス、出力先セル(B1セルを指定していたので、1行目2列目です)ともに正しく取り込まれていますね!

まとめ・次回予告

以上、クエリテーブルを作成して、そこにCSVを取り込む方法と出力先のセル位置を取得する方法をお伝えしました。

次回はクエリテーブルに取り込んだCSVを、指定したセル位置に出力するQueryTable.Refreshメソッドについて解説します!

どうぞ、お楽しみに!

連載目次:エクセルVBAのQueryTableで高速にCSVを取り込む

一般的なループを使用したCSV取り込みよりも、更に高速にCSVを取り込むことのできるQueryTableオブジェクトに関する連載です。サイズの大きなCSVを取り込む際に非常に便利です。
  1. エクセルVBAでQueryTableオブジェクトを使って高速にCSVを取り込む方法
  2. エクセルVBAのQueryTables.Addメソッドでクエリテーブルを作成する方法

なぜ、Excel VBAの本格解説本を書く必要があるのか

$
0
0

みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

この度、3冊目となる書籍の企画が通過しました!

Excel VBAの本格解説本になります。

本作はあえて書く前から、継続的にブログやコミュニティを通じて、経過やストーリーをお伝えしていければと思っておりまして、早速本記事を執筆しております。

さて、デビュー作で既にVBA本は書いていまして、あれはあれで自分としては超伝えたかった会心の一冊でした。

ですが、今回。もうひとつの大事なピースが、これでようやく埋められる、そんな気持ちでおります。

VBAの解説本なんて、本屋に行けば山ほど置いてあります。良書もいっぱいあります。

では、なぜあえて今からVBAの本格解説本を書く必要があるのか。

それについて、出版社さんに企画の際に送った文面をだいたいそのまま記事として公開します。

では、行ってみましょう!

VBAを好きな人・嫌いない人

VBAは嫌われている!?

繰り返しになりますが、VBA本(とくにExcel VBA本)の解説書は山ほど出版されています。

また、VBAに関してはネットで十分な情報収集ができますし、セミナーなどのリアルの講座もたいへん充実しています。

それだけVBAのユーザー数が多く、ニーズの多い言語なのは間違いありません。

TwitterなどのSNSを眺めていても、コミュニティで実際に活用している皆さんを見ていても、VBAを使いこなすことで仕事の質や、価値が劇的に向上している様子がうかがえます。

しかし、これだけ利用している人が多いのに、一方でVBAが多くの人に嫌われているという事実もあります。

実際、「嫌いなプログラミング言語」の調査で3位にランクインするという不名誉な実績があります。

What are the Most Disliked Programing Languages? | Stack Overflow
Curious of the disliked programing languages? This article creates an overall software ecosystem, representing the most liked and disliked parts.

他の「好きなプログラミング言語」ランキングはあちこちで集計、発表されていますが、VBAは選択肢にすら採用されていないことが多いです。

多大なる恩恵を受けている人もいる

言語としての良し悪しの感じ方、または好き嫌いもあると思います。実際に、他の言語と比べると「ここ、こうして欲しかった…」というところはあるでしょう。(私もあります。)

ただ、そこを踏まえても

  • ここまで20年以上も、非エンジニア職がプログラミングにより仕事の質を挙げる唯一ともいえる手段を提供し続けている
  • Excelにバンドルされており、ほとんどのホワイトカラーがすぐさまチャレンジできる

という、絶大な価値を提供し続けているという事実があります。

私もその恩恵にあずかっている一人、VBAはどん底に落ちまくっていた私の人生を好転するきっかけを与えてくれた、ありがたい存在です。

なのに、なぜ嫌われているのか…?なんですよね。

VBAが嫌われている1つの理由

どうやら他人に迷惑をかけている

その一つの理由として、他人に迷惑をかけているというのがあります。

JavaScriptやPythonなど他のプログラム言語と比較すると、リーダブルでないコード、持続可能性の低い構成や運用体制がまん延しているのは、おそらく事実でしょう。

なにせ、他の言語によって作られたツールは組織で運用管理されていますが、VBAは一般的には個人依存で作成され運用されています。

その人が何らかの理由でそれを管理できなくなったら、ブラックボックスを残されたチームメンバーや、それを押し付けられた社内のエンジニアからすると、なんて余計なことしてくれたんだ…となります。

直接的に迷惑を与えているわけですからね。結果嫌いになる…というのは、一定の理解ができます。

残念な状況を回避するための方法とは

ただ、それは結果です。その根本の原因は何でしょう?

  • 言語として、VBAの「でき」が悪いからですか?
  • たいした才能もないのに無謀にもプログラミングなんかにトライした前任者が悪いのでしょうか?

そうではないはずです。

それは構造的な問題です。

  • Excel VBAが誰でも使えて便利だから、みんながチャレンジしやすい
  • 一方で、使われる部門は本人に、それをマネジメントする機能がない

私は、VBAを取り巻く環境で、そのような残念なことが起きていることを知っています。

それであれば、その知識をうまく伝えられれば、そのような状況を回避するように学習することはできるはずです。

それを解決する一つの方法として「ExcelVBAを実務で使い倒す技術」を書きました。

この本を活用いただくことで、「散らかっているコード」「運用しづらいマクロ」をなんとかすることは、ある程度できます。

あと強化できるところとして重要なのは、ユーザーの言語の学び方、そこを強化することが残されたピースになります。

学び方をどう変えるべきか

「追加情報」ばかりがあふれている

世の中のVBA本は、「使い方」にフォーカスしすぎていると感じます。おそらくそのほうが読者が読みやすい、ニーズに直結して活用できる、色々なメリットはあるのだと思います。

もちろん易しく書くのは大事です。初心者のうちは難しい概念を急にたくさん押し込まずに、少しずつ階段を登らせていくように学んでもらうのが良いでしょう。

ただ、「易しいコンテンツ」と、「頭を使わせないように読ませるコンテンツ」は別モノです。

データ型、変数、基本構文、制御構文、ここまではいいとしましょう。

ブックの操作はこう、シートの操作はこう、セルの操作はこう、メッセージダイアログの表示はこう、フォームの作り方はこう、配列ってのがあるよ、VBA関数ってのがあってね、文字列の操作はこう、日付の操作はこう、ファイルの操作はこう、FileSystemObjectってのもあるよ、Functionプロシージャってのがあってね、これは自作関数といってね、じゃあSubプロシージャは何ナノ?、ところで印刷の設定はこう、グラフの操作はこうで、描画オブジェクトの操作はこう、IEの操作もできるよ、レジストリの操作もできるよ、あそうだイベントってのもあるよ、クラスは…まぁ置いておこうか。

このときはこう、この場合はこう、追加に次ぐ追加、そして追加です。

必要なのは引き算や割り算

おそらく、どこかの段階から、キレイに脳みそで処理するのは難しくなります。

そうなると、都度やりたいと思ったときに、調べて、見つけて、コードに追加。また、次に別のやりたいことを調べて、見つけて、コードに追加…。前に書いたやつは、なんだっけ?

つまり、これらの新たなテクニックやノウハウは脳みそを通過して、コードとしてアウトプットされていますが、通過後の脳みその中に、事後のコントロール可能な状態で蓄積されていないのです。

飼いならせていない猛獣たちが世に放たれ続けているような状態が思い浮かびます。

ですから、学習を重ねることを考えると、そろそろ「次元」を変えなければいけないのは、なんとなくご理解いただけますでしょうか?

だから、ある一定の段階以降で必要になってくるのは、足し算の学習ではなくて、引き算や割り算の学習だと思っているのです。

言語の体系や法則を知ることが重要

JavaScriptの美しさに目からウロコした件

「詳解! GoogleAppsScript完全入門」を書く上で、JavaScriptを学んで目からウロコだったことがあります。

JavaScriptでは、プリミティブ値以外の操作対象は全てオブジェクトなんです。

てことは、オブジェクトの特性がわかっちゃえば、言語で取り扱うほぼ全ての操作対象の特性が一定のところまでわかっちゃうということです。

どんなオブジェクトでもメソッドまたはプロパティを持っています。その記法はベースは一緒。インスタンスの生成の仕方も一緒。

私は、たった2冊ほどのJavaScript本を読むだけで、この珠玉の果実にありつけました。

言語は体系に沿って構成されていて、法則性があります。

JavaScriptが美しい言語というのもありますが、その体系や法則がつかめる本にすぐ出会える、このことが恵まれていると思いました。

では、VBAは…どうなんでしょう?

体系や法則を学べるVBA本が存在しないのなら作る

私はこれまで何年かかけて、いくつかの書籍を活用してVBAを学んできていますが、VBAの体系や法則に触れながら、一気通貫して学べるものはありませんでした。

「クラス」とは何か、「VBA関数」とは何か、「メソッド」や「プロパティ」とは何か、そういうものが存在していること、そしてその使い方以上の理解はなかなか得られません。

なぜ「Propertyプロシージャ」は紹介されていないのか、体系をつかむという視点では疑問に思います。

そんな問い受けて、VBAの体系や考え方の全貌が一気通貫して学べる解説書を書きたいと思いました。

VBAはいい意味でも悪い意味でも選択肢が多い言語ですが、全体が見えていれば、どのような選択をすることがリーダブルでサステナブルなのか、そういう判断もしやすくなると考えます。

新たなテクニックを仕入れても、既に脳みその中に既にある体系の理解や法則とリンクし、鵜呑みせずに咀嚼しながら蓄積、活用ができるでしょう。

そのようにして、アウトプットされたコードは以前よりもはるかに整っていて、コントロール可能な状態になると信じています。

まとめ

以上、なぜ、VBAの本格解説本を書く必要があるのかについてお伝えしました。

簡単に言うと、VBAの体系や法則への理解を「自分がほしかったから」ですねw。

こういう本があれば、もっとスマートに、高いパフォーマンスで学んでこれたと思いますし、VBAってこういう考え方で作られていて、お茶目なところもあるけど、いいところもあるんだよ!とか言えるじゃないですか。

実際に、VBAが仕事の価値を著しく向上させるものというのは間違いありませんので、それをなお一層元気よく、そして自信を持って使っていただきたい、そう思うわけです。

さて、そんなわけでこれから書き始めます。

スケジュールはまだなんとも言えませんが、年内までに書き上げて、来年4月というのが今のところのターゲットです。

また、折をみて本書やその内容について、ご報告していきますね。

どうぞお楽しみに!

コミュニティ「ノンプロ研」で原稿を公開しながら執筆します!

あ、そうそう、大事なことを伝え忘れてました。

今回、新しい取り組みとして、コミュニティ「ノンプログラマーのためのスキルアップ研究会」で、執筆した原稿を一部(または全部)共有しながら進める予定です。

もちろん、書籍の内容は私が責任を持って書きますが

  • 本書がどんな内容なのかな?
  • 書籍の執筆ってどんな進め方なのかな?

とか、気になる方もいらっしゃるでしょう。

これを機に、ご参加検討いただくのも良いと思います。

どうぞお待ちしております!

Windowsのポチポチ業務を爆速化するPowerShell、キーボードを使わずササっと起動する方法

$
0
0

Windowsのポチポチ業務(マウスを使った業務)を爆速化するために、PowerShellを使った効率化をお伝えしています。

前回の記事はこちらです。

Windowsのポチポチ業務を爆速化できるPowerShell、はじめのハードルぐーーんと下げてみます!
Windowsユーザーにとって強力な手助けとなるCUI=PowerShell。とっつきにくいですが、慣れてしまえばこれほど強力な武器はありません。はじめのハードルを乗り越えてCUIで普段の業務を爆速化しましょう!

前回は、WindowsでPowerShellの利用をおススメする理由をお伝えしました。

今回から実践編としてPowerShellを実際に使っていきたいと思います。

PowerShellをマウスを使わずに起動する方法を3つをお伝えし、プログラミング学習ではお決まりのHelloWorldをやってみます

それではいきましょう!

PowerShellを起動する3つの方法

起動する方法を3つお伝えしますが、最速は1番はじめのアドバンスドメニューから起動する方法です。残り2つに関してはスピードでは劣りますが、他のアプリケーションを起動する際にも応用できますので、ご紹介しています!

アドバンスドメニューから起動する

それではスタートメニューをまずクリックして…といいたいところですが!
ポチポチ業務をなくすのがこの連載の大きな目的です。

マウスは置いておいて、WindowsキーとXを合わせて押してください。

このアドバンスドメニューはスタートメニューを右クリックしても表示されます。

この状態でIキーを押すと

PowerShellが立ち上がりました。

スタートメニューから起動する

Windowsキーを押しましょう。

こんなマークのキーですね。するとスタートメニューが表示されます。

次にを押すと

このように全てのプログラムの一番上にカーソルが来ました。

次にWを押します。するとWから始まるプログラムに一気に移動します。ここにWindows PowerShellというフォルダがあるのでで移動・選択し、エンターを押します。

フォルダが展開されて、Windows PowerShellが表示されました。で選択し、エンターを押します。

PowerShell以外のアプリケーションを起動するときにもこの方法は使えますね。

ファイル名を指定して実行する

WindowsキーとRを同時に押してください。

「ファイル名を指定して実行」というダイアログが表示されました。このダイアログにpowershellと打ち込んで…

エンターを押してください。

powershellのほか

  • notepad:メモ帳
  • calc: 電卓
  • mspaint:ペイント

など他のアプリケーションのショートカットも用意されているので調べて使ってみてもいいかもしれません。

ここまで、PowerShellの起動方法を3つご紹介しました。

アプリケーションの起動もこのようにマウスを使わずに行うと素早くできますね。

さてPowerShellが起動できたところで、画面に表示されている内容について見ていきましょう。

PowerShellの画面説明

PowerShellのメニュー

PowerShellの画面の左上を見てください。PowerShellのアイコンをクリックすると

メニューが表示されます。

メニュー内容は

  • 元のサイズに戻す
  • 移動
  • サイズ変更
  • 最小化
  • 最大化
  • 閉じる
  • 編集
  • 規定値
  • プロパティ

となっています。このメニューについては、以前Windows標準のCUIであったコマンドプロンプトの名残りの部分が多く、使用頻度は高くありません。プロパティは、文字・画面の色やサイズが変更できますので、お好みで変更してもよいかもしれません。

プロンプトとは

メニューの他は、以下のような文字が表示されているだけのシンプルな画面構成になっています。

「PS C:\Users\terad>」について解説していきます。

この部分をプロンプトと言います。プロンプトには促すという意味がありますが、システムが入力可能状態であることを示す文字列のことで、CUIでは共通の用語なので覚えておきましょう。

部分毎に解説していきます。

「PS」は文字通りコマンドがPowerShellであることを示しています。

「C:\Users\terad」は現在、処理対象であるフォルダを指しています。

「>」は「ここに入力してねー」とコマンドの入力位置を指し示す記号です。

PowerShellのプロンプトは、このように「PS + 処理対象のフォルダ + >」の組み合わせとなっています。

コマンドレットを使ってHelloWorldをやってみよう!

さて、PowerShellでプログラミング学習のお決まりHelloWorldをやってみましょう!

コンソールに文字列を表示するにはWrite-Hostというコマンドレットを使います。

「Write = 書く」 + 「Host = コンソール」と前回説明したとおり動詞-名詞形式になっていますね。

PowerShellで文字列を扱う時は、シングルコーテーション「’」かダブルコーテーション「”」で囲みます。実は両者には違いがあるのですが、それは次回以降ご説明します。

今回はシングルコーテーション「’」で文字列「Hello World!」を囲みます。

Write-Host ‘Hello World!’

これをプロンプトの横に打ち込んで、エンターを押してください。

このように画面上に「Hello World!」と表示されたら成功です。

まとめ

いかがでしたか?

今回はPowerShellをマウスを使わずにササっと起動する方法とお決まりのHelloWorldをやってみました!

次回はPowerShell=CUIを使う上で知っておきたいディレクトリの考え方について説明します。

最後までお読みいただきありがとうございました!

連載目次:Windowsのポチポチ業務を爆速化するPowerShell

Windowsのポチポチ業務(マウスを使った業務)を爆速化するために、PowerShellを使った効率化の方法をお伝えしています。
  1. Windowsのポチポチ業務を爆速化するPowerShell、はじめのハードルぐーーんと下げてみます!
  2. Windowsのポチポチ業務を爆速化するPowerShell、キーボードを使わずササっと起動する方法

【エクセルVBA】GetNamespaceメソッドでOutlookのデータフォルダにアクセスする方法

$
0
0

vba,NameSpace,eyecatch

みなさまこんにちは、ノグチです。

エクセルVBAでOutlookを操作する方法を、何度かの記事に渡ってご紹介しています。

前回までは、エクセルシートの内容をメールで送信したり、連絡先に登録する方法をご紹介してきました。

【エクセルVBA】Outlookでメールを作成・送信する方法
エクセルシートに記入された件名や本文を、エクセルVBAによってOutlookのメールの件名と本文にセットしてメール送信する方法をご紹介しています。VBAでメールの送信ができれば、宛先に応じてメールの本文を変えつつ一斉に送信することもできますよ。
エクセルVBAでOutlookの連絡先を登録する方法
エクセルVBAでOutlookの連絡先を登録する方法をご紹介しています。この方法なら、エクセルシートに書かれたリストで連絡先を渡されても、サクサク連絡先が登録できますよ。OutlookにはエクセルやCSVファイルからデータをインポートして連絡先を登録する機能もありますが、そちらでは物足りない!という方にオススメです。

お仕事をしていると、あるプロジェクトや取引先、チームなどに関連するメールだけをエクセルシートに書き出したいな…ということ、ありませんか?

或いは、アンケートの回答をメールで送信してもらったりして、それをエクセルシートに並べてみて分析したい…なんてこともあるかもしれません。

それ、VBAを使えば自動化できるかもしれませんよ。

ということで今回からは、エクセルVBAからOutlookのメールフォルダにアクセスして、フォルダ内のメールの内容をエクセルシートにリストとして出力する方法を、順を追ってご紹介していきます。

今回は、そのメールフォルダへアクセスする準備として、GetNamespaceメソッドでOutlookのNamespaceオブジェクトの取得する方法をご紹介します。

Namespaceオブジェクトとは

さて、最初にメールフォルダの中身をエクセルシートに書き出す、と言いましたが、そのためにはまずメールのデータが格納されているフォルダにアクセスしなければいけませんね。

そのために使うのがOutlookApplicationオブジェクトのNamespaceオブジェクト

Namespaceオブジェクトは、Outlookのメールや予定表、連絡先といった様々なデータにアクセスすることができるオブジェクトです。

GetNamespaceメソッドでNamespaceオブジェクトを取得する

このNamespaceオブジェクトを取得するには、OutlookApplicationオブジェクトのGetNamespaceメソッドを使います。

記述方法はこちら。

OutlookApplicationオブジェクト.GetNamespace(“MAPI”)

引数には、取得したいNamespaceの型を指定する…のですが、現在のところ指定できるのはOutlookのMesseging Application Programming Interface(メッセージアプリケーションの構造)を表す“MAPI”だけですので、記述方法をそのまま覚えてしまうといいですね。

このメソッドを使うことで、Outlookで設定されているアカウントのメール、予定表、連絡先などのデータが格納されているフォルダにアクセスすることができます。

実際にコードにしてみると、こんな感じになります。

Sub GetmailFolder()
Dim objOutlook As Outlook.Application
Dim myNamespace As Outlook.Namespace

Set objOutlook = New Outlook.Application
Set myNamespace = objOutlook.GetNamespace("MAPI")

Stop
End Sub

取得したNamespaceオブジェクトを確認する

上のコードを実行して、NamespaceオブジェクトでOutlookのデータが取得できているかを確認しましょう。

Namespace型変数のmyNamespaceの内容を確認してみます。

色々なプロパティがありますが、分かりやすいところで、メールフォルダの名前が取得できているかを見てみると…

vba,getnamespace,オブジェクト,取得

この通り、メールフォルダの名称が取得できています。

Namespaceオブジェクトが取得できるプロファイル

このGetNamespaceメソッドを実行すると、Outlookで既定のプロファイルになっているプロファイルのデータを取得します。

Outlookには、複数のプロファイルを指定することができるようになっていますね。

「Outlookのプロファイルって何?」という方は、下記のページが参考になるかもしれません。

MicroSoft Outlook 電子メール プロファイルの概要

例えば、「Aさん」と「Bさん」が1台のPCを共有しているとしましょう。(PCのログオンユーザーも同じ)

Outlookでは、「Aさん」用のメール、予定表、連絡先等のデータを、「Bさん」用のOutlook用のデータを、それぞれプロファイルとして保持することができます。

Outlookを起動した時に「Aさん」のプロファイルを選んでOutlookを起動した場合、「Bさん」のメールや予定表等は見ることができません。

逆も然りです。

Outlookでは各プロファイルそれぞれにメール、連絡先、予定データが作られますが、GetNamespaceメソッドを実行した時取得できるNamespaceオブジェクトは、既定のプロファイルのデータを取得します。

「Aさん」のプロファイルがOutlookの規定プロファイルになっていてGetNamespaceメソッドを実行した場合、「Aさん」のデータが取得されます。

Microsoft Outlook 16.0 Object Libraryの参照設定を忘れずに

ここまでNamespaceオブジェクトやGetNamespaceメソッドをご紹介していますが、これらはVBEでMicrosoft Outlook xx.x Object Libraryの参照設定が必要です。

参照設定をしないまま上の記述方法やコードを書いても、コンパイルエラーになってしまいます。

設定方法はこちらの記事でご紹介していますので、併せてご覧ください。

【エクセルVBA】エクセルVBAでOutlookを操作しよう!参照設定とOutlookアプリケーションオブジェクトの取得
エクセルVBAでOutlookのメール送信やタスク作成操作をする前準備として、VBEの参照設定や、Outlookアプリケーションオブジェクトの取得方法をご紹介しています。 VBAとOutlookを組み合わせて使うことで、既に便利に使えているメーラーを更に便利にできるかもしれませんよ。

最後に

今回は、Namespaceオブジェクトと、GetNamespaceメソッドによるNamespaceオブジェクトの取得方法をご紹介しました。

次回は、このNamespaceオブジェクトとメソッドやプロパティを使って、Outlookの受信メールフォルダとそのサブフォルダにアクセスする方法をご紹介していきたいと思います。

それでは、最後までお読みいただきありがとうございました!

連載目次:エクセルVBAでOutlookを操作してみよう!

エクセルVBAでOutlookのメール作成、送信やタスク登録などの操作をする方法をご紹介しています。メーラーとして便利なOutlookですが、VBAと組み合わせて更に便利に使ってしまいましょう。

  1. 【エクセルVBA】エクセルVBAでOutlookを操作しよう!参照設定とOutlookアプリケーションオブジェクトの取得
  2. 【エクセルVBA】Outlookでメールを作成・送信する方法
  3. 【エクセルVBA】エクセルシートに一覧化された複数の連絡先に本文を変えつつOutlookでメールを一括送信する方法
  4. エクセルVBAでOutlookメールの下書きを作成・表示して送信前に内容チェックする
  5. エクセルVBAでOutlookの連絡先を登録する方法
  6. 【エクセルVBA】GetNamespaceメソッドでOutlookのデータフォルダにアクセスする方法

コミュニティの活用術とノンプロ研の今、そしてこれからについて

$
0
0

みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

ちょっと世間を見渡すと「コミュニティ」…流行ってるように見えませんか?

ここ1年くらいで、急激に活発になってきた印象がありまして、ちょっと活動的な人であれば、ひとつやふたつのコミュニティ参加の経歴はあるのではないかと思います。

私もそんな波に乗り遅れまいと、昨年の2017年12月から、本コミュニティ「ノンプログラマーのためのスキルアップ研究会」を運営しているわけです。

そろそろ運営を開始して9ヶ月ということで、なんとなく様子もわかってきたり、課題も見えてきたりというところもあります。

そんなわけで、そもそもコミュニティってなんだっけ?なんで必要なんだっけ?ノンプロ研の活動ってどうなの?これからどうするのがよいの?みたいなところを整理したいな~と思っておりました。

先日の定例会を機に、整理の度合いとしては一定の成果がありましたので、皆様にお伝えできればと思います。

※この記事はコミュニティ「ノンプログラマーのためのスキルアップ研究会」定例会Vol.9「コミュニティ活用術とこれからのノンプロ研」の内容の一部を加筆修正して記事にしたものです。当日の様子は以下のツイートまとめもご覧くださいませ。

ノンプロ研定例会Vol.9 「コミュニティ活用術とこれからのノンプロ研」
「プログラミングの学習」というと、一人でもくもくと勉強するもの、と考えがちですが、決してそれだけではありません。コミュニティを上手に活用することで、効果的に学びの機会を得ることができます。今回は、..

そもそも「コミュニティ」とは

コミュニティ、コミュニティいってますけど、コミュニティとは結局ナニモノなのでしょうか?

皆さん、説明できます?

私、辞書とか、語源とか、色々と調べてみたのですが、いずれのアプローチからも、かなり幅広い定義しか得られなくて、正直困りました。

よく「共同体」って和訳されるのですが、それって農村型のやつでしょ?もう、だいぶ崩壊していて、いわゆる最近流行っているオンラインサロン的なやつからすると、大きくかけ離れているように見えます。

私個人の解釈としては、時代によって定義の中心となる像が変わっているというものです。つまり、

  • 近代では農村型の共同体
  • 高度成長期では都市型、いわゆる会社と社会全体の二重構造
  • 今流行っているのはネットをきっかけとした分散型で、多種多様な集まり

というように変化しているもの、としてみました。

それで、今みんなが積極的にコミュニティを作ったり、参加したりしているのは、2つの理由があって

  • 高度成長期には強固だった、会社と社会全体の「安心・安定」がかなりグラついてきている
  • インターネットをはじめとするテクノロジーのおかげで情報の伝達や人のつながりが超簡単になった

という両側面があるかなと思います。

「お金」による安心・安定に関してはまだ会社社会のほうに握られている感じはありますが、「価値観」に関してはそこからはかなり離脱を始めている。

そして、それぞれ自分の価値観にマッチした「安心・安定」を求めているようになった…、それを提供するのがネットをベースとした各種コミュニティが担っているという理解です。

定例会で話をしていたら、皆さんは「居場所」というキーワードに反応が強かったですね。

それぞれの居場所というニーズが高まっていて、ノンプロ研も「居場所」として提供できているという実感を得ました。

ノンプロ研が生まれた理由

コミュニティも含めて、私のテーマは「働くの価値を上げる」というものです。

単純作業はわざわざ人がやる必要がなくて、それはコンピュータに任せれば良い(そもそもやらなくて良い仕事もありますが)わけで、できる限りの時間を自分でしかできないような仕事や、将来もっと良い仕事ができるようにスキルを磨くような価値のある時間に変えていくという考え方です。

これは、生産性向上のシンプルな打ち手で、本質的にはまず正しいと考えています。

ただ、ほらよく見てみてください。

「働き方改革」。言っているだけで、ほとんどの会社では全然進まないじゃないですか?

なぜなんでしょう?

それは、人の「思考のクセ」が原因で、多くの職場では生産性よりも「デフォルト」や「直感」や「好み」が評価の基準になりがち、だからです。

このあたりは、ちょっと深い話なのですが、以下の書籍がとても参考になります。

ITの仕事をしているのですが、この人間の思考のクセが私にとっては最大の敵です。

では、うまく推進されない企業にいながらも、個人でなんとかしたい!そういう人たちは大変ですよね。

会社というコミュニティでは、その価値観が合わないわけですから。プログラミングを学んで効率化しても認められない、評価されない、というかむしろ「遊んでないで仕事しろ」などと言われる。

孤独で、辛いです。その中で頑張ってスキルを磨き続けるのは大変です。

ですから、そういう人たちを集めたコミュニティを作ってみようと思いました。

それがノンプロ研、ということです。

コミュニティをもっと活用するために

さて、そんなノンプロ研。

もっと活用するにはどうしたらよいか、良い機会なので考えました。

3つありますので、紹介します。

複数のコミュニティでギブをする

複数のコミュニティを意識して、それぞれでギブをしよう!というものです。

多くのメンバーはノンプロ研以外も、会社だったり仕事仲間だったり、他のコミュニティに属しています。

例えばノンプロ研の活動中は、「他方のコミュニティでギブするネタないかな」と思いながら活動するんですね。

そして、それを実際にアウトプットしてギブします。

これには二重のメリットがあります。

  1. ギブすることにより、それぞれのコミュニティでの信頼を貯める
  2. 教えることを前提に学ぶので、学習の質が上がる

例えば、コミュニティで学んだことを会社で活かす、というわけですね。逆に会社でやっていることをコミュニティでギブする、ということです。

意外に、一方で普通のことは、他方ではお宝だったりしますからね。ギブは思ったより実は全然簡単です。

プロジェクトを企画する

定例会、もくもく会、輪読会、分科会…ノンプロ研では、これまで様々なイベントを実施してきました。

ただ、私が頑張りすぎちゃった。

ほら、かのフォード・モーター創業者の、ヘンリー・フォードさんもおっしゃっています。

自分で薪を割れ、二重に温まる。

自分が行動するほうが、実入りが大きいのです。

なので、メンバーの皆さんにプロジェクトの言い出しっぺになっていただきたい!と思いました。

そして、今まで私ばっかりいい思いをしてスミマセン…と思いました。

コミュニティのSlackで「イベントやろうよ」チャンネルと「飲みに行こうよ」チャンネルを作りましたので、

  • もくもく会
  • 輪読会
  • 飲み会

このあたりは、じゃんじゃん企画して、どんどん実行してください!

お仕事をしてみよう

ノンプロ研が居場所を提供できていて、皆さんスキルアップができているとしても、もう少し「出口」つまり目標が欲しいなと思っていました。

今、ブログ「いつも隣にITのお仕事」で毎週執筆いただいている方々(このチームを「いつも隣にITのお仕事パートナーズ」と命名しました)には、スキルに合わせてお仕事を分配するという仕組みで動いています。

これまでは、チャットワーク経由で普通に応募を受け付けていたのですが、そのチームへの参加条件として、ノンプロ研への加入を加えることにしました。

以下のページが募集案内ページですね。

【副業&在宅OKパートナー募集!】お仕事をしながらITと記事執筆のスキルアップも
プランノーツでは一緒にお仕事をして下さるパートナー様を募集しています。 Excel・VBA、Google AppsなどのITと記事執筆スキルを磨きながら、空いた時間を使って収入を得ることができます。

ノンプロ研メンバーからすると

  • 副業の機会
  • 実収入
  • プロとしてのプログラミング・ライティングスキルを磨く機会

などが得られるチャンスが生まれます。

普通に仕事が欲しい人から見ると「えー、お金が欲しいのに、先に金払うのかよぉ」ってなると思うのです。

ただ、お金が欲しい人に機会を提供するよりは、学びたい人・ギブする人に機会を提供したい、と思った次第です。

ノンプロ研のこれから

あとこれからでいうと、いくつかの新しい試みが動き始めています。

動画・スライドのアーカイブ全開放

今まで、定例会の動画・スライドは当月中かつ会員のみに提供していたのですが、それをいつでも全てダウンロード可能としました。

途中からコミュニティに参加したメンバーは、ちょっと気後れみたいなのが起こりやすいので、ガッツリ取り戻していただけるようになりました。

あと、長く参加いただいているメンバーについては、「その期間参加を継続している」ということに価値を与えないとダメだと思いますし、実際そうだと思うんです。

なので、思い切りました。

書籍の原稿先出し

今後、私が執筆する書籍がある場合は、執筆した原稿を出版前にコミュニティ内に共有していきます。

第1弾はつい先日発表した、「ExcelVBAの本格解説本(仮)」になります。

なぜ、Excel VBAの本格解説本を書く必要があるのか
3冊目となる書籍の企画が通過しました。Excel VBAの本格解説本です。なぜあえて今からVBAの本格解説本を書く必要があるのかについて、出版社さんに企画の際に送った文面をだいたいそのまま記事として公開します。

先に見られるというメリットはもちろん、どういうことを思って書いているのかとか、議論をした結果を原稿にフィードバックしたりとか、結果だけでなく、書籍の「過程」を価値として提供したいということです。

全国展開

参加者自身がプロジェクトを動かせるので、東京でなくても活動はできちゃうのです。

定例会はリモートでもハングアウト経由で視聴いただけるようになっていますしね。

もくもく会、輪読会は、地方でも企画いただけます。

オンラインは当然、世界中のどこでもいいわけで。

ほんのりですが、大阪については企画が動きはじめました。

あと、北海道とか仙台とか、四国とか…あるんですかね?

まとめ

以上、コミュニティの活用術とノンプロ研の今、そしてこれからについてお伝えしました。

今回整理できて、すごくスッキリしております。そして課題とそれに対するアクションも明確になりました。

メンバーの皆さんも考える機会になって、良かったのではないかなと勝手に思っております。

定期的にこういう機会、必要ですね。

これからのノンプロ研の活動も、どうぞ注目いただければと思います。

「ノンプログラマーのためのスキルアップ研究会」定例会・分科会レポート

コミュニティ「ノンプログラマーのためのスキルアップ研究会」では、毎月1回、学びの質やモチベーションを高めるための定例会を開催していますので、こちらで過去のレポートをお送りしています。

GASでGmailを操作して日々の日報メールの下書きを自動で作成する

$
0
0
draft

photo credit: mikecohen1872 draft via photopin (license)

みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

日報メール書いてますか!?

弊社は私一人の会社なので、日報を求められることはなかなかないのですが、多くの企業では毎日の日報は、上司との大事なコミュニケーション手段となっていますよね。

ただ…面倒くないすか?

いや、上司とのコミュニケーションがというわけではなく、半分くらいは同じこと書いていません?

それを頑張ってキーボードで打っていたりしますか?

時間がもったいない!

ということで、GASでGmailを操作して、日々の日報メールの下書きを自動で作ってしまいましょう!という話です。

日報の下書きを自動化すべき理由

さて、日報の書き方は会社や部署によって違うとは思うのですが、例えば以下のような日報があるとします。

○○さん
お疲れ様です。高橋です。

本日の日報をお送りします。

10:00-11:00 …
11:00-12:00 ……
12:00-13:00 昼休憩
………

以上です。これこれのかくかくしかじか。
明日もどうぞよろしくお願いいたします。

高橋

宛先を呼び最初のお疲れ様です的な挨拶、何時から何時と時間刻む部分、最後の挨拶…このあたりって、いつも同じだったりしません?

それを、毎日打つなんて…時間と指のエネルギーがもったいない!!

また、Gmail開いて、「+作成」で「新規メッセージ」を開いて「To」とか「件名」とか設定する…というのも、ルーティンですから正直ダルい作業です。

このへんは、GASのGmailの操作と、時限式のトリガーを活用して、すっかり自動化しちゃいましょう。

ということで、このシリーズでは、お決まりの部分を入力済みのメールの下書きを、毎日帰社前などの帰宅時に自動で作成するというのを目標に進めていきたいと思います。

スプレッドシートの準備

日報メールのお決まりの部分については、スプレッドシートで入力しておけると便利です。

以下のようなスプレッドシートを用意しました。

日報メール下書きのベースとなるスプレッドシート

B3セル、B4セルについては、この内容もスプレッドシート関数を使って自動で生成するようにしています。

例えば、タイトルの入力欄であるB3セルでは、としてB1セルが入力されていれば自動で生成されます。

=”日報 [” & B1 & “] : ” & TEXT(TODAY(), “yyyy/mm/dd(ddd)”)

B4セルの「書き出し」は

=TEXT(TODAY(), “yyyy/mm/dd(ddd)”) & “分、” & B1 & “の日報をお送りします。”

としています。

残りのB1,B2,B5,B6セルにはそれぞれお決まりの内容を入れていけばOKです。

B5セルの「本文」は当然毎日書くことが異なるわけですが、この部分はGmailの下書きが出来上がっていたら、それを開いて修正、そして手動で送信するというイメージでします。

Gmailで自動で下書き作成するスクリプト

では、このスプレッドシートの情報をもとに、Gmailで日報メールの下書きを自動で作成するスクリプトを作成しました。

先程のスプレッドシートのコンテナバインドスクリプトとして作成してくださいね。コンテナバインドがわからない方はこちらの記事をどうぞ。

【初心者向けGAS】本当の最初の一歩!スクリプトエディタでプロジェクトを開く
超初心者向けにGoogle Apps Scriptのプログラミングの一通りの流れと書き方について学ぶシリーズです。今回は、その最初の一歩としてスプレッドシートからスクリプトエディタを開く手順をお伝えします。

さて、コードですが、こちらです。

function createDraft() {
  var values = SpreadsheetApp.getActiveSheet().getDataRange().getValues();
  var to = values[1][1];
  var subject = values[2][1];
  var body = '';
  body += values[3][1] + '\n\n';
  body += values[4][1] + '\n\n';
  body += values[5][1];
  
  GmailApp.createDraft(to, subject, body);
}

結構シンプルですよね…!解説をしていきます

シートのデータを二次元配列として取得する

まず、2行目ですね。

SpreadsheetAppのgetActiveSheetメソッドで、バインドしているスプレッドシートのアクティブなシートを取得します。

シートは1枚しかないので、確実にアクティブなシートが決まるので、遠慮なく使えますね。

【初心者向けGAS】本当の最初の一歩!スクリプトエディタでプロジェクトを開く
超初心者向けにGoogle Apps Scriptのプログラミングの一通りの流れと書き方について学ぶシリーズです。今回は、その最初の一歩としてスプレッドシートからスクリプトエディタを開く手順をお伝えします。

次に、そのシートのデータがある範囲をgetDataRangeメソッドで取得します。

これがもう、超絶便利メソッドですね。

それでセル範囲を表すRangeオブジェクトが取得できますので、getValuesメソッドを使って二次元配列としてデータを取得します。

この1行については、ほぼお決まりフレーズといっても良いですね。非常によく使います。

二次元配列から宛先・件名・本文を取得、生成する

続いて、3行目から8行目までは、getValuesメソッドで取得した二次元配列のデータから、

  • to: 送信先メールアドレス
  • subject: メッセージの件名
  • body: メッセージの本文

を取得したり、生成したりする部分ですね。

二次元配列については、以下の記事も参考になるでしょう。

【初心者向けGAS】スプレッドシートのセル範囲の値を二次元配列として取得して取り扱う方法
Google Apps Script初心者向けのお題として、名言Botの作り方をお伝えしています。今回は、スプレッドシートのセル範囲の値を二次元配列としてgetValuesで取得して取り扱う方法です。

メールの下書きを作成する

そして、10行目がGmailで下書きを作成する部分です。

GmailAppのcreateDraftというメソッドを使います。

書式はこちらです。

GmailApp.createDraft(宛先, 件名, 本文)

これだけで、実行者のGmail下書きフォルダに指定した宛先、件名、本文にてメッセージの下書きを作成することができます。

実行して下書きを作成する

スクリプトを実行すると以下のようにメッセージの下書きを作成することができます。

GASで作成した日報メールの下書き

このスクリプトを毎日の帰社前の時間帯でトリガーを設定しておき、必要事項を入力して送信すればOKということですね。

まとめ

以上、GASでGmailを操作して毎日の日報の下書きを自動で作るスクリプトを紹介しました。

かなりシンプルなコードで実現できますし、実務でも使えるツールになりますから、Google Apps Script初心者の練習用としてもってこいですね。

ぜひご活用くださいね!

エクセルVBAのQueryTable.RefreshメソッドでCSVをシートに出力する方法

$
0
0

QueryTable.Refreshアイキャッチ
みなさん、こんにちは!
フジタニ(@libartweb)です。

エクセルVBAでQueryTableオブジェクトを使って高速にCSVを取り込む方法をシリーズでお伝えしております。

前回の記事はこちら

エクセルVBAのQueryTables.Addメソッドでクエリテーブルを作成する方法
エクセルVBAのQueryTables.AddメソッドでエクセルのWorksheet上にクエリテーブルを追加してそこにCSVを取り込む方法と、出力先セル位置を取得する方法を紹介します。

QueryTables.AddメソッドでWorksheet上にクエリテーブルを作成して、そこにCSVを取り込む方法をお伝えしました。

QueryTableオブジェクトを使用したCSV取り込みを理解する上で、第一歩である「クエリテーブルの作成」は非常に重要な内容でした。

今回は、クエリテーブルに取り込んだCSVをWorksheetに出力する方法をお伝えいたします!

QueryTable.RefreshメソッドでWorksheetにCSVを出力する

QueryTable.Addメソッドで作成したクエリテーブルの状態

QueryTables.Addメソッドでクエリテーブルを作成しただけではWorksheetを見ても、空の状態です。

Worksheetには何も反映されていない
なにも反映されていませんね。

クエリテーブルという見えないテーブル上にCSVが取り込まれた状態ですが、まだそれをWorksheetに出力するための命令をしていないからです。

この後、Worksheetに出力する命令が必要となってきます。では、その方法を見ていきましょう!

QueryTable.Refreshとは

今回のサンプルコードは以下の通りです!

Private Sub csvImport()
    Dim strPath As String
    Dim qtCsv   As QueryTable
    
    strPath = "C:\Users\hirom\Desktop\test.csv"
    
    'QueryTableオブジェクトをQueryTables.Addメソッドで追加する
    Set qtCsv = Sheet1.QueryTables.Add(Connection:="TEXT;" & strPath, _
        Destination:=Sheet1.Range("A1")) '取り込むCSVファイルパスと、出力先のシート、セルを指定
    
    qtCsv.Refresh BackgroundQuery:=False 'CSVをWorksheetに出力する
End Sub

WorksheetにCSVを出力するには以下のメソッドを使用します。

QueryTableオブジェクト.Refreshメソッド(BackgroundQuery)

Refreshメソッドは非常に単純で、QueryTableオブジェクト内のCSVの内容をWorksheetに出力します。もしここでプロパティを設定していれば、設定した内容で出力されます。

このメソッドを実行しないと、取り込んだCSV、設定したプロパティなどはすべて反映されず、Worksheetは空の状態のままになってしまいます。

必ず記述しましょう。

QueryTable.Refreshの引数

引数にはBackgroundQueryがあります。TrueかFalseを指定します。

BackgroundQuery:=False

バグの原因となるので、通常はFalseを指定しましょう。

Trueを指定すると、バックグラウンドでのテーブル更新が有効となり、まだWorksheetへの出力が終わっていないのに、次のステップへ進んでしまいます。

場合によっては正しく出力されない、といったこともあります。

CSV取り込み時は基本的にFalse指定と覚えておいてください

実行結果

サンプルコードではQueryTableオブジェクトがどのような動きをするか?を最もシンプルな形で理解していただくために、何もプロパティを指定していません。

プロパティを指定しなかったらどうなるか?とりあえずCSVを出力します。

CSV取り込み結果

CSV自体は正しくWorksheetに反映されていますね!

でも、すべてのデータがカンマで区切られず、Aセルに出力されてしまっています。プロパティを指定しないとこんな結果になってしまいます。これでは使えません。

次回以降の記事で説明するプロパティを使えば、文字列の型や、カンマ区切りの指定など様々な設定が可能です。

以下の記事の、「ループを使用したCSV取り込みの方法」と同じように、カンマで区切ってCSVを取り込むこともできちゃいます。

エクセルVBAでCSVデータをカンマで区切ってワークシートに取り込む方法
エクセルVBAでCSVを取り込む方法です。今回は、Splitという命令と配列を使ってCSVのレコードをカンマで区切ってワークシートに転記をしていく方法について解説をしていきます。

まとめ・次回予告

以上、クエリテーブルに取り込んだCSVを、Worksheetに出力する方法を紹介しました。

この段階ではプロパティの指定がありませんので、出力されたCSVはデータとして使えるものではありません。

次回はいよいよプロパティの紹介です。

CSV取り込みでよく使うプロパティを取り上げます。え、こんなカンタンなの?!と驚くようなプロパティがたくさんあります。

プロパティを使いこなすことができれば、QueryTableオブジェクトを使用したCSV取り込みは、取り込みだけでなくコーディングまで高速化できます。

どうぞお楽しみに!

連載目次:エクセルVBAのQueryTableで高速にCSVを取り込む

一般的なループを使用したCSV取り込みよりも、更に高速にCSVを取り込むことのできるQueryTableオブジェクトに関する連載です。サイズの大きなCSVを取り込む際に非常に便利です。
  1. エクセルVBAでQueryTableオブジェクトを使って高速にCSVを取り込む方法
  2. エクセルVBAのQueryTables.Addメソッドでクエリテーブルを作成する方法
  3. エクセルVBAのQueryTable.RefreshメソッドでCSVをシートに出力する方法

エクセルVBAでOutlookの受信メールフォルダとサブフォルダ名を書き出す方法

$
0
0
vba,outlook,getdefaultfolder,eyecatch

みなさまこんにちは、ノグチです。

前回から、エクセルVBAでOutlookのメールフォルダにアクセスして、最終的にフォルダ内のメール内容をワークシートに書き出すまでを、順を追ってご紹介しています。

前回の記事では、このメールフォルダを操作するための第一歩として、Namespaceオブジェクトのご紹介と、GetNamespaceメソッドでOutlookのデータフォルダにアクセスする方法をご紹介しました。

【エクセルVBA】GetNamespaceメソッドでOutlookのデータフォルダにアクセスする方法
GetNameSpaceメソッドでOutlookのデータフォルダにアクセスする方法をご紹介しています。このメソッドでOutlookのNameSpaceオブジェクトを取得すれば、メール、連絡先、予定表などのデータフォルダにアクセスして、更にその中のデータを読込んだり、エクセルシートに書き出したりすることができますよ。

今回は、GetNamespaceメソッドで取得したOutlookのデータフォルダのうち、Outlookの受信フォルダーと、そのサブフォルダーにアクセスして、フォルダ名を書き出す方法をご紹介していきます!

GetDefaultFolderメソッドでFolderオブジェクトを取得する

前回の記事で登場したNamespaceオブジェクトは、Outlookのデータフォルダにアクセスできるオブジェクトであるとご紹介しました。

ただこのNamespaceオブジェクトで取得できるデータフォルダには、メールだけでなく連絡先や予定表のデータフォルダも含まれています。

Outlookのデータフォルダから受信メールを取り出してワークシートに書き出すためには、まずはこのOutlookのデータフォルダ達の中から受信メールのデータフォルダにアクセスせねばなりません。

このOutlookのデータフォルダ達の中から目的のフォルダをFolderオブジェクトとして取得できるのが、NamespaceオブジェクトのGetDefaultFolderメソッドです。

GetDefaultFolderメソッドの記述方法

GetDdefaultFolderメソッドは、指定した種類(メール、予定表、連絡先など)の、既定のデータフォルダを操作するFolderオブジェクトを取得することができるメソッドです。

記述方法はコチラ。

Namespaceオブジェクト.GetDefaultFolder(既定のフォルダーの種類)

この引数に指定できるフォルダーの種類には、たとえばこんなものがあります。

指定値 内容
olFolderInbox 受信トレイフォルダー(メール)
olFolderOutbox 送信トレイフォルダー(メール)
olFolderCalendar 予定表フォルダー
olFolderContacts 連絡先フォルダー
olFolderTasks タスクフォルダー
今回は、受信トレイのフォルダーのFolderオブジェクトが欲しいので、引数にはolFolderInboxを指定します。

受信メールフォルダのFolderオブジェクトを生成するコード

では実際にOutlookの受信メールフォルダーと、そのサブフォルダーにアクセスしてフォルダ名を書き出してみましょう

例えば、Outlookの受信メールフォルダ構成がこうなっているとします。

outlook,フォルダー構成
 
GetDefaultFolderメソッドで、一番上の階層にある「受信トレイ」のFolderオブジェクトを取得するコードがコチラ。
Sub GetmailFolder()
Dim objOutlook As Outlook.Application
Dim myNamespace As Outlook.Namespace
Dim myInbox As Variant
Dim i As Long

Set objOutlook = New Outlook.Application
Set myNamespace = objOutlook.GetNamespace("MAPI")

Set myInbox = myNamespace.GetDefaultFolder(olFolderInbox)

Debug.Print myInbox

End Sub

まずはこのコードで、一番上の階層にある「受信トレイ」フォルダのFolderオブジェクトが取得できました。

サブフォルダーをFoldersプロパティで取得する

さて、上のコードでOutlookの受信トレイフォルダのFolderオブジェクトが取得できたので、お次はサブフォルダー達を取得します。

Folderオブジェクトのサブフォルダーは、Foldersプロパティで取得することができます。

Folderオブジェクト.Folders

受信メールフォルダーとサブフォルダーを書き出してみる

では、上のコードにFolderオブジェクト内のサブフォルダーの件数分だけ、サブフォルダ名を書き出す処理を加えてみると、こんなコードになります。

Sub GetmailFolder()
Dim objOutlook As Outlook.Application
Dim myNamespace As Outlook.Namespace
Dim myInbox As Variant
Dim i As Long

Set objOutlook = New Outlook.Application
Set myNamespace = objOutlook.GetNamespace("MAPI")

Set myInbox = myNamespace.GetDefaultFolder(olFolderInbox)

Debug.Print myInbox

For i = 1 To myInbox.Folders.Count
    Debug.print myInbox.Folders(i)
Next i

End Sub
そしてこれを実行してみると…
outlook,サブフォルダー取得
この通り、受信トレイフォルダとそのサブフォルダ名が書き出せていますね

最後に

今回は、GetDefaultFolderメソッドを使って、受信メールフォルダのFolderオブジェクトを取得して、受信メールフォルダとそのサブフォルダー名を書き出す方法をご紹介しました。

今回の記事で、Outlookの受信メールフォルダと、そのサブフォルダにアクセスすることができましたので、次回はいよいよ、メールフォルダ内のメールをワークシートに書き出す方法をご紹介していきます!

メールの内容をエクセルシートに書き出すことができれば、顧客から来た問い合わせや、アンケートの回答等を簡単に一覧化できますし、後で顧客にQA表として送ったり、回答の分析に使ったりすることができますよ!

それでは、最後までお読みいただきありがとうございました!

連載目次:エクセルVBAでOutlookを操作してみよう!

エクセルVBAでOutlookのメール作成、送信やタスク登録などの操作をする方法をご紹介しています。メーラーとして便利なOutlookですが、VBAと組み合わせて更に便利に使ってしまいましょう。

  1. 【エクセルVBA】エクセルVBAでOutlookを操作しよう!参照設定とOutlookアプリケーションオブジェクトの取得
  2. 【エクセルVBA】Outlookでメールを作成・送信する方法
  3. 【エクセルVBA】エクセルシートに一覧化された複数の連絡先に本文を変えつつOutlookでメールを一括送信する方法
  4. エクセルVBAでOutlookメールの下書きを作成・表示して送信前に内容チェックする
  5. エクセルVBAでOutlookの連絡先を登録する方法
  6. 【エクセルVBA】GetNamespaceメソッドでOutlookのデータフォルダにアクセスする方法
  7. エクセルVBAでOutlookの受信メールフォルダとサブフォルダ名を書き出す方法

Windowsのポチポチ操作を爆速化するPowerShellの絶対条件!ディレクトリとその移動をマスターしよう!

$
0
0

Windowsのポチポチ業務(マウスを使った業務)を爆速化するために、PowerShellを使った効率化の方法をお伝えしています。

前回の記事はこちらです。

Windowsのポチポチ業務を爆速化するPowerShell、キーボードを使わずササっと起動する方法
Windowsのマウス業務を爆速化するCUI=PowerShell。キーボードを使わずにササっと起動してHelloWorldをやってみましょう!

前回は、WindowsでPowerShellをキーボードを使わずにササっと起動する方法をご説明しました。

今回はPowerShellのようなCUI(コマンドユーザーインターフェース)を使う上で重要なカレントディレクトリ、親ディレクトリ・サブディレクトリルートディレクトリという考え方を説明します。

ディレクトリとは、Windowsでいうフォルダのことなのですが、2つの用語には微妙な違いもありますのでその辺りもご説明していきます。

CUIの基礎となっている考えなので、しっかり理解しておけば後の学習が楽になりますよ!

まずディレクトリについて理解し、最後にディレクトリの移動をマスターしていきます。

それではいってみましょう!

ディレクトリとは

「ディ、ディ、ディレクトリ?」と身構えることはありません。

ディレクトリとは、実は「フォルダ」のことです。

今後ディレクトリと出てきたら「なーんだフォルダのことかぁ」と思っていただればバッチリです。

ディレクトリとフォルダはほとんど同じなのですが、厳密にはフォルダはWindowsユーザーのためにディレクトリを仮想化して見やすくしたものディレクトリは実際にディスク上に作成された階層構造といった意味合いも持ちます。

CUIは直接ディレクトリを扱うため、今後はディレクトリに統一してお話を進めます。

はい、これでこの節は終わり…とはさすがにいきません(笑)

冒頭でご説明したように、カレントディレクトリ、親ディレクトリ・サブディレクトリ、ルートディレクトリの概念の理解が必要になりますので、順番に説明していきますね。

カレントディレクトリ

カレントは直訳すると現在という意味です。

カレントディレクトリ=現在のディレクトリということですね。

現在、操作対象になっているフォルダですよという意味です。

カレントディレクトリは普段のマウス操作でいうとエクスプローラで現在選択されているディレクトリのことと思ってください。

PowerShellの画面の左上を見てください。

「PS C:\Users\terad>」という1文があります。前回ご紹介したプロンプトですね。

(teradは筆者のユーザディレクトリです。)

この「C:\Users\terad」がカレントディレクトリとなります。

これはエクスプローラで

このように選択しているのと同じ状態と思ってください。

結局やっていることは同じですので、普段のマウス操作と比較すると理解しやすいですね。

ただしアドレスバーの表示が「Windows(C:) > ユーザー > ユーザー名 >」というようにPowerShellに表示されているカレントディレクトリ「C:\Users\terad」とは異なっています。

Windowsユーザーにわかりやすいようにカナ表記で表示されているだけで、アドレスバーを選択してやると…

このように正しいディレクトリ名が表示されます。

エクスプローラの表示と実際のディレクトリ名が違う場合があるので、注意してくださいね。

親ディレクトリ・サブディレクトリ

ディレクトリとはハードディスク上に作られた階層構造のことです。

階層構造というと何やら難しそうですが、皆さんも普段ディレクトリの中にディレクトリを作るということはよくやっていると思います。

階層構造とはこのような入れ子の構造のことです。

この例のディレクトリ名の通り、上位のディレクトリのことを親ディレクトリ下位のディレクトリのことをサブディレクトリと言います。

親ディレクトリに中には、複数のディレクトリを作ることができます。

サブディレクトリから見たら、親ディレクトリは必ず1つになります。

ルートディレクトリ

「C:\Users\terad」のうち「C:\」のことをルートディレクトリといい、最上位のディレクトリのことを指します。

ディレクトリ名のあとに「:」をつけますので注意してください。

このように階層構造は図でイメージするとわかりやすいですね。

さて、ディレクトリの基本的な考え方を理解したところでディレクトリの移動に入りましょう!

ディレクトリを移動する

ディレクトリを移動する方法には、サブディレクトリへ移動する方法と、親ディレクトリに移動する方法の2つがあります。

サブディレクトリへ移動する

サブディレクトリへ移動する方法は、実はカレントディレクトリを変更することにほかなりません。

カレントディレクトリを変更するにはSet-Locationというコマンドレットを使います

Set-Locationの後ろに、変更先のディレクトリのパスを指定するのですが、相対パスと絶対パスと2種類の指定方法があります。

相対パスで移動する

Set-Location <変更したいディレクトリのパス>

この変更したいディレクトリのパスには、カレントディレクトリより下の部分だけ書けばオッケーです。

これを相対パスで指定するといいます。

言葉だけではイメージがわきにくいので例を挙げますね。

「Get-Childitem」というコマンドレットを打ってエンターを押してください。

はい、このようにずらっとディレクトリが表示されました。

「Get-Childitem」はパスの指定なしで入力するとカレントディレクトリのサブディレクトリとファイルをすべて表示してくれるコマンドレットです。

では、赤字で囲った「Desktop」というサブディレクトリへ移動してみたいと思います。

相対パスで指定ですので、カレントディレクトリの「C:\Users\terad」は記載不要です。

Set-Location Desktop

とすればオッケーです。

コマンドを打ってエンターを押すと…

この通り、カレントディレクトリが「C:\Users\terad」から「C:\Users\terad\Desktop」に変更されました。

一気に深い階層のディレクトリへ移動する

一階層下ではなく、一気に深い階層のサブディレクトリへ移動することもできます

例を示しますね。

デスクトップ上に「Sample」というフォルダを用意してみました。

カレントディレクトリを最下層のサブディレクトリの一つ「sample01」に変更します。

Set-Location Desktop\sample\sample01

と、Desktop~sample01までを「\」でつないで指定します。

このようにディレクトリを「\」でつないだものをパスと言います。

このコマンドレットを実行すると…

このようにディレクトリをつなげたパスを指定することで、一気に深い階層まで移動することができます。

絶対パスで移動する

最上位である「C:\」(Cドライブ)を含めた頭からお尻までのパスをすべて入力しても、カレントディレクトリを変更することができます。

これを絶対パスで指定するといいます。

Set-Location <パス全て>

さきほどデスクトップに作った「sample > sample01」というサブディレクトリに、絶対パスで指定してこのディレクトリに移動してみます。

Set-Location C:\Users\terad\Desktop\sample\sample01

このコマンドレットを実行すると…

はい、カレントディレクトリが変更できました。

相対パスだけでなく、このように絶対パス=頭からお尻までのパス全ての入力もできることを覚えておきましょう。

親ディレクトリへ移動する

親ディレクトリへ移動するには、サブディレクトリの時と同様にSet-Locationを使うのですが、パスを入力する位置に「..」とドットを二つ並べます

Set-Location ..

このコマンドレットを実行すると…

はい、このようにカレントディレクトリが親ディレクトリに変更されました。

親ディレクトリは一つしかありません。

よって親ディレクトリに変更する場合は、パスやディレクトリの入力は必要ないんですね。

まとめ

いかがでしたか?

今回はCUIの基礎であるディレクトリとは何かディレクトリの移動方法についてご説明しました。

次回はコマンドレットを短く書くためのエイリアスという機能をご紹介します。

最後までお読みいただきありがとうございました!

連載目次:Windowsのポチポチ業務を爆速化するPowerShell

Windowsのポチポチ業務(マウスを使った業務)を爆速化するために、PowerShellを使った効率化の方法をお伝えしています。
  1. Windowsのポチポチ業務を爆速化するPowerShell、はじめのハードルぐーーんと下げてみます!
  2. Windowsのポチポチ業務を爆速化するPowerShell、キーボードを使わずササっと起動する方法
  3. Windowsのポチポチ操作を爆速化するPowerShellの絶対条件!ディレクトリとその移動をマスターしよう!

GASのためにVue.jsを学習し始めなのに参加してみた「Vue.js Tokyo v-meetup #8」

$
0
0

v-meetup-8-mercari

みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

「Vue.js Tokyo v-meetup #8」に参加してきました!

おそらくこのイベントに参加している人は、Webアプリケーション開発を生業にしている、フロントエンジニアの方がほとんどかと思いますが、私はちょっと違います。

ノンプログラマーがGASを使って社内向けなどのWebアプリケーションをなんとかいい感じに作りたい…そう思ったときに、おそらく強力な武器になるであろうということで、Vue.jsに目をつけております。

以下記事にも書いているとおりです。

GASとJavaScriptフレームワークVue.jsを使ってWebアプリを作成するための最初の一歩
Google Apps ScriptでWebアプリを作成するシリーズ。今回はGASとJavaScriptフレームワークVue.jsを使ってWebアプリを作成するための最初の一歩を進めて行きます。

さて、GASのためにVue.jsを学習し始めなのに参加してみたVue.js Tokyo v-meetupですが、レポートをお届けできればと思います。

では、行ってみましょう!

Vue.js Tokyo v-meetupとは

「Vue.js Tokyo v-meetup」Vue.js日本ユーザーグループ主催のミートアップイベントです。

Vue.js日本ユーザーグループは、Vue.jsの日本での普及やVue.jsへの貢献をするためのコミュニティで

を中心に、日本におけるVue.jsの普及を目指すコミュニティです。

v-meetupは、年間3~4回開催していて、今回は8回目。イベントページはコチラです。

Vue.js Tokyo v-meetup #8 (2018/08/28 19:30〜)
# 概要 Vue.js 日本ユーザーグループに主催による、8回目の MeetUp イベントを開催します!! 今回は、11/3 に開催予定している Vue Fes Japan についていろいろとお知らせします。 また、LTもありますので、何か、Vueについて話したいことがありましたら、ぜひLTしましょう! そして...

connpassの募集状況ですが、見てやってくださいよ。

Vue.js Tokyo v-meetup #8の応募状況

超人気ですよね…!

2018/08/20の12時に募集開始で、私は12時ちょうどにアクセスしてスタンバっていたのですが、ものの5分も経たずに埋まったという恐ろしい状況を目の当たりにしましたよ。

v-meetup、そしてVue.jsの人気をまざまざと思い知らされました。

セッションについて

今回のセッション内容は以下のラインナップです。

阿部寛さんのホームページの速度がとってもすごいこと!とか、Backbone.jsがどうやら辛いんだ…とか、そういうことは理解できたのです。

ただ私、Vue.jsについては初心者ゆえ、皆さんのセッションの理解できなかった度合いは8割…わかりやすく言うと、2割くらいしかわかりませんでした。

ブログを書く枠で応募したので、ちゃんとレポートしなくてはいけないというのは重々理解の承知の助なのですが、ごめんなさい。

なので、ちょっと今回はエモーショナルな内容でいきます。

Vue.jsの民主化を進めていきたい

前置きでお伝えしている通り、私はGASのためにVue.jsを学んでいます。おそらく、あの会場にいらした150名以上の中で、そのような目的の人は私だけなのではないかと思います。

3枠しかない貴重な「ブログを書く枠」をいただいてしまい、たいへん恐縮な気持ちでいっぱいです。

ただ、こう思っているのです。

「Vue.jsの民主化を進めていきたい」

私が本業にしているのは、VBAとかGASとかなどですが、これらの言語が成し遂げたことは、プログラマーとノンプログラマーの垣根を取り払ってくれているということなんですね。

決して低いハードルではないですが、プログラミングには習得することで仕事やキャリアに大きな変化を生み出すポテンシャルがあります。

OfficeやG Suiteを操作するという視点では、それらを身につければ大きな武器になります。

ただ、いざ「Web」となると、HTMLもCSSもそしてJavaScriptも、そしてサーバーサイドも…と学ぶべき対象も増えるし、環境構築なども必要で、一気に難易度が上がるので、そのハードルをなんとか下げる方法ないかな…と思っていました。

Vue.js+GASがノンプログラマーにWebへの道のりを作る

そこで、目をつけたのがGAS+Vue.jsという組み合わせです。

GASを使えるのであれば、サーバーサイドはGASでトライできます。データベースとしては十分ではないですが、簡易的であればスプレッドシートでなんとかなります。

HTML・CSSは最低限の習得は必要ですが、そこは頑張ってもらうとして…。

あと、クライアント側のJavaScript。ここは、これまでjQuery一択だったのですが、HTMLもCSSも勉強しながらの人から見ると、すぐとっちらかる…。なんか、とっちらかる…!

それで、目をつけたのがVue.jsなんですね。

Vue.jsは他のJSフレームワークよりも学習コストが低く、そしてGASでお馴染みのオブジェクトでデータを受け渡しできる。

GASとVue.jsはとても相性がいいのではないかと、ピンと来ました。

そして、その上手な使い方を広めることができれば、ノンプログラマーがWebの世界に一歩踏み出すための有効な選択肢を一つ、提供できるのではないかと。

事務の人が、Vue.jsとか使って社内ツールとかガツガツ使っているの…ちょっと、ワクワクしませんか?

初心者がVue.jsを学ぶ方法が増えてきた

さて、学習コストは低いとはいえ、今回のv-meetup…ありがたい洗礼を浴びました。

もっと学びを重ねないとですね。

だた、Vue.js 日本ユーザーグループの皆さんをはじめ、先人の方々の活動のおかげで、初心者やノンプログラマーがVue.jsを学ぶ門戸はどんどん開いています。

Vue.jsに関しては、私がお世話になっている勉強会グループ「超超初心者ワイワイVue.js勉強会」などの初心者向けの勉強会が多数存在しています。

IT勉強会グループ『仲間がいないと勉強できない!』
当勉強会グループは、 『酒がないとプログラム書けない!』 主催のJSフレームワーク(ライブラリ)勉強会の内容が、フロントエンド超初心者の管理者がついていけなくなっており、 そのためイチからじっくり勉強したいと思い発足しました。 『仲間がいないと勉強できない!』(元『人がいないと勉強できない!』)グループの特徴は『事前...

他にも、connpassなどで探せばいっぱい出てくると思います。

あと、その勉強会で題材にしている「基礎から学ぶ Vue.js」をはじめ、書籍も充実してきました。

あと、Vue.js日本ユーザー会運営のSlackワークスペースもあります。

Join vuejs-jp on Slack!

会場にいた皆さん、若かったですね。20代が多かったと思いますが、40代のおじさんも負けません。

v-meetupで話されている内容を、ちゃんと噛み砕いて、ノンプログラマーの皆さんに噛み砕いてお伝えできるくらいにはならないとなと思います。

まとめ

以上、「Vue.js Tokyo v-meetup #8」の参加レポートをお伝えしました!

WordPressもそうなんですけど、企業ではなくてユーザーコミュニティが主体で普及促進をしている技術って、すごく暖かいんですよね…Vue.jsのコミュニティもご多分にもれずそうでした。

それで、そのVue.jsのビッグイベント「Vue Fes Japan」が11/3に開催されますよ!

Vue.jsの開発者Evan Youさんをはじめ、ものすごいゲストが登壇されます。

参加されたい方は、ぜひ事前登録を…!9/10からチケット販売開始です。

Vue Fes Japan 2018 | 2018年11月3日(土)
日本で初めて開催する大規模 Vue.js カンファレンス。国内外の著名スピーカーによるセッションの他、ユーザー同士が気軽に話し合える場も設ける予定です。ぜひ、一緒に Vue.js を楽しみ、盛り上げていきましょう!

とうことで、これからもVue.js。応援していきたいと思います!

エクセルVBAのQueryTableオブジェクトのプロパティの基本とCSVをカンマ区切りする方法

$
0
0

CSV取り込みアイキャッチ
みなさん、こんにちは!
フジタニ(@libartweb)です。

エクセルVBAでCSVを高速に取り込むQueryTableオブジェクトの使い方についてシリーズでお伝えしております。

今回はいよいよQueryTableオブジェクトのプロパティを紹介します。

前回の記事はこちら

エクセルVBAのQueryTable.RefreshメソッドでCSVをシートに出力する方法
エクセルVBAのQueryTable.Refreshメソッドを使用して、クエリテーブルに取り込んだCSVをWorksheetに出力する方法を紹介します。高速にCSVを取り込む方法をシリーズでお伝えしています。

QueryTables.Addメソッドで作成したクエリテーブルをQueryTable.RefreshメソッドでWorksheetに出力するところまで紹介しました。

しかし以前までの記事だとプロパティ指定をしていなかったので、Worksheetに出力されたCSVはデータとして使える形式ではありませんでした。

今回はQueryTableオブジェクトのプロパティの基本をお伝えし、CSVをカンマで区切る方法を解説します。

様々なプロパティを操ることができれば、CSVを様々な形式で取り込むことが可能です!

CSV取り込みで使うQueryTableプロパティ一覧

今回のサンプルコードはこちら

Private Sub csvImport()

    Dim strPath As String
    Dim qtCsv   As QueryTable
    
    strPath = "C:\Users\hirom\Desktop\test.csv"
    Set qtCsv = Sheet1.QueryTables.Add(Connection:="TEXT;" & strPath, _
        Destination:=Sheet1.Range("A1")) '取り込むCSVファイルパスと、取り込み先のシート、セルを指定
    
    With qtCsv
        .TextFileCommaDelimiter = True 'カンマ区切りの指定
        .TextFileParseType = xlDelimited   ' 区切り文字の形式
        .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1) '項目(列)の型指定
        .TextFileStartRow = 1 '開始行の指定
        .TextFileTextQualifier = xlTextQualifierDoubleQuote '引用符の指定
        .TextFilePlatform = 932 '文字コードの指定
        .Refresh 'QueryTableオブジェクトを更新し、シート上に出力
        .Delete 'QueryTableオブジェクトを削除
    End With
End Sub

QueryTableオブジェクトにはたくさんのプロパティが存在します。CSV取り込みで主に使うプロパティは下記の通りです。

プロパティ名 内容 設定値の型
TextFileCommaDelimiter カンマ区切り Boolean(真偽値)
TextFileColumnDataTypes 項目の型 Variant(配列)
TextFileParseType 区切り文字の形式 XlTextParsingTypeクラスの定数
TextFileStartRow 取り込み開始行 long(数値)
TextFileTextQualifier 引用符 XlTextQualifierクラスの定数
TextFilePlatform 文字コード XlPlatformクラスの定数

では説明していきます!

QueryTableオブジェクトの各プロパティをエクセルの画面上で理解する

プロパティの取っつきにくさで理解が難しい!という方は、実際にエクセルの画面上から操作して、理解を深めましょう。

今回紹介するプロパティはエクセルの画面上からすべて設定可能です。

「テキストファイルウィザード」を開いてみましょう。

テキストファイル取り込み

データタブ→テキストファイル

から開くことが可能です。

QueryTableプロパティ1

QueryTableプロパティ2

QueryTableプロパティ3

まとめると以下の通りです。

プロパティ名 エクセルの画面上の表記
TextFileCommaDelimiter 区切り文字
TextFileColumnDataTypes 列のデータ形式
TextFileParseType 元のデータ形式
TextFileStartRow 取り込み開始行
TextFileTextQualifier 文字列の引用符
TextFilePlatform 元のファイル

QueryTableプロパティの指定方法

CSVをカンマ区切りで取り込む

CSVをカンマ区切りで取り込むには、以下のTextFileCommaDelimiterプロパティを使います。(前回の記事では、CSVをカンマ区切りで取り込めていませんでした。)

QueryTableオブジェクト.TextFileCommaDelimiter

既定値:Flase
カンマ区切りを指定します。TrueにすることでCSVをカンマ区切りで取り込むことができます。

TextFileCommaDelimiter = True

CSVをカンマ区切りで取り込む場合、最低限必要なのがこのTextFileCommaDelimiterプロパティの指定です。

実行結果

TextFileCommaDelimiterプロパティを指定しなかった場合(Falseの場合)

CSV取り込み結果

TextFileCommaDelimiterプロパティをTrueで指定した場合
TextFileCommaDelimiterプロパティの実行結果

カンマ区切りで取り込まれました!

TextFileCommaDelimiterプロパティは、必ず省略せずに指定しましょう。

ちなみに、ループを使用したCSV取り込みの方法だと以下のようにカンマ区切りを行います。

エクセルVBAでCSVデータをカンマで区切ってワークシートに取り込む方法
エクセルVBAでCSVを取り込む方法です。今回は、Splitという命令と配列を使ってCSVのレコードをカンマで区切ってワークシートに転記をしていく方法について解説をしていきます。

まとめ

以上、QueryTableオブジェクトでCSVをカンマ区切りで取り込むのに最低限覚えておくべきTextFileCommaDelimiterプロパティについて紹介しました。

実際のエクセルの画面上でもどの設定項目がどのプロパティを表しているのか?をイメージしていただけたと思います。

冒頭の表で紹介した、今回紹介していないプロパティは次回、紹介します。

文字列型で取り込んだり、文字コードを指定したり…

次回の記事で説明するプロパティを応用することで、さらに自在にCSVを操れるようになります!

どうぞお楽しみに!

連載目次:エクセルVBAのQueryTableで高速にCSVを取り込む

一般的なループを使用したCSV取り込みよりも、更に高速にCSVを取り込むことのできるQueryTableオブジェクトに関する連載です。サイズの大きなCSVを取り込む際に非常に便利です。
  1. エクセルVBAでQueryTableオブジェクトを使って高速にCSVを取り込む方法
  2. エクセルVBAのQueryTables.Addメソッドでクエリテーブルを作成する方法
  3. エクセルVBAのQueryTable.RefreshメソッドでCSVをシートに出力する方法

エクセルVBAでOutlookの受信メールをワークシートに書き出す方法

$
0
0

vba-outlook-outputmail

みなさまこんにちは、ノグチです。

前回は、Outlookの受信メールフォルダと、そのサブフォルダーにアクセスしてフォルダ名を書き出す方法をご紹介しました。

エクセルVBAでOutlookの受信メールフォルダとサブフォルダ名を書き出す方法
エクセルVBAでOutlookの受信メールフォルダにあるメールの内容を、エクセルのワークシートに書き出す方法を、数回の連載でご紹介しています。今回は、GetDefaultFolderメソッドとFoldersプロパティで、受信メールフォルダとサブフォルダの名称を書き出す方法のご紹介です。

今回はいよいよ、フォルダ内のメールの内容を、エクセルワークシートに書き出していく方法をご紹介します!

FolderオブジェクトのItemsプロパティでフォルダ内のメールを取得する

Itemsプロパティの記述方法

前回の記事で、GetDefaultFolderメソッドと引数olFolderInboxで、Outlookの受信メールフォルダーとそのサブフォルダーにアクセスすることができました。

今回の記事の目的である、フォルダの中のメールの内容を書き出すためには、フォルダ内のメールのデータにアクセスする必要がありますね。

そこで使うのが、GetDefaultFolderメソッドで取得したFolderオブジェクトの、Itemsプロパティ。

Itemsプロパティは、Outlookのデータフォルダ内にある、受信メールフォルダ内のメールデータをItemsオブジェクトとして取得できるメソッドです。

記述方法はコチラ。
Folderオブジェクト.Items(メールのインデックス番号)

MailItemオブジェクトのプロパティでメールの情報を取得

FoldersオブジェクトのItemsプロパティで取得できたItemsオブジェクトは、MailItemオブジェクトの形で取得できるので、MailItemオブジェクトのプロパティで、欲しい情報を取得していきます。

MailItemオブジェクトのプロパティは、下記記事でまとめていますのでそちらをご覧くださいね。

エクセルVBAでOutlookメールの下書きを作成・表示して送信前に内容チェックする
OutlookのMailItemオブジェクトのDisplayメソッドを使って、VBAで作成したOutlookのメール内容を、メール送信前にチェックする方法をご紹介しています。「VBAでメールを作成するのは便利だけど、内容をチェックしないでメール送信してしまうのは心配...」という方にお勧めです。

今回は、メールの送信日、件名、本文を取得してみましょう。

ここまでをコードにしてみると、こんな感じのコードになります。

Sub GetMailtest()
Dim objOutlook As Outlook.Application
Dim myNamespace As Outlook.Namespace
Dim myInbox As Folder

Set objOutlook = New Outlook.Application
Set myNamespace = objOutlook.GetNamespace("MAPI")
Set myInbox = myNamespace.GetDefaultFolder(olFolderInbox)

With ThisWorkbook.Worksheets("Sheet1")
    .Cells(2, 1).Value = myInbox.Items(1).SentOn
    .Cells(2, 2).Value = myInbox.Items(1).Subject
    .Cells(2, 3).Value = myInbox.Items(1).Body
End With

End Sub

特定のフォルダからメールを取り出す

Itemメソッドで特定フォルダのFolderオブジェクトを取得する

上のコードは、受信メールフォルダ全体を対象にメールを取り出していますが、FoldersオブジェクトのItemメソッドを使って特定のフォルダにあるメールだけを対象にすることもできます。

さっきからFoldersだったりFolderだったり、ItemsだったりItemだったりややこしいですね。

Itemメソッドはこんな感じで記述します。

Foldersオブジェクト.Item(フォルダ名)

引数のフォルダ名は、文字型で指定してくださいね。

特定のフォルダからメールを取り出してワークシートに書き出すコード

では、ItemsオブジェクトとFoldersオブジェクトのItemメソッドを使って、受信メールフォルダからメールを取り出してみましょう。

まず、このような書き出し用のワークシートを準備しました。

vba,outlook,書き出し,ワークシート

書き出し対象のサブフォルダがコチラ。

3件のメールがありますね。

outlook,vba,受信メールフォルダ
そしてコードがこちら。
Sub GetMail()
Dim objOutlook As Outlook.Application
Dim myNamespace As Outlook.Namespace
Dim myInbox, mySubfolder

Set objOutlook = New Outlook.Application
Set myNamespace = objOutlook.GetNamespace("MAPI")

Set myInbox = myNamespace.GetDefaultFolder(olFolderInbox)
Set mySubfolder = myInbox.Folders.Item("SubFolder1")

Dim i As Long

For i = 1 To mySubfolder.Items.Count
    With ThisWorkbook.Worksheets("Sheet1")
        .Cells(i + 1, 1).Value = mySubfolder.Items(i).SentOn
        .Cells(i + 1, 2).Value = mySubfolder.Items(i).Subject
        .Cells(i + 1, 3).Value = mySubfolder.Items(i).Body
    End With
Next i
End Sub

受信メールフォルダのサブフォルダ「SubFolder1」を10行目のItemメソッドで取得して、

For ~ Nextのループ分の中でitemsオブジェクトの中身を、フォルダ内にあるメールの件数分だけ取り出して、ワークシートに書き込む…というコードです。

実行結果

このコードを実行してみると…

この通り、SubFolder1フォルダ内のメールがワークシートに書き出されていますね

vba,Outlook,ワークシート書き出し

最後に

今回は、受信メールフォルダのサブフォルダ内にあるメールの内容を、ワークシートに書き出す方法をご紹介しました。

例えば、あるプロジェクトやイベントの出欠連絡などのメールの内容をワークシートに纏めないといけない!といった時にとっても便利ですよ。

それでは、最後までお読みいただきありがとうございました!

連載目次:エクセルVBAでOutlookを操作してみよう!

エクセルVBAでOutlookのメール作成、送信やタスク登録などの操作をする方法をご紹介しています。メーラーとして便利なOutlookですが、VBAと組み合わせて更に便利に使ってしまいましょう。

  1. 【エクセルVBA】エクセルVBAでOutlookを操作しよう!参照設定とOutlookアプリケーションオブジェクトの取得
  2. 【エクセルVBA】Outlookでメールを作成・送信する方法
  3. 【エクセルVBA】エクセルシートに一覧化された複数の連絡先に本文を変えつつOutlookでメールを一括送信する方法
  4. エクセルVBAでOutlookメールの下書きを作成・表示して送信前に内容チェックする
  5. エクセルVBAでOutlookの連絡先を登録する方法
  6. 【エクセルVBA】GetNamespaceメソッドでOutlookのデータフォルダにアクセスする方法
  7. エクセルVBAでOutlookの受信メールフォルダとサブフォルダ名を書き出す方法
  8. エクセルVBAでOutlookの受信メールをワークシートに書き出す方法

GASでGmailの受信トレイに溜まった指定の日付以前のスレッドを自動でアーカイブする方法

$
0
0
inbox

photo credit: Theen … Junk Mail via photopin (license)

みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

Gmail使っていますか!?

まさか…受信トレイ、大量にメッセージ溜まっていませんか?

まさかまさか、何十件も、何百件も…、ましては何千件も溜まっていやしませんよね?

私はメールアプリ「Inbox」を使い、受信トレイをある意味、メール関連のタスク管理ツールとして使っています。

Mailbox対Inbox徹底比較!iPhoneメール神アプリ対決を制するのは!?
次世代版Gmailとも言われるInboxが一般公開。そのUIや使い勝手にはMailboxを強く意識したもので、どちらを使おうか悩まれている方も多いはず!本記事は二つのiPhone神メールアプリを徹底比較します。

受信トレイにメールが溜まっているのは…イコール、仕事が溜まっているということ…そんなの耐えられない!ってなわけです。

とはいえ、大量にメールが届いてしまうのは、相手次第…。

ほとんど見ないし、アーカイブが面倒。

そんなときは、GASを使ってさくっと自動アーカイブしちゃいましょう。

ということで今回は、Google Apps ScriptでGmailの受信トレイに溜まった指定の日付以前のスレッドを自動でアーカイブする方法をお伝えします。

Gmailの検索で一定日数以上過去のメールを絞り込む

GASで仕込む前に、Gmailの検索機能での「一定日数以上過去のスレッド」の絞り込み方を確認しておきましょう。

というのも、このGmailでの検索機能での絞り込みの「クエリ」がそのまま、GASでも使えるのです。

今回は、受信トレイに入っているスレッドで、かつ3日前(執筆日時が2018/8/30なので2018/8/27)以前のスレッドという条件にします。

これをGmailで検索するときは

  • 受信トレイに入っている→in:inbox
  • 2018/8/27以前→before:2018/8/27

という検索演算子を使って以下のようなクエリで検索すればOKですよね。

in:inbox before:2018/8/27

私のGmailで検索した結果がコチラでした。

Gmailで受信トレイの一定日数以前のスレッドを検索

その他、Gmailで使える検索演算子については以下をご参考くださいね。

Gmail で使用できる検索演算子 - Gmail ヘルプ
検索演算子と呼ばれる単語や記号を使用して、Gmail の検索結果を絞り込むことができます。また、複数の演算子を組み合わせて検索結果をさらに絞

GASでGmailのスレッド検索を行う

Google Apps Scriptでは、ここで行ったものと同様のGmailでのスレッド検索を行うことができます。

Gmailのスレッドの検索をするには、GmailAppオブジェクトのsearchメソッドを使います。

GmailApp.search(クエリ)

クエリには、先程のGmail検索と同様のものを文字列で指定すればOKです。

これで、クエリの条件でヒットしたスレッドを配列で取得することができます。

スレッドの配列をまとめてアーカイブする

さて、こうして取得できたのは「スレッドの配列」です。

そこから配列についてループ回して、一つ一つアーカイブ…そんな処理を想定される方もいるかも知れませんが、もっとシンプルです。

というのも、「スレッドの配列」をそのままそっくりアーカイブする、素敵なメソッドが用意されています。

GmailAppオブジェクトmoveThreadsToArchiveメソッドです。

GmailApp.moveThreadsToArchive(スレッドの配列)

searchメソッドで取得したスレッドの配列をそのままこのメソッドの引数に渡せば良いのです…簡単ですね!

一定の日付より前のスレッドをアーカイブするスクリプト

以上を踏まえて作成したスクリプトがコチラです。

function archiveThreads() {
  var searchQuery = 'in:inbox before:2018/8/27';
  var threads = GmailApp.search(searchQuery);
  GmailApp.moveThreadsToArchive(threads);
}

特に説明は不要ですね。

実行をした上でGmailを確認すると、以下のように先ほどのスレッドたちは全てアーカイブされます。

指定の日付以前のスレッドがアーカイブされた

なお、searchメソッドによるスレッドの取得数には1回あたり500件という制限がありますので、大量にヒットしてしまいそうなときは注意が必要です。

数千件もあるような方は、何回か実行する必要がありますよ。

まとめ

以上、GASでGmailの一定の日付以前のスレッドをアーカイブするスクリプトを紹介しました。

超シンプルですよね。

ただ、皆さんが言いたいことはわかっています。

日付が固定じゃないか!ということですね。

次回、「今日から3日前より以前のスレッド」を自動でアーカイブできるように、修正を加えていきますよ。

GASでGmailの受信トレイに溜まった今日から指定の日数以前のスレッドをアーカイブする方法
Google Apps Scriptで溜まったGmailのメッセージを自動アーカイブする方法をお伝えしています。今回はGASでGmailの受信トレイに溜まった今日から指定の日数以前のスレッドをアーカイブする方法です。

どうぞお楽しみに!

連載目次:GAS初心者にオススメ!簡単Gmailツールの作り方

Google Apps ScriptではGmailの操作をとても簡単に行うことができます。このシリーズでは、GAS初心者でもすぐに作れる、簡単便利なツールをいくつか紹介していきます。
  1. GASでGmailを操作して日々の日報メールの下書きを自動で作成する
  2. GASでGmailの受信トレイに溜まった指定の日付以前のスレッドを自動でアーカイブする方法
  3. GASでGmailの受信トレイに溜まった今日から指定の日数以前のスレッドをアーカイブする方法

GASでGmailの受信トレイに溜まった今日から指定の日数以前のスレッドをアーカイブする方法

$
0
0
inboxes

photo credit: SKR_RGR mails via photopin (license)

みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

Gmail使ってますよね!?

まさかまさか…受信トレイ、何十件も、何百件もメッセージ溜まっていませんよね?

ということで、Google Apps Scriptで溜まったGmailのメッセージを問答無用で自動アーカイブする方法をお伝えしています。

前回の記事はこちら。

GASでGmailの受信トレイに溜まった指定の日付以前のスレッドを自動でアーカイブする方法
Gmailの受信トレイにメール…溜まっていませんか?そんなときは、GASを使って自動アーカイブしちゃいましょう。今回は、GASでGmailの受信トレイの指定日付以前のスレッドをアーカイブする方法をお伝えします。

指定した日時以前のスレッドをアーカイブするスクリプトを紹介しました。

ただ…日付が固定だったんですよね。

できれば「今日から3日前以前のスレッドは全部アーカイブ!」とかにしたいですよね。

ということで、今回はGASでGmailの受信トレイに溜まった今日から指定の日数以前のスレッドをアーカイブする方法をお伝えしますね。

では、行ってみましょう!

前回のおさらい

前回作成したスクリプトをベースに解説を進めていきますね。

コチラです。

function archiveThreads() {
  var searchQuery = 'in:inbox before:2018/8/27';
  var threads = GmailApp.search(searchQuery);
  GmailApp.moveThreadsToArchive(threads);
}

2行目で設定したsearchQueryを使って、3行目でGmailのスレッドを検索します。検索した結果は「スレッドの配列」として取得できます。

その「スレッドの配列」をそのまんま引数にできる便利メソッドがmoveThreadsToArchiveメソッドで、それらのスレッドをアーカイブしてくれるというものです。

ただ、冒頭でお伝えした通り、固定の日付しか指定できないので、その部分を修正していきます。

何日前のDateオブジェクトを取得する

前述のスクリプトでいうと、変数searchQueryに与える文字列の日付部分を、「今日の日付の3日前の日付」にしてあげる必要がありますね。

日付を表すオブジェクトはDateオブジェクトですから、まずは今日の3日前の日付を求める方法を考えましょう。

Dateオブジェクトの「日」を取得するgetDateメソッドと、「日」を設定するsetDateメソッドを組み合わせますよ。

Dateオブジェクト.getDate()

getDateメソッドは「日」を数値で取得します。

Dateオブジェクト.setDate(日)

setDateメソッドの引数は数値で与えます。

これらをどう使うかというと、元となるDateオブジェクトの「日」をgetDateメソッドで取得して、その数値から3を引き算して、その結果をsetDateしてあげればよいのです。

つまり、こういうことです。

var date = new Date();
date.setDate(date.getDate() - 3);

引き算して日数が0やマイナスになる場合

でも、9/1とか9/3とかだったら、日数の引き算したら0とかマイナスになっちゃうんですけど、どうなっちゃうんでしょう?

でも大丈夫。

var date = new Date('2018/9/1');
date.setDate(date.getDate() - 3);
Logger.log(date); //Wed Aug 29 00:00:00 GMT+09:00 2018
  
date = new Date('2018/9/3');
date.setDate(date.getDate() - 3);
Logger.log(date); //Fri Aug 31 00:00:00 GMT+09:00 2018

このように、ちゃんと正しく、前月の日付になってくれています。

日付の書式を整えて文字列にする

これで、「3日前の日付」のDateオブジェクトを求めることができましたので、あとはこれを用いて、変数searchQueryを構成できれば良いですね。

ただ、Dateオブジェクトをそのまま指定すると、searchQueryは以下のような形式になってしまいます。

in:inbox before:Tue Aug 28 2018 20:34:56 GMT+0900 (JST)

残念ながら、この形式ではうまく検索ができませんので「yyyy/M/d」のフォーマットの文字列に変更する必要がありますね。

そのようなときのために、GASではUtilitiesサービスの中に、formatDateというメソッドを用意してくれています。

Dateオブジェクトを指定のフォーマットで文字列に変換します。

Utilities.formatDate(日付, タイムゾーン, フォーマット)
  • 日付: Dateオブジェクト
  • タイムゾーン: 日本なら「’JST’」
  • フォーマット: 「y」「M」「d」を使った書式

フォーマットはアルファベットとその数で書式を表します。例えば以下のようなものです。

  • ‘yyyy-MM-dd’ とすれば 「2018-08-01」
  • ‘yyyy年M月d日’ とすれば 「2018年8月1日」

ですから、今回は「’yyyy/M/d’」と指定すれば良いでしょう。

今日から3日以前のスレッドをアーカイブするスクリプト

以上を踏まえて、今日から3日前のスレッドをアーカイブするスクリプトを作りました。

こちらです。

function archiveThreads() {
  var date = new Date();
  date.setDate(date.getDate() - 3);
  var searchQuery = 'in:inbox before:' + Utilities.formatDate(date, 'JST', 'yyyy/M/d');
  var threads = GmailApp.search(searchQuery);
  GmailApp.moveThreadsToArchive(threads);
}

簡単ですね。

Gmail演算子older_than、newer_thanを使う方法

実は、Gmailの検索演算子便利なものがありました。

「older_than:」「newer_than:」という演算子を使えば、日(d)、月(m)、年(y)で期間を指定して、それより古いメールか新しいメールを検索することができるのです。

つまり、こういうことですね。

function archiveThreads() {
  var searchQuery = 'is:starred older_than:3d';
  var threads = GmailApp.search(searchQuery);
  GmailApp.moveThreadsToArchive(threads);
}

…こっちのほうが断然簡単ですね。

Gmailのsearchメソッドを使う場合は、Gmailの検索演算子をちゃんと研究しなきゃですね!

Gmail で使用できる検索演算子 - Gmail ヘルプ
検索演算子と呼ばれる単語や記号を使用して、Gmail の検索結果を絞り込むことができます。また、複数の演算子を組み合わせて検索結果をさらに絞

まとめ

以上、GASでGmailの受信トレイに溜まった今日から指定の日数以前のスレッドをアーカイブする方法をお伝えしました。

時限式のトリガーを毎日で仕込んでおけば、放置されている過去のスレッドが勝手にアーカイブされていきます。

これで、溜まりに溜まった受信トレイともおさらばですね!

ちなみに、searchメソッドは1回500スレッドまでしか取得できませんので、それ以上溜まっている場合は何度か実行する必要があると思います。

もし、うっかり大事なメッセージがアーカイブされても、ちゃんと取り戻せますから安心してアーカイブしちゃってくださいませ!

連載目次:GAS初心者にオススメ!簡単Gmailツールの作り方

Google Apps ScriptではGmailの操作をとても簡単に行うことができます。このシリーズでは、GAS初心者でもすぐに作れる、簡単便利なツールをいくつか紹介していきます。
  1. GASでGmailを操作して日々の日報メールの下書きを自動で作成する
  2. GASでGmailの受信トレイに溜まった指定の日付以前のスレッドを自動でアーカイブする方法
  3. GASでGmailの受信トレイに溜まった今日から指定の日数以前のスレッドをアーカイブする方法

初心者向けPowerPoint VBAを始める際にはじめにやっておくべきセッティングと手順

$
0
0
start-line

photo credit: findingtheobvious Go. via photopin (license)

みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

さあ、PowerPoint VBAのシリーズがはじまりました。

VBAというと「Excel」というイメージが強いかも知れませんが、PowerPointでもVBAを使ってマクロを作成することができます。

日々、スライドを作りまくっているビジネスマンもいらっしゃいますでしょ…?

私もそうです(毎月数百ページくらいは作ってます…^^;)。

実は使いどころがいっぱいあるのですが、しかしながらPowerPoint VBAの情報は書籍もネットでも少なめ…。

ということで、このシリーズでは、初心者でもVBAによるマクロの作り方の基礎を学んで、PowerPointを操作するちょっとした便利なツールを作れるようになることを目標に進めていきますよ。

今回はその準備編ということで、PowerPoint VBAを始める際にはじめにやっておくべきセッティングと手順についてお伝えします。

では、行ってみましょう!

PowerPointのリボンに開発タブを追加する

まず、PowerPointを立ち上げたらリボンに開発タブを追加しましょう。

「ファイル」のメニューから「オプション」をクリックします。

PowerPointnのファイルオプション

すると「PowerPointのオプション」ダイアログが開きますので、左側のメニューから「リボンのユーザー設定」を選択します。

右側の「リボンのユーザー設定」のエリアに、リボンメニューらしきものがズラリと並んでいますので、「開発」を見つけてください。

おそらくデフォルトでは「開発」にはチェックが入っていませんので、チェックを入れて「OK」をします。

PowerPointのオプションダイアログで開発タブをチェック

これでPowerPointのリボンに「開発」タブが追加されました。

Visual Basic Editor(VBE)を開く

続いて、VBAを編集したり動作確認をしたりする開発環境であるVisual Basic Editor(VBE)を開きましょう。

先ほど追加した「開発」タブから「Visual Basic」のアイコンをクリックします。

PowerPointのリボンの開発タブからVisual Basicをクリック

すると、以下のようなウィンドウが開きます。これがVBEです。

Visual Basic Editor

PowerPointからVBEを開く場合は、ショートカットキー Alt + F11 のほうが便利ですので、ぜひ覚えておいてください。

VBEのオプションを設定する

次に、VBEの各種オプションの設定を確認していきます。

VBEのメニューから「ツール」→「オプション」とたどります。

VBEのツールからオプションを開く

すると、「オプション」ダイアログが開きます。

「編集」タブがアクティブになっていると思いますので、以下のように設定を変更して「OK」しましょう。

  • 自動構文チェック:オフにする
  • 変数の宣言を矯正する:オンにする

VBEのオプションダイアログ

このあたりの設定について、Excel VBAと同様なので詳しくは以下記事をごらんください。

【エクセルVBA】初心者にオススメのVBEの7つのコード設定とその機能について
エクセルVBAの業務を快適にするためのVBEの使い方やテクニックについてお伝えしています。今回は、設定して使いこなすだけで劇的に快適になる初心者にオススメのVBEのオプションコード設定についてです。

標準モジュールを挿入してコードウィンドウを開く

実際にVBAのコードを入力するのは「標準モジュール」という場所に、「コードウィンドウ」というウィンドウ上で行います。

デフォルトでは標準モジュールが存在していませんので、標準モジュールを挿入していきます。

VBEのメニューから「挿入」→「標準モジュール」と選択します。

VBEで標準モジュールを挿入する

なお、標準モジュールの追加は、アクセスキー AltIM でも行えます。頻繁に使用するので覚えておくと便利です。

標準モジュールを挿入すると、以下のように標準モジュールがコードウィンドウに展開されます。このコードウィンドウに、VBAのコードを入力していきます。

VBEのコードウィンドウ

ちなみに、コードウィンドウはデフォルトで白い画面ですが、私の環境では背景色や文字色の設定をカスタマイズしているので、黒になっています。

見やすい画面にしておくと良いので、必要に応じて以下記事をご覧になりながら設定をしてみてください。

【エクセルVBA】VBEの背景色や文字色を変更して画面を見やすくしよう
エクセルVBAの作業効率&快適さを劇的に上げるVBEの使い方についてお伝えしていますが、今回はVBEの背景色や文字色を変更して画面を見やすくするシンタックスハイライトの設定方法とおすすめ設定についてです。

イミディエイトウィンドウを表示する

コードウィンドウとともに、VBAの開発の際に重要なイミディエイトウィンドウを表示しておきます。

イミディエイトウィンドウでは、動作確認用のログを出力して確認をしたり、コマンドを入力して操作をしたりすることができます。

VBEのツールメニューの「表示」から「イミディエイトウィンドウ」を選択します。

VBEでイミディエイトウィンドウを表示する

以下のようにイミディエイトウィンドウが開きました。

VBEのイミディエイトウィンドウ

なお、コードウィンドウへのカーソル移動は F7 、イミディエイトウィンドウへのカーソル移動は Ctrl + G で行えます。使いこなすと快適です。

PowerPointマクロの保存

これでセッティングは完了です。

最後にPowerPointマクロの保存の仕方についてお伝えします。
PowerPointマクロは、PowerPointプレゼンテーションファイルに紐付いた形で保存されます。

したがって、PowerPoint側からでも、VBE側からでも、 Ctrl + S で保存することができます。

その際、ファイル形式を「PowerPointマクロ有効プレゼンテーション(*.pptm)」にする必要があります。

PowerPointマクロの保存形式はpptm

通常のプレゼンテーションファイル(*.pptx)に保存しようとすると、以下のようにアラートが表示されます。

PowerPointマクロ保存時のアラートダイアログ

「pptmにこまめに保存」。これが大事です。

まとめ

以上、PowerPointマクロを始める際のセッティングと準備についてお伝えしました。

  1. PowerPointのリボンに開発タブを追加する
  2. Visual Basic Editor(VBE)を開く
  3. VBEのオプションを設定する
  4. 標準モジュールを挿入してコードウィンドウを開く
  5. イミディエイトウィンドウを表示する
  6. PowerPointマクロの保存

では、次回以降、実際にマクロを作成してPowerPointを操作していきたいと思います。

どうぞお楽しみに!

【初心者向け】はじめてのPowerPoint VBAを作成して実行してみよう

$
0
0
begin

photo credit: DocChewbacca My life began at this moment via photopin (license)

みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

初心者向けPowerPoint VBA入門をシリーズでお伝えしています。

前回の記事はコチラです。

初心者向けPowerPoint VBAを始める際にはじめにやっておくべきセッティングと手順
初心者でもVBAの作り方の基礎を学んで、PowerPointを操作するちょっとした便利なツールを目指すシリーズです。今回はその準備編、PowerPoint VBAを始める際にのセッティングと手順についてです。

これでPowerPoint VBAをはじめる準備は完了しましたので、今回は実際にはじめてのPowerPoint VBAを作って実行してみましょう!

今回紹介するプログラムは、実際には特に意味はないプログラムですが…サッと進めちゃいます。

では、行ってみましょう!

はじめてのPowerPoint VBA

まず、最初にとっても簡単なPowerPoint VBAによるプロシージャの作成と実行をして、一連の流れを確認しておきましょう。

まず、新規のプレゼンテーションを作成して、VBEを開き、標準モジュールを追加しておきましょう。

詳細は前回の記事をご覧ください。

初心者向けPowerPoint VBAを始める際にはじめにやっておくべきセッティングと手順
初心者でもVBAの作り方の基礎を学んで、PowerPointを操作するちょっとした便利なツールを目指すシリーズです。今回はその準備編、PowerPoint VBAを始める際にのセッティングと手順についてです。

コードウィンドウの入力と実行

準備ができたら、コードウィンドウに以下のように入力して実行してみましょう。

Sub debugPrintTest()

Debug.Print "Hello PowerPointVBA!"

End Sub

入力できたら、書いたコードのいずれかの行にカーソルを置いた状態で、以下「実行」アイコンをクリックします。またはショートカットキー F5 でもOKです。

Subプロシージャの実行

すると、イミディエイトウィンドウに以下のように「Hello PowerPointVBA!」と出力されます。

イミディエイトウィンドウに出力

これで、はじめてのPowerPoint VBAの実行ができました!

どのマクロを実行するか

なお、カーソルをコードの上に「置かずに」実行をすると、以下のように「マクロ」ダイアログが開いて、どのマクロを実行するか選択をするように促されます。

マクロダイアログ

標準モジュールにはいくつものマクロを記述することができますので、どのマクロを実行するかを指定する必要があるのです。

VBEでは「カーソルが上にあるマクロを実行する」ような仕様になっています。

Subプロシージャとは

VBAでは、プログラムをプロシージャという単位で作成、実行します。

プロシージャにはいくつかの種類がありますが、今回作成したのはSubプロシージャという種類のプロシージャです。

処理をまとめて実行させたいだけであれば、基本的にはSubプロシージャを使います。

書式は以下のとおりです。

Sub プロシージャ名()
 ’処理
End Sub

「’処理」の箇所に、何行かの処理を記述します。Subプロシージャを実行すると、その「’処理」を上から順に実行し、「End Sub」が来ると実行を終了します。

プロシージャ名は日本語でもアルファベットでも自由に決められますので、その処理を表すわかりやすい名称にしておくと良いです。ただし、記号は全角・半角ともに使用することができません。

なお、Subプロシージャを作る際には、「sub プロシージャ名」と入力した時点で Enter キーを押すと、自動で以下のような補完が機能します。

  • 「sub」が「Sub」と頭文字が大文字になる
  • 丸括弧「()」が付与される
  • 「End Sub」が付与される

これ以外にもVBEの補完機能は便利なものが多いので、ぜひ使いこなしましょう。

イミディエイトウィンドウに出力する

Debug.Printは指定した値をイミディエイトウィンドウに出力する命令です。

書式は以下のとおりです。

Debug.Print

この命令はとくにPowerPointの何かを操作するわけではありません。

では、いつ使うかというと、マクロの動作確認をするときに使います。

今後、たいへんお世話になるはずです。

【エクセルVBA】初心者のうちから知っておくべきDebug.Printの使い方
今回はエクセルVBAでイミディエイトウィンドウを使う方法の超基本として、初心者のうちからぜひとも知っておいて欲しいDebug.Printの使い方です。一行に複数の出力をする方法も解説していますよ。

文字列の表記とリテラル

「Hello PowerPointVBA!」が、ダブルクォーテーションマークで囲まれていましたね。

VBAでコードの中に文字列を表記するときには、ダブルクォーテーションマークで囲うといルール**があります。

この書き方のルールを「リテラル」と言います。

つまり、文字列をダブルクォーテーションを囲むというのが、VBAの文字列リテラルです。

では、文字列ではなくて、数値ならどうか?

その場合は、以下のようにすればOKです。

Sub debugPrintTest()

Debug.Print 123

End Sub

特に何もせずにそのまま記述してOKです。

つまり、そのまま何もせずに記述するのが、VBAの数値リテラルということになります。

まとめ

以上、はじめてのPowerPoint VBAの作成と実行についてお伝えしました。

  • Subプロシージャとその作り方、実行の仕方
  • Debug.Print文とその役割
  • 文字列の表記とリテラル

いずれも基本中の基本ですが、大事なポイントになります。

次回は、PowerPoint VBAを使用する上で重要な概念である「オブジェクト」に触れていきたいと思います。

どうぞお楽しみに!

Viewing all 2073 articles
Browse latest View live


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>