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

【意図を明確に】Google Apps ScriptのsetOptionメソッドでグラフタイトル・凡例を編集する方法

$
0
0

みなさん、こんにちは!
タダケン(@tadaken3)です。

さて、今回も、Googleスプレッドシートでの集計・分析作業の効率を上げるための、Google Apps Scriptのテクニックを紹介します。

前回は、Google Apps Scripで積み上げグラフを作成するテクニックをご紹介しました。

【複数の要素もひと目で分かる】Google Apps Scriptで積み上げ棒グラフを作成する方法
Google Apps Scriptを使って、複数の系列を持ったグラフを作成する方法を解説します。setStackedメソッドを使い、積み上げ縦棒グラフを作成し、データの可視化を行います。

前回までで、おおよその必要なグラフを作成することができるようになったので、今回からは、グラフの見た目をきれいにするテクニックを紹介します。グラフのタイトルや凡例を整えることで、グラフの意図を正しく表現することができます。

前回のおさらい

前回同様に、sheet1のA1〜C6セルの中に、京都、大阪、神戸の3エリアで、イカとタコの販売数のデータを例として説明します。

まず、前回のコードは、簡単におさらいしましょう。

function createChart() {
  var mySheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("sheet1");
  var range = mySheet.getRange("A1:C6");
  var chart = mySheet.newChart()
              .setPosition(2,4,0,0)
              .addRange(range)
              .asColumnChart() //棒グラフを指定する
              .setStacked() //積み上げグラフにする
              .build();
  mySheet.insertChart(chart);
}

前回はasColumnChartメソッドで、棒グラフを指定して、setStacedメソッドで積み上げグラフにするテクニックを紹介しました。ここから、見た目に手を加えていきます。

setOptionメソッドでオプションを設定する

グラフの見た目を変更するにあたって、タイトルや凡例、X軸、Y軸などさまざまなオプションがあります。これらの見た目を変更するにはsetOptionメソッドを使います。

書き方は

chartオブジェクト.setOption(オプション名, 値);

です。

setOptionメソッドは様々はオプションを設定することができるのですが、今回は「グラフタイトル」「凡例」の設定するテクニックをご紹介します。

グラフタイトルを設定する

グラフタイトルを設定するには、オプションにtitleを設定します。
今回は、グラフ名は「地域別販売数」とすることにしましょう。

実際のコードは以下のとおりです。

function createChart() {
  var mySheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("sheet1");
  var range = mySheet.getRange("A1:C6");
  var chart = mySheet.newChart()
              .addRange(range)
              .setPosition(1,5,0,0)
              .asColumnChart() 
              .setStacked(
              .setOption('title', '地域別販売数')//setOptionにタイトルを指定します 
              .build();  
              mySheet.insertChart(chart);
}

これで、グラフタイトルが設定されました。

タイトルのフォントの色・サイズを変更する

次にグラフタイトルの色とフォントサイズを変更してみましょう。
今度はオプションにtitleTextStyleを設定します。
色とフォントサイズは連想配列で値を渡します。

書き方は

chartオブジェクト.setOption(‘titleTextStyle’,{color: 色, fontSize: フォントサイズ});

です。

実際のコードは以下のとおりです。

function createChart() {
  var mySheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("sheet1");
  var range = mySheet.getRange("A1:C6");
  var chart = mySheet.newChart()
              .addRange(range)
              .setPosition(1,5,0,0)
              .asColumnChart() 
              .setStacked(
              .setOption('title', '地域別販売数')
              .setOption('titleTextStyle' ,{color: 'Green', fontSize: 20})
              .build();  
              mySheet.insertChart(chart);
}

今回は「Green」で設定していますが、「#FFFFFF」のように、カラーコードで指定することもできます

凡例を位置、色を指定する

今度は、凡例を変更してみましょう。
凡例を変更するには、オプションにlegendを設定します。
凡例の位置、フォントの色やサイズを指定するには、先程同様に連想配列で値を渡します。

書き方は

chartオブジェクト.setOption(‘legend’, {position: 位置, textStyle: {color: 色, fontSize: フォントサイズ}});

です。

入れ子になっている点に気をつけてください。

実際のコードは以下のとおりです。

function createChart() {
  var mySheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("sheet1");
  var range = mySheet.getRange("A1:C6");
  var chart = mySheet.newChart()
              .addRange(range)
              .setPosition(1,5,0,0)
              .asColumnChart() 
              .setStacked(
              .setOption('title', '地域別販売数')
              .setOption('titleTextStyle' ,{color: 'Green', fontSize: 20})
              .setOption('legend', {position: 'top', textStyle: {color: 'blue', fontSize: 16}})//凡例の設定
              .build();  
              mySheet.insertChart(chart);
}

凡例を編集できましたね。

positionでは、位置を以下のように指定します。

  • 上:top
  • 下:bottom
  • 右:right
  • 左:left

まとめ

これで、グラフタイトルと凡例を設定することができました。最後に、今回ご紹介したテクニックをまとめてみました。

設定項目 オプション キー 設定内容
グラフタイトル title
タイトルのテキストスタイル titleTextStyle color
タイトルのテキストスタイル titleTextStyle fontSize フォントサイズ
凡例 legend position 凡例の位置
凡例 legend color フォントの色
凡例 legend fontSize フォントサイズ

グラフの見た目を整えることで、グラフで伝えたい事を明確にできます。今回ご紹介したsetOptionメソッドを使えば、他にもX軸やY軸の書式なども設定することができます。

次回も、グラフについてのテクニックを、お伝えしてきますね。

どうぞ、お楽しみに!

連載目次:GASでデータ分析!グラフを作成してデータの可視化

スプレッドシートを使う業務の中で多いのがデータの集計・分析作業。データからインサイトを引き出すコツは「可視化」してデータを見えるようにしてあげること。このシリーズではGoogle Apps Scripでのグラフ作成に関するテクニックをご紹介していきます。
  1. Google Apps Scriptでグラフを作成する方法の最初の一歩
  2. 【グラフで説得力をあげる】Google Apps Scriptでグラフの種類を変更する方法
  3. 【複数の要素もひと目で分かる】Google Apps Scriptで積み上げ棒グラフを作成する方法

書籍「ExcelVBAを実務で使い倒す技術」発売についてのお知らせ

$
0
0

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

ExcelVBAを実務で使い倒す技術という本を書きました!

4月20日から書店に並びます!

Amazon楽天ブックスでは予約受付しています!

4/8 9:00時点のAmazonランキングで…
  • コンピュータ・IT新着ランキング:13位
  • アプリケーション売筋ランキング:12位
  • アプリケーション新着ランキング:3位
  • 表計算ソフト売筋ランキング:5位
  • 表計算ソフト新着ランキング:1位

にランクインしています!たくさんのご予約ありがとうございます!

さて、本ページですが書籍「ExcelVBAを実務で使い倒す技術」の様々な情報を発信していく特集ページです。

お知らせ、関連記事、書評のご紹介などを随時更新してまいりますので、覗いてみて頂けると嬉しいです。

書籍「ExcelVBAを実務で使い倒す技術」について

本書ですがVBAの始め方、VBEの基本操作、VBAの基本構文、オブジェクトやメソッドの使い方…などといったことは、ほとんど(というか全く?)書いていません。…まあ、そういう内容は素晴らしい書籍やWebサイトが既にいっぱいありますからね…。

では、何を書いたかと言いますと、その名の通り「ExcelVBAを実務で使い倒す技術」についてです。

「動くコードを書けた」というのは、ExcelVBAを現場で使うという観点ではまだスタート地点です。大事なのは「その先」

本書がフォーカスするのは、「その先」の部分で紛れもなく必要となる実践的なテクニック。しかも、ガッツリ300ページも。さらに、これを趣旨とした本、本書が唯一だと思います。

けっこういらっしゃるんです。ExcelVBAを活用できれば「楽」になるはずなのに、不安、モヤモヤ、大変、イライラ、プレッシャー…など、なぜか楽にならないという方。

本書は、そういう方が、実務でVBAを楽に効果的に使いこなし続けるための知恵と知識、そしてそのためのビジョンと踏み出す勇気を提供する本として書きました。

間違いなく、皆さんの「働く」の価値を上げる一助と成り得る一冊になったと思います。ぜひ、手に取って、そして活用頂ければ嬉しく思います。

本書の内容

ExcelVBAは基本、実務で使うためのものです。
にもかかわらず「動けばいいや」という空気。そこから抜け出ない限りは、あなたはずっと初級者のままでしょう。
本書は、初心者向けの入門書ではありません。
物量勝負のTips集やサンプル集でもありません。
「ExcelVBAを実務で使う」という目的に特化した実践書です。

目次一覧

第1章 脱初級への第一歩は「道具であるVBE」を使いこなすことから
第2章 イミディエイトウィンドウの神髄
第3章 バグを制するものはVBAを制する
第4章 システムの成功と失敗の分かれ目は設計にあり
第5章 できる担当者のコーディングは発想からして違う
第6章 リーダブルコードでVBAを資産化する
第7章 「変化」への耐久性を持たせるためのVBAの作法
第8章 VBAは個人作業のみならず「チーム」にも革命をもたらす

近況

先日完成原稿の最終チェックを終え、お店に並ぶのを待っております…!

Amazonと楽天ブックスでは既に予約が可能となっています!予約を頂ければ、とっても嬉しいです。

そして、4月20日に書店に並びます。…ドキドキしています。

電子書籍に関しては現在未定となっとりますので、続報をお待ちくださいませ。

書籍「ExcelVBAを実務で使い倒す技術」関連記事

書籍「ExcelVBAを実務で使い倒す技術」に関連して、本書自体や、本を書くということ、イベントレポートなどを連載していきます。
  1. 書籍「ExcelVBAを実務で使い倒す技術」発売についてのお知らせ
  2. なぜ、ExcelVBAの「実務」に特化した本が必要なのか
その他、以下のようなことを書いていく予定です。
  • 読者の顔を思い浮かべながら、300ページ近い原稿を書くことの大変さ
  • ブログ開設からたった2年で出版のチャンスを得た理由
  • 【VBA本】どれだけの文字数を、どれだけの時間をかけて書いたのか
どうぞお楽しみに!

書評紹介

書評を書いて頂いたら、ぜひタカハシ(@ntakahashi0505)までご連絡を頂ければと思います。

こちらのコーナーで紹介をさせて頂きます。

なぜ、ExcelVBAの「実務」に特化した本が必要なのか

$
0
0
Preparation

photo credit: DiariVeu – laveupv.com gettyimages – corbata via photopin (license)

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

この度ExcelVBAを実務で使い倒す技術という本を書きました。

ExcelVBAは大変人気があります。というのも、ほとんどすべての企業でExcelは使っていますからね。使いどころが山ほどあります。

本屋さんに行けば初級者向けの入門書から上級者向けのリファレンス本まで、たくさんの書籍に出会うことができます。

それだけ大量に情報があふれているのですが、本書がテーマにしている「ExcelVBAを実務で使い倒す技術」を主旨とした書籍…あまり見ないように思えませんか?

私も見たことがありませんw。

だから書いたというのもあるのですが、今回、なぜ「実務」に特化した内容の本を書こうと思ったのか、その理由をお伝えしたいと思います。

ExcelVBAは孤独な茨の道

ExcelVBAは孤独な茨の道だと、つくづく思います。

「ExcelVBAは人気があるんでしょ?なのになぜ孤独なの?」

と思うかも知れません。

でも、実際そうなんです。セミナー等でお会いした方々もみんなそうですし、私自身もそうでした。

職種は様々、プログラミングの基礎がない

ExcelVBAの門を叩く方は、職種はエンジニアではなく、経理やマーケター、営業など様々。だからプログラミングの基礎を学んでいない方が多いです。

もともと、エンジニアであれば開発部にいるでしょうし、おそらくRubyとかJavaScriptとかJavaとか他の言語を主戦場にしていて、それらの技術を高めていくことでしょう。

しかし、ExcelVBAを学ぶ方は、経理、総務などの事務方を中心にExcelをよく使う職種であることが多く、仕事が急激に増えたとか、自分の価値を高めたい、といったモチベーションで学び始められます。

頼れる人が近くにいない

当然そうなると、所属は経理部だったり、営業部だったり、エンジニアが周りにはいない部署。上司もITやプログラミングには詳しくない方が多い。

VBAの習得をしている最中に、わからないことを聞いたり、「それはこうしたらいいよ」とアドバイスをくれたりといった頼れる人はいません。

結果的に、書籍、インターネット、セミナー。これらに頼ることになります。

身の回りがVBAの天敵であふれている

本書の「4章 システムの成功と失敗の分かれ目は設計にあり」でもお伝えしているのですが、身の回りにある多くのExcelがVBAで扱いづらいように作られています。

例えばこんな感じです。

  • IDやマスタが存在しない
  • データの型が揃ってない
  • セルが結合されている
  • それぞれの人の好き好きにデータが分散して保管されている
  • データが大量のシートに分かれている

基礎がない、頼れる人もいない、それに加えて周りには扱いづらいデータばかり…ExcelVBAは孤独な茨の道なのです。

ExcelVBAを現場で使い始めると起きること

最初は良いんです。真っ新なエディタに、本やネットに書いてある通りに進めていけば良いのですから。

そしてなんとか使えるマクロは完成し、その圧倒的なパワーに「おお!」っとなります。

しかし、問題は「その先」です。

  • エラーが全く解消できなくて業務に支障が出る
  • 先週書いた自分のVBAコードがすごく読みづらい
  • 業務フローが変わったのだけどマクロが修正できないので、手作業に逆戻り
  • 機能追加したいのだけど、どこから手をつけていいのか…

こんな重く苦しい課題が発生し始めます。

当然、VBAだけでなく「本職」もあるわけで、その合間に上記のような重く苦しい課題に、孤独に立ち向かわなければいけないのです。

ExcelVBAを実務で使う上で求められるスキルとは

なぜ、このようなことになるのでしょうか?

書籍、インターネット、セミナー…ExcelVBAに関しては本当にたくさんの素晴らしい学ぶ方法が用意されています。

しかしながら、それら多くのコンテンツは「動くコードを書く」ことに主眼を置いています。

それ自体が悪いわけではありません。それは絶対に必要なスキルです。

でも、ExcelVBAは何のために使うんですか?

現場で実務に使うためであり、動くコードを書くことがゴールではありません。

動くコードを書いた時点では、それはまだ道半ばであり、むしろ最初の一歩目です。

では、どんなスキルが求められるかというと

  1. 動くコードを書く
  2. 保守管理する
  3. 機能追加をする
  4. 価値を高める

実務では、このようなスキルまでが必要とされるんです。

多くの場合は、2~4といったスキルがすっぽ抜けたまま実務に突入していくので、ただでさえ茨の道なのに、なおのこと困難な道になってしまいます。

実際の現場では真っ新なエディタに新たに動くコードを作るような一本道はなかなかありません。

  • 過去に残したコード
  • 常に変化し動き続ける業務
  • 限られた時間
  • 突発的な不具合や要望

…こういう要素が複雑に絡み合い、刻一刻と変化を続ける中で、すかさず最短距離を見つけて楽にヒョイヒョイ進んでいくような、そういう実践的な能力が求められます。

実務で使い倒す技術を事前に備える

ExcelVBAの習得は、そんな孤独な茨の道であるわですが、いざ「実務での使い倒し方」を身に着けてしまえば百人力です。

しかし、今まではそれぞれの各人が、それぞれの現場で、実務でトライをして、ぶつかって、痛い目を見て、学んで…そんな職人技のように身に着けていく必要があったように思えます。

私もその一人でした。

しかし、そういった知識や知恵は、うまく抽出してまとめることができるのではないかと思いました。

そして、みんながみんな、現場や実務で苦しみながら習得しなくても、事前に知恵や知識として備えることができるのではないかと。

こうしてできたのが本書「ExcelVBAを実務で使い倒す方法」ということになります。

孤独で茨の道に勇気をもって踏み出した一人でも多くの方が、現場で生き生きとExcelVBAを使い倒せるように、本書がその一助になればとても嬉しいです!

書籍「ExcelVBAを実務で使い倒す技術」関連記事

書籍「ExcelVBAを実務で使い倒す技術」に関連して、本書自体や、本を書くということ、イベントレポートなどを連載していきます。
  1. 書籍「ExcelVBAを実務で使い倒す技術」発売についてのお知らせ
  2. なぜ、ExcelVBAの「実務」に特化した本が必要なのか
その他、以下のようなことを書いていく予定です。
  • 読者の顔を思い浮かべながら、300ページ近い原稿を書くことの大変さ
  • ブログ開設からたった2年で出版のチャンスを得た理由
  • 【VBA本】どれだけの文字数を、どれだけの時間をかけて書いたのか
どうぞお楽しみに!

初心者でも簡単!GASでスプレッドシートを作成する方法&取得する方法

$
0
0
create

photo credit: erin.liu Colors Up Close via photopin (license)

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

Google Apps Scriptでツールを作成する際に、新規のスプレッドシートを作成したい局面もたくさんあると思います。

例えば、スクリプトを仕込んであるスプレッドシートと同じフォルダとか、別の指定したフォルダとかに保存したいというというニーズは当然あります。

ただ、SpreadsheetApp.createメソッドで新規スプレッドシートを作成すると、常にルートフォルダにファイルができてしまい、ルートフォルダがぐちゃぐちゃに…てなことも。

ということで、Google Apps Scriptで新規スプレッドシートを指定のフォルダに作成する方法について、シリーズで紹介したいと思います。

まず今回は、基本の基本から。

Google Apps Scriptで新規スプレッドシートを作成する方法、またそのIDを取得する方法です。

では行ってみましょう!

createメソッドで新規スプレッドシートを作成する

ではまず手始めに、新規スプレッドシートを作成することから始めましょう。

新規スプレッドシートを作成する場合は、SpreadsheetApp.createメソッドを使います。

書き方はこうです。

SpreadsheetApp.create(スプレッドシート名);

簡単ですね。

例えば、こんなスクリプトです。

function creatSS() {

  SpreadsheetApp.create("新規SS");

}

簡単ですね。

これを実行すると、このようにマイフォルダ直下つまりルートフォルダに新規スプレッドシートが作成されました。

GASで新規スプレッドシートを作成した

スプレッドシートを開いてみましょう。

GASで作成した新規スプレッドシート

createメソッドで作成されたスプレッドシートはこのようにまっさらな状態です。

作成したスプレッドシートを取得する

このスプレッドシートのセルに値を書き込むこともできますが、そのためにはこの作成したスプレッドシートを取得する必要がありますよね。

まず一つの方法としては、createメソッドの返り値を使う方法があります。

例えば、このようなスクリプトですね。

function creatSS() {

  var mySS = SpreadsheetApp.create("新規SS");
  Logger.log(mySS.getName());

}

mySSという変数に作成したスプレッドシートを取得しています。

このスクリプトを実行して Ctrl + Enter でログ出力を確認すると「新規SS」と表示されます。

IDを使って作成したスプレッドシートを取得する

別の方法として、スプレッドシートのIDを使う方法を紹介します。

getIdメソッドでスプレッドシートのIDを取得する

スプレッドシートのIDを取得するには、Spreadsheetオブジェクトに対するgetIdメソッドを使います。

書き方はこちら。

Spreadsheetオブジェクト.getId()

Google App Scriptのファイルには全てIDが振られていますので、IDを使ってアクセスできることを知っておくと良いですよ。

openByIdメソッドでIDによりスプレッドシートを取得する

また、IDを指定してスプレッドシートを取得するには、SpreadsheetApp.openByIdメソッドを使います。取得と言っているのでget~のような気もしますが、open~ですので注意を…

書き方はこうです。

SpreadsheetApp.openById(ID)

これらのメソッドをテストするスクリプトは例えばこちらです。

function creatSS() {

  var idSS = SpreadsheetApp.create("新規SS").getId();
  Logger.log(SpreadsheetApp.openById(idSS).getName());

}

こちらのスクリプトも実行すると、「新規SS」というログ出力がなされるはずです。

まとめ

Google Apps Scriptで新規スプレッドシートを作成する方法についてお伝えしました。

また、作成したスプレッドシートを取得する方法として、二つお伝えしました。

IDを使うパターンは、なんだか回りくどいように見えるかも知れませんが、本シリーズのゴールでいうフォルダを指定して保存する場合には必要となりますので、覚えておいてくださいね。

では、次回は視点をGoogleドライブ、つまりDriveAppに移して、ファイルやフォルダをIDで取得する方法についてお伝えしますね。

どうぞお楽しみに!

ExcelVBAについて…ブログでは伝えられないことが書籍なら伝えられる

$
0
0

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

この度、ご縁がありましてExcelVBAを実務で使い倒す技術という本を書きました。

覚悟はしていましたが、300ページから成る本を書くというのは本当に大変です。

執筆期間は昨年9月後半から1月まででしたが、正直、執筆期間中はほぼ身体のどっかしらかが壊れていました。(これについては、また別の記事で笑い話としてお話したいと思います。)

でも、今、こうして本を書いて発売を待っている段階になってみると、本当に書いて良かったと思います。

当然、ビジネスやステータスとしての意義が大きいのですが、それ以上に「ブログで伝えられないこと」を「本であれば伝えられる」、という確信が生まれたからです。

ブログも素晴らしいんです。でも、ブログでは伝えられないことが確かにあります。

ブログに訪れる人はどういう人なのか

このブログもありがたいことに、たくさんの方に日々ご覧いただいています。平日であれば約1万人くらいの方が、15,000~20,000ページくらいご覧いただいています。

その中でも、特にExcelVBAカテゴリは人気がありまして、記事ランキングでもTop20のうち、10~15記事がExcelVBA関係の記事になっています。

一番人気の以下記事なんかは、毎日1,000人以上の方が訪れています。

エクセルVBA超入門!たった10分でスタート地点に立つための方法
エクセルVBA…まず何をしたら良いかわからない…!という声をよく耳にします。今回はVBAプログラミングをいざ書き始める直前の状態を目標に、エクセルVBAの最低限のセッティングの仕方についてお伝えします。

それだけの方が今日もExcelVBAのスタート地点に立っているんだと思うと、すごく勇気をもらいます。

ただ、これだけブログが人気を博していても、ブログでは絶対に成し遂げられないことがありました。

それは、「課題が言語化できていない人の悩みに応えること」です。

当ブログの場合、訪れている方の9割以上が自然検索経由で訪れています。

いつも隣にITのお仕事の流入経路

ということは、「vba 初心者」とか「vba 請求書」で検索して訪れるつまり

VBAをはじめたいのだけど、最初の一歩は何をすればいいのか?

とか

VBAで請求書を作成するツールを作りたいのだけど、参考になる記事ないかな?

などといった、明確で、具体的な課題が既に顕在化している場合がほとんどということです。

オブジェクトとかメソッドとか多すぎてわけわからなくなる問題

ExcelVBAの初級者をそろそろ抜ける頃になると、とあるフワっとした悩みが、全ての人に襲い掛かります

私はそれを「オブジェクトとかメソッドとか多すぎてぐちゃぐちゃになる問題」と呼んでいます。

なんじゃそら、という感じですが説明します。

ExcelVBAの入門書では

  • VBEの使い方
  • MsgBox
  • Subプロシージャの書き方と実行
  • 変数と代入とは何か
  • If文やFor文などの基本構文

…といったものを学んでいきます。

このあたりまではいいんです。覚えるものの数も少ないですし、作るプログラムの規模も小さいですからね。

しかし、少しばかり実務で利用できるようになってくると、次は入門書の後半や、ExcelVBAの中級者向けの本などを読み進めながら、ピンポイントで具体的に欲しい情報はネットで仕入れたりします。

そこで仕入れる情報ですが

  • WorksheetオブジェクトやRangeオブジェクトの使い方
  • CellsプロパティやValueプロパティ
  • LeftやDateSerialなどの関数
  • 配列

…といったように、次から次へと新しいやつが登場してきます。

正確にカウントしていませんが、当ブログでも、オブジェクト、メソッド、プロパティ、関数、ステートメント…を200以上紹介しています。

そして、まだまだ紹介していないやつが、大量にあります。

そんなの…覚えられるわけないじゃないですか。そんなの、どんどん押し込まれたら、抱えきれません。

しかも、コード量も増えるし、その分、エラーも増えてくるし…頭がぐちゃぐちゃになってきます。

こんな問題が出てきます。

このように、「動けばいい」という入門書のスタンスのままでは、限界に到達するのです。

「引き算」の考え方はネットでは手に入らない

ですから、ある程度ExcelVBAを習得していくと、スタンスの変更が必要になります。

新しいのを追加で覚えていく「足し算」ではなくて、過去の学んだことを整理整頓しつつ、これから増え続けていっても楽に扱えるようになること、つまり「引き算」のスタンスが必要になるんです。

ただ、その課題をネットで調べるにはどうしたら良いですか?どんな「キーワード」で検索すればいいでしょうか?

イミディエイトウィンドウの使い方とか、読みやすいコードの書き方とか、コードの管理の仕方とか、そういう情報はもちろんネット上にもあります。

しかし、多くの場合は、その課題を「言語化できていない」のですよ。だから、検索でそれを解決する方法に、たどり着くことはなかなかありません。

運よく、それらを見つけても「新たな知識」「新たなテクニック」として足し算になっちゃいます。

さて、ではその課題を解決するには、どのような行動をとりますか?

ブログにはなし得ずに、書籍が可能にすることとは

ちょっと恥ずかしい話なのですが、以前、電子書籍を出そうと企画をしていて頓挫してしまっています。

こちらの記事でその恥を晒しっぱなしなんですけどね。

ビジネスの視点で考えた場合に、なぜ電子書籍を出版しようと思ったのか
電子書籍の出版をしてみようと思っています。ブログの記事を集めて、手を加えて、有料で販売をする予定です。そこで今回は、ビジネスの視点で考えた場合になぜ電子書籍を出そうと思ったのか?について書いてみます。

当時も、実は「ブログではできないこと」に、ほんのり気づいていて、このように書いていました。

多分、Google検索で来た人が欲しい情報って、ピンポイントでドンピシャのものなんですよね。
必要な情報から派生してより深い理解や広い知識を進めていこうという思考になっていないんだと思うんです。
なぜWeb上に様々な知識があふれているのに書籍を買うのか。
なぜ書店に行って本を探す行為はワクワクするのか。
そう考えると、情報をまとめて提供する行為に価値が出てくるのではないかと思います。

言語化はできていないけれども、多くの人が悩む。

そんなときの行動は、検索ではなくて、書店のExcelVBAコーナーに行くんです。または、誰かに「いい本ない?」って聞いたりもしますね。

書籍は体系的に一つの考え方やアプローチがまとまっていることを知っていますから、それが自らを次のステージや知らない世界にいざなってくれるのではないかという期待感があるのです。

そして、考え方、やり方、スタンスを見直すのです。それが「引き算」です。

そして、手に取った書籍が本書「ExcelVBAを実務で使い倒す技術」であれば、バッチリなわけです。

これは、残念ながらブログでは成し得ないことだと、本書を書き終えて改めて確信しました。

そして、本書を通して、多くの方のスタンスに変化を与えて、脱初級を楽ちんに達成するお手伝いができればと思います。

書籍「ExcelVBAを実務で使い倒す技術」関連記事

書籍「ExcelVBAを実務で使い倒す技術」に関連して、本書自体や、本を書くということ、イベントレポートなどを連載していきます。
  1. 書籍「ExcelVBAを実務で使い倒す技術」発売についてのお知らせ
  2. なぜ、ExcelVBAの「実務」に特化した本が必要なのか
  3. ExcelVBAについて…ブログでは伝えられないことが書籍なら伝えられる
その他、以下のようなことを書いていく予定です。
  • 読者の顔を思い浮かべながら、300ページ近い原稿を書くことの大変さ
  • ブログ開設からたった2年で出版のチャンスを得た理由
  • 【VBA本】どれだけの文字数を、どれだけの時間をかけて書いたのか
どうぞお楽しみに!

基本中の基本!GASでGoogleドライブのファイル・フォルダをIDで取得する

$
0
0
catch

photo credit: mark.calvin33 PVHS v Paxon-219 via photopin (license)

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

Google Apps Scriptで新規スプレッドシートを指定のフォルダに作成する方法をシリーズでお届けしています。

初心者向けですが、スプレッドシートやGoogleドライブなど一通りの基本を覚えられるのでオススメですよ。

さて、前回の記事はこちら。

初心者でも簡単!GASでスプレッドシートを作成する方法&取得する方法
Google Apps Scriptで新規スプレッドシートを作成する方法、またそのIDを取得する方法をお伝えします。GASでは全てのファイルにIDが付与されていますので、IDでの取り扱いが便利ですよ。

新規のスプレッドシートの作り方についてお伝えしました。

しかし、作成したスプレッドシートは常にルートフォルダに作成されてしまいます。

ですから、そのファイルを目的のフォルダに移動したい、ということがあるわけです。

ということで、今回はそのための準備としてのGoogleドライブ操作の基本中の基本。

Google Apps ScriptでGoogleドライブのフォルダやファイルをIDで操作する方法です。

ではいってみましょう。

スプレッドシートを指定のフォルダに作成するためには?

冒頭でもお伝えしましたが、スプレッドシートを指定のフォルダに作成することを、ファイルを移動する方法を利用して実現します。

つまり、以下のような手順です。

  1. Spreadsheet.createメソッドで新規スプレッドシートをルートフォルダに作成する
  2. 新規スプレッドシートをFileオブジェクトとして取得
  3. 移動先のフォルダをFolderオブジェクトとして取得
  4. 新規スプレッドシートのFileオブジェクトを移動先のFolderオブジェクトに追加
  5. ルートフォルダから新規スプレッドシートのFileオブジェクトを削除

これで、結果的に「指定のフォルダにスプレッドシートを作成した」となりますよね。

手順の1は前回の記事でお伝えした通り、SpreadsheetApp.createメソッドを使って実現できます。

function creatSS() {

  SpreadsheetApp.create("新規SS");

}

今回は2と3、つまりGoogleドライブのファイルやフォルダを取得する部分を進めていきます。

スプレッドシートをFileオブジェクトとして取得する

スプレッドシートをFileオブジェクトとして取得するにはIDを使って取得する方法が簡単です。

スプレッドシートのIDは、前回お伝えした通り、SpreadsheetオブジェクトのgetIdメソッドで取得できます。

つまり、前述のスクリプトを

function creatSS() {

  var idSS = SpreadsheetApp.create("新規SS").getId();

}

とすれば、作成したスプレッドシートのIDが変数idSSに格納されるということになります。

ついで、そのIDからFileオブジェクトを取得するのですが、その場合はDriveApp.getFileByIdメソッドを使います。

書き方はこちらです。

DriveApp.getFileById(ID)

これでGoogleドライブ内の特定のファイルを取得することができます。

スクリプトに以下のように追加をします。

function creatSS() {

  var idSS = SpreadsheetApp.create("新規SS").getId();
  var fileSS = DriveApp.getFileById(idSS);

  Logger.log(fileSS.getName());

}

fileSSに新規スプレッドシートのFileオブジェクトが格納されます。

実行をすると、ルートフォルダに「新規SS」が作成された上で、ログ出力に「新規SS」と取得したFileオブジェクト名が表示されます。

GoogleドライブのフォルダをIDで取得する

次いで、今度は移動先となるフォルダをIDで指定して取得してみましょう。

GoogleドライブのフォルダをIDで指定して取得する場合は、DriveApp.getFolderByIdメソッドを使います。

DriveApp.getFolderById(ID)

これでGoogleドライブの特定のフォルダを変数として取得することができます。

フォルダのIDはGoogleドライブで目的のフォルダに移動した際のURLの

https://drive.google.com/drive/u/1/folders/{フォルダID}

{フォルダID}の部分です。

以下画像もご参考ください。

GoogleドライブのフォルダID

スクリプトを以下のように修正をして実行をしてみましょう。

var FOLDER_ID = '{フォルダID}';

function creatSS() {

  var idSS = SpreadsheetApp.create("新規SS").getId();
  var fileSS = DriveApp.getFileById(idSS);
 var folderTarget = DriveApp.getFolderById(FOLDER_ID);

  Logger.log(folderTarget.getName());

}

実行をすると、ルートフォルダに「新規SS」が作成され、ログ出力にはフォルダ名「スプレッドシート作成・移動」が表示されるはずです。

これで、ファイルを目的のフォルダに移動する準備が整います。

まとめ

Google Apps ScriptでGoogleドライブのフォルダ、ファイルをID指定で取得する方法についてお伝えしました。

Googleドライブの世界ではIDは一意に決まりますので、パッと指定して取得できるのでとっても便利です。

getFileByIdメソッド、getFolderByIdメソッド合わせて覚えて頂ければと思います。

次回は、ファイルの移動・削除についてお伝えしていきます。

どうぞお楽しみに!

連載目次:GASでスプレッドシートを指定フォルダに作成する方法

Google Apps Scriptで新規のスプレッドシートを作成したい局面はたくさんありますが、常にルートフォルダにファイルができてしまい、ルートフォルダがぐちゃぐちゃに…てなことも。 このシリーズでは、Googleドライブのファイルやフォルダの操作を学びながら、指定のフォルダにスプレッドシートを作る方法をお伝えします。
  1. 初心者でも簡単!GASでスプレッドシートを作成する方法&取得する方法
  2. 基本中の基本!GASでGoogleドライブのファイル・フォルダをIDで取得する

Google Apps ScriptのsetColorsメソッドでグラフの色を設定する方法

$
0
0

みなさん、こんにちは!
タダケン(@tadaken3)です。

さて、今回も、Googleスプレッドシートでの集計・分析作業の効率を上げるための、Google Apps Scriptのテクニックを紹介します。前回は、Google Apps Scripでグラフタイトル・凡例を編集するテクニックをご紹介しました。

【意図を明確に】Google Apps ScriptのsetOptionメソッドでグラフタイトル・凡例を編集する方法
setOptionメソッドを使って、グラフタイトル、凡例を編集するテクニックを紹介します。見た目を整えることで、グラフの意味するところ相手に正確に伝えることができます。

前回に引き続き、グラフの見た目をきれいにするテクニックを紹介します。
今回は、グラフの色を変更する方法をお伝えします。

前回のおさらい

今回は野菜の産地別販売データを使います。

まず、前回までにご紹介したメソッドを使って、基本となるグラフを作成してみます。
京都産と大阪産で各野菜の販売数を比較したいので、縦棒グラフを作成します。

function createChart() {
  var mySheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("sheet1");
  var range = mySheet.getRange("A1:C6");
  var chart = mySheet.newChart()
              .addRange(range)
              .setPosition(1,5,0,0)
              .asColumnChart() 
              .setOption('title', '野菜の産地別販売数')//タイトルを設定
              .setOption('titleTextStyle' ,{color: '#545454', fontSize: 20})//タイトルの書式を設定
              .setOption('legend', {position: 'top', textStyle: {color: '#545454', fontSize: 16}})//凡例の設定
              .build();  
              mySheet.insertChart(chart);
}

タイトルと凡例はカラーコードで、濃いグレー(#545454)にしています。

見やすいグラフをつくるには

データの理解を助けるためには、グラフの配色はとても重要です。

グラフの配色を考える前に、まずすべての要素をグレーにしてしまうことをおすすめします。
色を取り除くことによって、まずそのデータから何が読み取れるのか、何を伝えることができるのか本質的な部分を考えることができます。

その後、強調したい部分、グラフで伝えたい部分にのみ色をつけるという方法が良いかと思います。グラフの色にまでこだわることで、資料のわかりやすさはぐっと上がります。

今回の例では、「京都産」が「大阪産」に比べて好調なので、その点を強調するようにしましょう。

setColorsメソッドでグラフの色を変更する

グラフの色を変更するには、にはsetColorsメソッドを使います。

書き方は

chartオブジェクト.setColors([系列1の色,系列2の色,…]);

です。

系列名の数分だけ、設定したい色を配列にして渡してあげます。
今回の例では京都産を「ダークグリーン」、大阪産を「ダークグレイ」で指定します。
もちろん、カラーコードで指定することもできます。

実際のコードは以下のとおりです。

function createChart() {
  var mySheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("sheet1");
  var range = mySheet.getRange("A1:C6");
  var chart = mySheet.newChart()
              .addRange(range)
              .setPosition(1,5,0,0)
              .asColumnChart() 
              .setOption('title', '野菜の産地別販売数')
              .setOption('titleTextStyle' ,{color: '#545454', fontSize: 20})
              .setOption('legend', {position: 'top', textStyle: {color: '#545454', fontSize: 16}})
              .setColors(["darkgreen", "darkgray"])//色を設定
              .build();  
              mySheet.insertChart(chart);
}

これで、グラフの色が変更されました。

まとめ

今回は、setColorsメソッドを使って、グラフの色を変更するテクニックをご紹介しました。
グラフの見た目を整えることで、グラフで伝えたい事を明確にできます。

次回も、グラフについてのテクニックを、お伝えしてきますね。

どうぞ、お楽しみに!

連載目次:GASでデータ分析!グラフを作成してデータの可視化

スプレッドシートを使う業務の中で多いのがデータの集計・分析作業です。データからインサイトを引き出すコツは「可視化」してデータを見えるようにすること。このシリーズではGoogleスプレッドシートでの集計・分析作業の効率を上げるための、Google Apps Scriptのテクニックを紹介します。
  1. Google Apps Scriptでグラフを作成する方法の最初の一歩
  2. 【グラフで説得力をあげる】Google Apps Scriptでグラフの種類を変更する方法
  3. 【複数の要素もひと目で分かる】Google Apps Scriptで積み上げ棒グラフを作成する方法
  4. 【意図を明確に】Google Apps ScriptのsetOptionメソッドでグラフタイトル・凡例を編集する方法
  5. Google Apps ScriptのsetColorsメソッドでグラフの色を設定する方法

【Excel】勝手な編集は許しません!初心者向けのシート保護設定

$
0
0

Excel,block,sheet,book
皆様こんにちは、ノグチです。

エクセルで帳票を作った時、「このセルは他の人に触らせたくないな」ということはありませんか?

或いは、「この人はこのシートを更新してもいいけど、他の人は見るだけにしたい」なんていうこともありませんか?

又は、「このセルの値を消されるとマクロが動かなくなっちゃう…」なんていうものもありますよね。

そんなとき使えるのが、エクセルの機能の一つ、「シートの保護」です。

今回は、この機能をご紹介します!

シートの保護を設定する

シートの保護は、そのワークシート上でできる操作を制限できる機能です。

使い方は、エクセルツールバーから「シートの保護」を選択します。

メニュー選択 シートの保護

すると、「シートの保護」というウインドウが開くので…

シートの保護 ウインドウ

このウインドウにある、「このシートのすべてのユーザーに許可する操作」で、そのシートに対して「してもいい操作」(=このシート上ではその操作しかできなくする)を選択します。

例えば、このウインドウで「列の挿入」にチェックを入れてOKを押すと…

シートの保護 列の挿入

シート上では列の挿入以外の操作ができなくなります。

試しに「このシートのすべてのユーザーに許可する操作」で列の挿入だけを選択しておいて、シート上で行挿入をしようとしても…

excel,sheet,block,insertrow

こんな感じで、右クリックのメニューから行の「挿入」が選択できないようになります。

また、セルの値を変えようとしても…

excel,sheet,block,message

メッセージが表示されて、値の変更もできないようになっています。

では、列の挿入はどうかというと、

シートの保護 列の挿入

ちゃんと列の挿入はできるようになっています。

このように、「シートの保護」は、そのワークシート全体に対してできる操作を制限することができる機能なのです。

できることを選択する=通常のエクセルでできる操作を、そのシート上ではできなくする、ということですね。

ちなみに、ショートカットキーを使ったセルの値の変更も無効化されます。

 

 

パスワードを使って特定の人にだけ操作を許可する

さて、シートで操作できることを制限する方法は前述でご紹介しました。

しかし、このままではエクセルの機能を知っている人だと簡単にシートやブックの保護を解除することができてしまいます。

そんな時は、パスワードを使って特定の人(=パスワードを知っている人)だけが保護を解除できるようにしてしまいましょう。

エクセルのメニューから「シートの保護」を選択した時に開く「シートの保護」ウインドウに、「シートの保護を解除するためのパスワード」という項目がありますよね。

シートの保護 パスワード

赤枠にパスワードを入力してOKを押すと、もう一度パスワードの入力を求められますので、「シートの保護を解除するためのパスワード」に入力したものと同じパスワードを入力してOKを押します。

シート保護 パスワード再入力

これで、シート保護を解除しようとするとしたときにパスワードの入力を求められて、正しいパスワードを入力しない限りシートの保護の解除ができないようにすることができます。

「特定の人はこのブックやシートを変更できるようにしたい」という場合は、この方法を使ってパスワード付きのシートの保護を設定しておいて、編集してもいい人にだけこのパスワードを教えておけば、特定の人だけが編集できるようになるのです。

ただ、「パスワードの確認」ウインドウにも注意書きがある通り、ここで入力したパスワードは設定した人ですら再表示したりすることができません。つまり、ここで設定したパスワードを忘れてしまった場合、ブックやシートの保護が解除できなくなるので、パスワードを忘れてしまわないように注意してくださいね。

シートの保護を解除する

シートの保護解除

さて、ここまでシートの保護をかける方法をご紹介してきました。

お次はシートの保護を解除する方法です。

「シートの保護」を設定したシートでは、エクセルメニューの「シートの保護」があった場所が「シート保護を解除」という表記に代わっています。

シートの保護 保護の解除

パスワードがかかっていないシートの保護であれば、この「シート保護の解除」をクリックすればシートの保護が解除できます。

パスワード付のシート保護の解除

パスワードがかかったシートの保護を解除する場合は、シート保護の時に設定したパスワードを入力する必要があります

エクセルのメニューから「シートの保護の解除」を選択すると、パスワード入力を求めるウインドウが表示されます。

シートの保護 保護解除 パスワード

この「パスワード」に、シートの保護で設定したパスワードを入力してOKを押せば、シートの保護が解除されて、そのシートを編集できるようになります。

正しいパスワードを入力してOKを押しても、特に何もメッセージ等は表示されないので「本当に解除できた?」と不安になりますが、ちゃんとシートの保護が解除されますのでご安心を。

最後に

いかがでしたでしょうか。

今回は「シートの保護」についてご説明しました。

次回は「ブックの保護」の機能をご紹介をしていきます。

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


ブログ開設からたった2年で私が出版のチャンスを得た理由

$
0
0

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

この度ExcelVBAを実務で使い倒す技術という本を書かせて頂きました。

本の執筆についてオファーを頂けたのは、他でもない、このブログのおかげです。

二年前、独立を視野に入れて、集客・差別化・自己研鑽の柱となるツールとしてブログを活用し始めました。

もちろん、その役目は十分に果たしてくれているのですが、それにプラスして「商業出版」というビッグチャンスを引き当てることができました。

ブログ…本当にやっててよかったと思います。

本の執筆という視点ではまだ一冊書いたばかりのヒヨッコではありますが、開始から2年という短さで出版のチャンスを得ることができたのには、いくつかやっといてよかったポイントがあったのではないかと思っています。

今回は、そのポイントについて書き残しておければと思います。

最初から商業出版を視野に入れていたのか?

私がブログを始めた当時から視野にはありました。

バイブルとして拝読していた「フリーランスのための一生仕事に困らない本」を書かれていた井ノ上さんも何冊も出版されていますし、ブログをきっかけに商業出版の扉が開かれるのは知っていました。

当時は

3年くらい頑張ったらあるかも知れないな~

などと、もや~と考えていて、ステップとしては

  1. ブログをそれなりの規模に育てる
  2. 電子書籍で結果を出す
  3. 商業出版

というステップだろうと思っていました。

電子書籍は企画だけして見事に頓挫していたのですが…ありがたいことに、その間に出版のオファーを頂く事ができました。

ブログ開始から2年で出版のチャンスを得た理由

当然ながら、強運もあったのですが、それは置いておいて、どうしてこんなに早くお声がけ頂けたのかな…というのを考えたところ、4つほどポイントとなりそうな点があったと思います。

以下4点です。

  1. 上手に習慣化する
  2. こだわり
  3. 甘い誘惑に乗らない
  4. カテゴリを絞る

上手に習慣化する

とにかく、検索で見つけてもらうためには記事数は一定必要なはずです。

週1とかだと目立つには相当厳しいし、3日に1回とかのペースでもいいですが、やっぱり早めに結果を出したいのであれば、先人たちが皆さんおっしゃるように「毎日書け」てな感じになります。

ですが、毎日一定の時間を確保するのは大変。

それを「やるぞ!」という意志の力だけでやろうとしても無理です。

生活の一部としてうまく組み込んで、楽に継続できるように工夫をする必要があります。

ITを活用してブログを書く事自体や、その他の仕事を効率化するのももちろん一つの手ですし、ブログありきで予定を組んでおくのはけっこうオススメです。

ブログを習慣化してコツコツ続けるためにオススメしたい5つのこと
企業でも個人でもブログで最もつまづきやすいポイントが「習慣化」です。仕事、家族、友達…色々なものが「習慣化」を邪魔します。今回は私自身が実践しているブログを習慣化するための5つのテクニックについてです。

こだわり

今回、編集さんからお声がけ頂いたのですが、最初の打ち合わせで

こだわりを持って記事を書いていそうな方

を、かなり頑張って探したとおっしゃっていました。

すんごく嬉しかったです。

ExcelVBAを題材としたブログは他にもたくさんあるのですが、その数ある中からこの「いつも隣にITのお仕事」にお声がけ頂いた理由が、その「こだわり」ということです。

私がブログを運営している理由も、ビジネスをしている理由も、ただ一つで「『働く』の価値を上げる」という点にあります。それが、こだわりポイントです。

ExcelVBAは手段であり目的ではありません。同様に、材料であり価値そのものではありません。

編集さんも、ExcelVBAの先に見えるものを、一生懸命ご覧になろうとしていたんだな~と思います。

甘い誘惑に乗らない

「ブログで直接的に稼ぐこと」にウェイトを置きすぎなくて良かったと思っています。

独立してすぐのときは、仕事もちゃんと獲得できるか不安ですし、キャッシュはどんどん減っていくし、目先の方法で稼ぎたい…!と、どうしても気持ち的にはそうなります。

しかし、そんな中、当ブログはありがたいことに、Google AdSenseに永久追放(?)して頂きました(笑)。

Google AdSenseのアカウントをBANされて学んだ2つのこと
当ブログ開設以降お世話になっていたGoogle AdSenseが、この度アカウントが停止となりました。今回はAdSenseのアカウントが停止された経緯と、それを通じて学んだことについてお話しします。

これで一気に、広告収入で稼ぐ気持ちが萎えたというもの。

当ブログにも、アフィリエイト広告やディスプレイ広告は貼っていますが、もう全く持って不真面目に運用しています。サーバー代のお小遣いになればいいやくらい適当です。

結果としては、良かった…!Googleさん、BANしてくれてありがとう!!

というのも、今思うと、広告収入を狙う記事を混ぜてしまった時点で、前述の「こだわり」が薄まっちゃったのではないかという気がするんですよね…。

いや、薄まらずにやれる方法はあるのかも知れませんが、それを編み出す能力は、きっと私にはなかったということだと思います。

カテゴリを絞る

今回の本は「ExcelVBA」でしたので、「ネット上でExcelVBAを書いている人」の中で、それなりに目立つ必要があったものと思います。

それでいうと、そのカテゴリについて、それなりの記事数を提供することや、それなりの検索順位につけることなどが必要になります。

それでいうと、限られた時間と力を、アチコチのカテゴリに分散するのは、得策ではないかなと。

ブログを運営している期間にもよりますが、例えば本ブログの場合は、15個くらいのカテゴリがありますが、中でも「ExcelVBA」と「Google Apps Script」の二つにかなり集中しています。

でもそれはあれですよね、出版に限らず、集客などを考えても、ブランディングという意味ではカテゴリを絞るのは重要だったかなと思います。きっと絞らなかったら、独立して今まで立っていたれなかったかも…と怖くなります。

出会うために何ができるか、たまには立ち止まって考える

もちろん、この通りやれば必ずしも商業出版ができるというわけではないです。私の場合はこうだったという一例に過ぎません。

どういったテーマで攻めていくかで有利不利はあるでしょうし、運やタイミングもあると思います。

ただ、あれこれトライする際の一つの参考にはなるかと思います。

出版社さんも一生懸命に著者を探していらっしゃいました。

そしてこうして書籍として形になった、そう考えると、感慨深いものがあります。

また、二冊目・三冊目…と夢を叶えるために、このブログと私自身を見つけてもらうために何ができるのか、たまには立ち止まって考えると良いかなと思っています。

書籍「ExcelVBAを実務で使い倒す技術」関連記事

書籍「ExcelVBAを実務で使い倒す技術」に関連して、本書自体や、本を書くということ、イベントレポートなどを連載していきます。
  1. 書籍「ExcelVBAを実務で使い倒す技術」発売についてのお知らせ
  2. なぜ、ExcelVBAの「実務」に特化した本が必要なのか
  3. ExcelVBAについて…ブログでは伝えられないことが書籍なら伝えられる
  4. ブログ開設からたった2年で私が出版のチャンスを得た理由
その他、以下のようなことを書いていく予定です。
  • 読者の顔を思い浮かべながら、300ページ近い原稿を書くことの大変さ
  • 【VBA本】どれだけの文字数を、どれだけの時間をかけて書いたのか
どうぞお楽しみに!

【GAS】レポート共有も効率よく!作成したグラフをGmailで送る方法

$
0
0


みなさん、こんにちは!
タダケン(@tadaken3)です。

さて、今回も、Googleスプレッドシートでの集計・分析作業の効率を上げるための、Google Apps Scriptのテクニックを紹介します。前回は、Google Apps Scripでグラフの色を変更するテクニックをご紹介しました。

Google Apps ScriptのsetColorsメソッドでグラフの色を設定する方法
Google Apps ScriptのsetColorsメソッドでグラフの色を設定するテクニックをご紹介します。見やすいグラフを作るために、色にまでこだわりましょう。

今回は、作成したグラフをGmailで送付する方法をお伝えします。

前回のおさらい

前回、作成したグラフをGmailで送付してみましよう。

前回までのコードとグラフはこちらです。

function createChart() {
  var mySheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("sheet1");
  var range = mySheet.getRange("A1:C6");
  var chart = mySheet.newChart()
              .addRange(range)
              .setPosition(1,5,0,0)
              .asColumnChart() 
              .setOption('title', '野菜の産地別販売数')
              .setOption('titleTextStyle' ,{color: '#545454', fontSize: 20})
              .setOption('legend', {position: 'top', textStyle: {color: '#545454', fontSize: 16}})
              .setColors(["darkgreen", "darkgray"])//色を設定
              .build();
              mySheet.insertChart(chart);
}

作成したグラフをGmailで画像として送付します。

グラフの画像を取得する

メールに添付する場合、作成したグラフを画像として取得する必要があります。
そこで、getBlobメソッドを使いグラフを画像として取得します。

書き方は

chartオブジェクト.getBlob().getAs(‘image/png’).setName(ファイルの名前);

です。

getBlobメソッドを使うと、作成したグラフをバイナリファイルとして取得します。
その次のgetASメソッドでファイルの種類を指定し、setNameメソッドではファイル名を設定します。

function createChart() {
  var mySheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("sheet1");
  var range = mySheet.getRange("A1:C6");
  var chart = mySheet.newChart()
              .addRange(range)
              .setPosition(1,5,0,0)
              .asColumnChart() 
              .setOption('title', '野菜の産地別販売数')
              .setOption('titleTextStyle' ,{color: '#545454', fontSize: 20})
              .setOption('legend', {position: 'top', textStyle: {color: '#545454', fontSize: 16}})
              .setColors(["darkgreen", "darkgray"])
              .build();
  mySheet.insertChart(chart);
  var imageBlob = chart.getBlob().getAs('image/png').setName("chart_image.png");//グラフの画像を取得
}

実際のコードでは、imageBlogという変数に画像を格納しています。

Gmailでグラフ付きのメールを送付する

Gmailでメールを送付するには、GmailAppにsendEmailメソッドを実行します。

メール送信については、以下の記事でも取り上げていますので、
もしよければ確認してみてください。

初心者でも簡単!Google Apps ScriptでGmailを操作してメールを送る方法
Google Apps Scriptでメールマガジンを送るシステムを作りたいと思います。シリーズ初回の今回は、Google Apps ScriptでGmailを操作してメールを送る方法です。

attachmentsに先程、取得したimageBlobを渡すことで、ファイルを添付することができます。グラフが複数ある場合も、配列で渡せばオッケーです!

attachments:[添付1,添付2…]

実際のコードは以下のようになります。

function createChart() {
  var mySheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("sheet1");
  var range = mySheet.getRange("A1:C6");
  var chart = mySheet.newChart()
              .addRange(range)
              .setPosition(1,5,0,0)
              .asColumnChart() 
              .setOption('title', '野菜の産地別販売数')
              .setOption('titleTextStyle' ,{color: '#545454', fontSize: 20})
              .setOption('legend', {position: 'top', textStyle: {color: '#545454', fontSize: 16}})
              .setColors(["darkgreen", "darkgray"])
              .build();
  mySheet.insertChart(chart);

  //グラフの画像を取得
  var imageBlob = chart.getBlob().getAs('image/png').setName("chart_image.png");//グラフの画像を取得

  //GMailAppにsendEmailメソッドを実行してメールを送信する
  GmailApp.sendEmail(
        'itsumo-torari-it@gmail.com',//宛先です。※架空のメールアドレスです
        '野菜のレポート',//件名です。
        '添付ファイルをご確認下さい', //本文になります。
        {attachments: [imageBlob]}
        );
}

これでグラフの画像付きのメールを送ることができました。

まとめ

今回は、
1. getBlobメソッドを使って、グラフの画像を取得する方法
2. GmailAppを使って、添付ファイル付きのメールを送付する方法

をご紹介しました。

これでグラフ作成から共有まで一通り自動化できるようになりましたね。
次回も、グラフについてのテクニックを、お伝えしてきますね。

どうぞ、お楽しみに!

連載目次:GASでデータ分析!グラフを作成してデータの可視化

スプレッドシートを使う業務の中で多いのがデータの集計・分析作業です。データからインサイトを引き出すコツは「可視化」してデータを見えるようにすること。このシリーズではGoogleスプレッドシートでの集計・分析作業の効率を上げるための、Google Apps Scriptのテクニックを紹介します。
  1. Google Apps Scriptでグラフを作成する方法の最初の一歩
  2. 【グラフで説得力をあげる】Google Apps Scriptでグラフの種類を変更する方法
  3. 【複数の要素もひと目で分かる】Google Apps Scriptで積み上げ棒グラフを作成する方法
  4. 【意図を明確に】Google Apps ScriptのsetOptionメソッドでグラフタイトル・凡例を編集する方法
  5. Google Apps ScriptのsetColorsメソッドでグラフの色を設定する方法
  6. 【GAS】レポート共有も効率よく!作成したグラフをGmailで送る方法

ExcelVBA本を一冊書くには、どれだけの文字数と、どれだけの時間が必要だったか

$
0
0

ExcelVBAを実務で使い倒す技術

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

私の生まれて初めての自著「ExcelVBAを実務で使い倒す技術 」が発売されました。

いくつかの書店では平積みもして頂いたりして、感慨深いものがありました。

いや~しかし、思い返すと執筆までの道のりはそれはもう大変。色々な身体の壊し方をしましたw

さて、そんな執筆作業ですが、お仕事の生産性については、かなりウルサイ性分なもので

  • どれだけの文字数を
  • どれだけの時間を使って

書いたのか、バッチリ記録してあります。

今回は発売記念ということで、本を一冊書くのに、どれだけの文字数を、どれだけの時間をかけて書いたのか、ババンと晒したいと思います。

300ページの書籍を書くのに、どれだけの文字数と時間が必要だったか

まずは以下の表をご覧ください。

私が本書籍を作るためにかけた時間と、書いた文字数の月ごとの推移です。

時間 書いた文字数
9月 16:25 0
10月 33:00 3,028
11月 57:30 19,484
12月 54:00 34,513
1月 124:30 74,676
2月 0:00 0
3月 47:30 6,749
4月 10:30 0
合計 343:25 138,450

Googleカレンダーに記録をとっていますので、何にどれかで時間をかけたのが、バッチリ見返せるのです。

仕事の生産性を測定して振り返るためのGoogleカレンダーの使い方
過去に何の仕事にどれだけ時間をかけてきたか、振り返ったことはありますか?Googleカレンダーを上手に記録しておくことで、これまでの仕事の生産性を測定するための貴重なデータになります。

執筆に要した時間について

多くは実際に執筆をしている時間ですが、本の骨子や構成を決める企画の段階も重要ですから、かなりパワーを使いますし、書き終わった後にゲラをチェックしながら修正や加筆をする校正の作業も何度か繰り返します。

そして、かかった時間は全部で343時間…!

1日8時間労働、1ヶ月で20営業日としたら、ちょうど丸2カ月分の労働時間といったボリューム感です。

出版社さんとお話が始まったのは9月中旬ですし、2月はほぼ作業ナシ、4月も月初しか作業がありませんでしたので、賞味半年の中に、まるっと2カ月分を詰め込んだ形になります。

んー、こうして数字としてみると、なかなかインパクトありますね。

ちなみに、1月にものすごい文字数を書いていますが、後半5章以降にかなり勢いが良くなったのと、正月休みがあったからですね。執筆に集中して、たっぷり時間が使えた正月…幸せでした。

書いた文字数について

一方で、書いた文字数は約14万文字です。

あ、ちなみに実際に採用された文字数はもうちょっと少なくて、10万文字弱くらいです。

というのも、本の執筆には、ブログにはあまりない、「書き直し」つまり厳しめの言葉で言うと「ボツ」があるのです。

ああ…恐ろしい!!

話を戻しますと、当ブログの1記事の文字数がだいたい3,000文字くらいだと思いますので、46記事分つまり毎日更新で1カ月半くらいの文字数になりますね。

独立してすぐの出版は過酷以外の何ものでもない

リアルな話ですが、執筆に関しては、実際に出版されるまで収入はゼロのことがほとんどだと思います。

出版後に、ようやく取り決めに応じた印税のお支払が発生します。

つまり執筆期間については、労働時間だけ先に持ち出しになってしまうということです。

これは、独立から2年にも経たない、キャッシュが潤沢にはない、そんな一人社長にとっては非常に切実な問題です。

執筆の時間を捻出しながらも、日銭を稼がなくてはいけないからです。

しかも、ブログの執筆もある

そしてアホなことに、ブログヲタクでもあった私は、かなりギリギリまで更新していました。

更新記事数
9月 30
10月 27
11月 14
12月 20
1月 12
2月 24
3月 20

このように期間中も、まあまあブログ更新していたんですね。

数字がデコボコしているのは、後述しますが、身体がやばいときに更新をサボっていた証です。ちゃんと体調に合わせてキレイにサボっていて、笑えます。

過労死ラインをちょっと超えた

執筆、仕事、ブログ…これら全てを合わせた労働時間はいくらだったのか…9月から3月までの労働時間は7ヶ月合計で「1,719時間」でした。

ザックリ計算で

  • 1月あたり245時間
  • 1営業日あたり12.3時間

ということになります。いわゆる過労死ラインという「月80時間残業」をちょいと超えるくらいでしたw

実際に、齢40を超えたオジサンの身体は、「無理」に対してはすぐに忠実に反応を見せるもので

  • 9月中旬~9月いっぱい:あばら骨にひび
  • 9月末~10月下旬:帯状疱疹
  • 12月上旬~12月いっぱい:過敏性腸症候群(症状からたぶん)
  • 3月中旬~3月いっぱい:謎の咳き込み

と期間中は、ほんと色んな症状が出てきまして、通院や服薬をしながらの仕事&執筆をしていました。

これって、ブラック…!?

まあ、あばら骨に関しては、執筆とは関係なくて自業自得みたいなところもあるんですけどね…

体が資本!肋軟骨ひびと帯状疱疹から得たアラフォーフリーランスとしての3つの教訓
肋軟骨にひびが入ったり、帯状疱疹ができたりして、本調子ではない状態が1カ月ほど続いておりました。アラフォーのフリーランスの方と未来の自分自身が同じような目にあったとき役立つと信じ、記録を残しておきます。

独立して間もなくて、キャッシュが十分にない場合に、商業出版にチャレンジするのであれば、十分に覚悟をすべきだと思います。

なぜ、そこまで無理をして本を書いたのか

しかし、そんなのもなんとか乗り越えまして、こうして発売までこぎつけることができました。

実は、ある程度は過酷になるだろうということは事前に想定できていました。

独立して1年半しか経ってなくて案件も安定していないことは自分が良く分かっていますし、キャッシュが十分にないということはMFクラウドを覗けばすぐにわかることですしね。

また、ブログを書いていましたので、250ページの書籍の企画であれば、だいたいどれくらいの文字数を書く必要があり、その文字数を書くには、どれだけの時間がかかるのか、そういうこともだいたい事前にシミュレーションできます。

でも、即決で「やる」と決めました。

もちろん、自分にとっては一気にステージを変えるほどの大きなチャンスであることは確かです。

これからどういうことが起きてくるのか、起きないのか、ワクワクしています。

一方で、孤独にVBAにチャレンジしている日本全国の皆さんに、一斉に「こうすれば楽にExcelVBAを使い倒せるよ~」と伝えることができる、絶好の機会でもあります。

なにせ、過去の私自身が超苦労してきたものをまとめ上げて、たった3日もあれば取り入れることができるわけですから。

いまいち上手にVBAを使い倒せていない方が使い倒せるようになり、もうVBAについて挫折しそうな方にはそれ支える、そんなことができたら、全国の生産性が上がるじゃないですか。

こんな生産性が高く、価値のある活動はそうはないんです。

だから、辛くても大丈夫。

また、ぜひトライしたいです。商業出版。

書籍「ExcelVBAを実務で使い倒す技術」関連記事

書籍「ExcelVBAを実務で使い倒す技術」に関連して、本書自体や、本を書くということ、イベントレポートなどを連載していきます。
  1. 書籍「ExcelVBAを実務で使い倒す技術」発売についてのお知らせ
  2. なぜ、ExcelVBAの「実務」に特化した本が必要なのか
  3. ExcelVBAについて…ブログでは伝えられないことが書籍なら伝えられる
  4. ブログ開設からたった2年で私が出版のチャンスを得た理由
  5. ExcelVBA本を一冊書くには、どれだけの文字数と、どれだけの時間が必要だったか
その他、本書に関する裏話や出来事などについてレポートをしていきますね。 どうぞお楽しみに!

Google Apps ScriptでGoogleドライブ内のファイルを追加・削除・移動をする方法

$
0
0
tidying-up

photo credit: Flооd snow day on kitchen road via photopin (license)

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

Google Apps Scriptでスプレッドシートを指定のフォルダに作成する方法をシリーズでお伝えしています。

前回の記事はこちら。

基本中の基本!GASでGoogleドライブのファイル・フォルダをIDで取得する
Google Apps ScriptでGoogleドライブ内のファイルを目的のフォルダに移動したいということはよくあります。今回はそのための準備としてフォルダやファイルをIDで操作する方法です。

GoogleドライブのフォルダやファイルをIDを使って取得する方法についてお伝えしました。

今回はその続きとして、Google Apps ScriptでGoogleドライブの指定のフォルダにファイルを追加する方法、削除する方法についてお伝えします。

追加と削除ができれば、移動もできます。

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

前回までのおさらい

前回までの連載で、以下のようなスクリプトを作りました。

var FOLDER_ID = '{フォルダID}';

function creatSS() {

  var idSS = SpreadsheetApp.create("新規SS").getId();
  var fileSS = DriveApp.getFileById(idSS);
  var folderTarget = DriveApp.getFolderById(FOLDER_ID);

}

この時点では

  1. createメソッドでスプレッドシートを作成
  2. 作成したスプレッドシートのIDを取得
  3. スプレッドシートのIDを使って、そのFileオブジェクトを取得
  4. 移動先となるFolderオブジェクトを取得

という処理をしていますが、この後の手順として

  • 移動先となるFolderオブジェクトにFileオブジェクトを追加
  • ルートフォルダからFileオブジェクトを削除

を加えることで、Googleドライブ内の任意のフォルダに作成したスプレッドシートを移動することができるというわけです。

では、その部分を解説していきましょう。

addFileメソッドでGoogleドライブのフォルダにファイルを追加する

まず、Googleドライブの指定のフォルダにファイルを追加するには、addFileメソッドを使います。

書き方はこうです。

Folderオブジェクト.addFile(Fileオブジェクト)

先ほどのスクリプトに処理を追加して、以下のようにします。

var FOLDER_ID = '{フォルダID}';

function creatSS() {

  var idSS = SpreadsheetApp.create("新規SS").getId();
  var fileSS = DriveApp.getFileById(idSS);
  var folderTarget = DriveApp.getFolderById(FOLDER_ID);

  folderTarget.addFile(fileSS);

}

これでFOLDER_IDで指定したフォルダに、作成したスプレッドシートが追加されるわけです。

今回は「スプレッドシート作成・移動」というフォルダのIDを指定していますので、そこにスプレッドシート「新規SS」が追加されます。

GASで指定のフォルダにファイルを追加

ルートフォルダに作成したスプレッドシートが残ってしまう

これで「指定のフォルダにスプレッドシートを作成する」という要件は達成したことになるのですが、一点「やり残したこと」があります。

というのも「マイドライブ」をを見てみると…

マイドライブにもGASで作成したスプレッドシートが残っている

「新規SS」がこちらにもありますね。

createメソッドでは必ずマイドライブ(つまりルートフォルダ)にスプレッドシートが作成されます。そして、addFileメソッドでそのファイルを指定のフォルダに追加したのですが、つまりそれはコピーがされたということなんですね。

ルートフォルダにできたファイルを削除しなければなりません。

Googleドライブのルートフォルダからファイルを削除する

removeFileメソッドで指定のフォルダからファイルを削除する

Googleドライブの指定のフォルダからファイルを削除するには、removeFileメソッドを使います。

書き方はこちら。

Folderオブジェクト.removeFile(Fileオブジェクト)

addFileメソッドと類似していますね。

getRootFolderメソッドでルートフォルダを取得

ルートフォルダにも当然IDがありますので、getFolderByIdメソッドを使ってルートフォルダを取得するという方法も当然あるます。

ですが、ルートフォルダはgetRootFolderメソッドで簡単に取得できます。

このように書きます。

DriveApp.getRootFolder()

これで、現在のアカウントのGoogleドライブのマイドライブつまりルートフォルダを指定できます。

スプレッドシートを指定のフォルダに作成するスクリプト

以上をふまえて、スプレッドシートを指定のフォルダに作成するスクリプトを作りました。

var FOLDER_ID = '{フォルダID}';

function creatSS() {

  var idSS = SpreadsheetApp.create("新規SS").getId();
  var fileSS = DriveApp.getFileById(idSS);
  var folderTarget = DriveApp.getFolderById(FOLDER_ID);

  folderTarget.addFile(fileSS);
  DriveApp.getRootFolder().removeFile(fileSS);

}

これで、ルートフォルダに作成されたスプレッドシートが指定のフォルダに移動されるはずです。

つまり、結果として「新規SS」は指定のフォルダに作成されたのと同義になります。

まとめ

以上、Google Apps ScriptでGoogleドライブの指定のフォルダにファイルを追加する方法、削除する方法についてお伝えしました。

addFileメソッドと、removeFileメソッドは使い方が類似していますので、合わせてマスター頂ければと思います。

これで結果として、任意のフォルダにスプレッドシートを作成することとなりました。

かなり使用頻度が高いテクニックだと思いますので、どうぞご活用下さいね!

連載目次:GASでスプレッドシートを指定フォルダに作成する方法

Google Apps Scriptで新規のスプレッドシートを作成したい局面はたくさんありますが、常にルートフォルダにファイルができてしまい、ルートフォルダがぐちゃぐちゃに…てなことも。 このシリーズでは、Googleドライブのファイルやフォルダの操作を学びながら、指定のフォルダにスプレッドシートを作る方法をお伝えします。
  1. 初心者でも簡単!GASでスプレッドシートを作成する方法&取得する方法
  2. 基本中の基本!GASでGoogleドライブのファイル・フォルダをIDで取得する
  3. Google Apps ScriptでGoogleドライブ内のファイルを追加・削除・移動をする方法

【超入門】Windowsを10倍効率良く使うバッチファイル作成術

$
0
0

みなさん、こんにちは!
タダケン(@tadaken3)です。

本記事では、バッチファイル作成のテクニックについて、みなさまにお伝えしたいとお思います。バッチファイルは仕事の自動化・効率化のためには覚えておいて損のないテクニックです。

バッチファイルでできることは簡単なことばかりですが、簡単なことを積み上げていくことで、少しずつですが作業の効率化・自動化ができるようになります。その中で自動化・効率化の喜びを知ってもらえればいいと思い、この記事を書くことにしました。

とくにプログラミング経験のない方が、「仕事の生産性を上げたい」「仕事を自動化・効率化したい」と思ったときに、挫折することなく簡単にできるのがバッチファイルの作成だとボクは考えています。

バッチファイルとは?

突然ですが、この黒い画面が表示されているのを見たことがありますか?

この黒い画面のことを「コマンドプロンプト」と言います。プログラマーなどがコマンドプロンプトに対して、作業を行っているときがあります。難しそうですよね。ボクもそう思っていました。では、一体、プログラマーの人たちは何をしているのでしょうか?

実は、みなさんが普段、PCの画面上でおこなっている「フォルダを作る」「ファイルを別の場所にコピーする」または「アプリを実行する」など、作業を行っているだけだったりします。このコマンドプロンプトに対して、命令(コメンド)を出すことによってPCを操作することができるのです。

例えば、こんな感じです。

さらに、このようなコマンドは一つのファイルにまとめて保存できます。

たとえば

  1. デスクトップにフォルダをつくる
  2. デスクトップにそのフォルダに対して、デスクトップのファイル移動する
  3. 移動したファイルの名前を変更する

などの作業があったとします。
これら一連の流れのコマンドを一つのファイルにまとめて、実行するためのファイルをバッチファイルと言います。

つまり、バッチファイルとはWindowsで行なう処理をまとめて記述したファイルとお考えください。

バッチファイルを覚える3つのメリット

環境構築が不要で簡単

Windowsであれば、メモ帳さえあれば、簡単にバッチファイルを作成することができます。プログラミングを学んだことがない人に初心者の方でも、わずか数行のコマンドを書くだけでバッチファイルが作成できます。個人的には、VBAよりもさらに簡単に自動処理をおこなうことができると考えています。

ファイル操作などであれば、簡単に自動化・定型化が可能

バッチファイルは、とても実用的で、ファイルのコピーや移動など、普段、手作業で行っていることを簡単に自動化することができます。とくに単純な事務作業などであれば、ほんの数行、コマンドを書くだけで、バッチファイルを作成することができます。

一度バッチファイルを作ってしまえば、あとはダブルクリックで作業を終わらせることができるようになるので効率的です。また自動化することで、間違えが減ることもメリットの1つです。

スケジュールを組んで、定期的に実行することもできる

Windowsであれば、標準の「タスクスケジューラ」を使用することで、作成したバッチファイルを定期的に実行することができます。毎日とか毎週など、ある決まった時間にバッチファイルを起動して、処理を自動化してしまえば、もはやダブルクリックをする必要すらありません。

バッチファイルを作ってみよう!

では、早速、バッチファルがどんなものなのか試してみましょう。
「メモ帳」を開いて、以下のコードをコピペして、「hello_world.bat」という名前で保存してみてください。

@echo off
::echoは、文字を出力するコメンドです
echo Welcome to bat World!!
::pauseコマンドは、画面を一時停止します。
pause

保存した「hello_world.bat」をダブルクリックしてみてください。
するとこのような動作をすると思います。

画面の指示にある通り、何かボタンを押すと、バッチファイルが終了します。今回はただ文字を表示させただけですが、このような形で様々の処理を自動化することができます。

これでみなさんもバッチファイル作成のための「はじめの一歩をふみだすこと」ができました。最初は小さな一歩ですが、この小さな一歩がより遠くに行くための大事な一歩となります。

まとめ

今回は、

  • なぜ、バッチファイルなのか
  • コマンドプロンプト、バッチファイルとは何なのか
  • バッチファイルを学ぶメリット

をお伝えいたしました。

簡単に覚えることができるわりに効果が高いのがバッチファイルです。バッチファイルを学ぶことで、単純作業に充てている時間を、より専門的・技術的な業務に携わる時間に充てることができます。

VBAに加えて、バッチファイルを学ぶことで、仕事が自動化・効率化できる範囲を広げることができます。あとはバッチファイルの作成術をガツガツ勉強してバシバシ活用していくだけですね。次回からは具体的なバッチファイル作成のテクニックを、お伝えしていきますね。

どうぞ、お楽しみに!

「Accessデータベース 本格作成入門」は親しみやすいイラストと解説で学べる初心者向け入門書

$
0
0

Accessデータベース本格作成入門

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

ほとんどの会社では顧客リスト、販売データなどの管理にExcelを使っていることと思います。

つまり、Excelをデータベースソフトとして使っているんですね。

ですが、Excel。データベースとしての使い方もできなくはないですが、Excelの得意分野は「表計算」であり「データベース」ではありません。

そこを正しく理解しておかないと、データがケッ散らかってしまったり、データ量の増加に耐えられなくなったり、色々なリスクがあります。

そこで注目すべきが、データベースソフト「Access」です。

これまでのパッケージ版のOfficeでは仲間はずれになっていましたが、Office365 SoloやBusinessには標準でバンドルされるようになりましたから、とっても身近な存在になってきました。

これはAccessに手を出してみる絶好のチャンス!

そこで今回は、私もいつもお世話になっているブログ「Ateitexe」を運営されている、*youさん(@ateitexe)こと今村ゆうこさんの新著Accessデータベース 本格作成入門 ~仕事の現場で即使えるが、はじめてAccessを勉強する方に絶賛オススメでしたのでご紹介します!

しかも本書、先日発売された拙著ExcelVBAを実務で使い倒す技術と同じ発売日!

合わせて活用すると効果てきめんですよ~。

「Accessの洗礼」なんて、もう怖くない

さて、Excelと同じノリでAccessを立ち上げてみるといきなり

「空のデスクトップデータベースって?」

「このコントロールはオートナンバー型の’ID’フィールドに連結しているため、編集できません…って全然編集できない」

「テーブル?クエリ?オブジェクト…?なんだそりゃ」

などなど様々なデータベースソフトならではの洗礼を受けます。

Excelさんは見た目通りに作業がしやすいようにできています。例えるならこんな気の優しそうな青年のよう。

「Accessデータベース本格作成入門」よりExcelさん

一方でAccessさんはこんなイメージ。

「Accessデータベース本格作成入門」よりAccessさん

きっちりしてそうですよね。

しかし、ぱっと見はルールが多くてツッケンドンな印象ですが、そのおかげで

ルールどおりに整理整頓されていると無駄な容量を使わないので、効率よくたくさんのデータを蓄積することができます。データがきちんと並んでいるので、計算や集計も得意ですし、目的のものを探し出すのも非常に迅速です。とっても有能な秘書みたいに思えてきますね。

まさに、その通りなんです!

このように、親しみやすいイラストを使ってわかりやすく解説がされているので、敷居が高く見えるデータベースやAccessの世界も楽ちんに入っていくことができます。

ちなみに、本書のイラストは全て*youさんが描かれているとのこと。文章書くだけで瀕死の思いをするのに、すごすぎる…

(当記事に掲載しているイラスト画像は*youさんの許可を頂いております。ありがとうございます!)

Accessを学ぶとExcelも上手になる理由

私はExcelユーザーはみんなAccessを学ぶべきだと思っています。

というのも、お仕事で本当に「データ」の力を最大限に活用するのであれば、データベースの知識は必須中の必須なんです。

世の中の全てのホワイトカラーがデータベースをきちんと理解してお仕事をしていたら、それはもう大いに生産性が上がることでしょう。

なぜなら、データベースはデータを効果的に利用するためにあるからです。

本書でいうと

  • CHAPTER1 Accessの基本 データベースを作成する前に
  • CHAPTER2 テーブル 設計・作成・格納

まで進めれば、Accessの導入部分を理解しつつも、Excelのスキルも上がります。

データベースは、データを収めるテーブルが一番重要です。

とある通り、データを保管・管理しておくにはテーブル形式が最も効果的です。

それを知らずに、自由なデータの配置やセルの結合ができるExcelでデータを管理しようとすると

「Accessデータベース本格作成入門」よりExcelさんその2

Excelさん、困ってしまいます。皆さんの職場のデータもこんなふうになっちゃっていませんか??

テーブルをちゃんと理解してExcelを使うと、日々のお仕事の効率も格段に上がるはずです。

その練習材料として、ルールがちゃんとしているAccessでデータベースを叩きこむのは、Access自体も身に着きますし、一石二鳥。

かなり効果的だと思います。

以下、本書の中から具体例を2つほどピックアップしてみます。

ほとんどの場合ExcelのデータをAccessにインポートできない

さて、Accessにチャレンジしようとして、ほとんどの人がここで躓くのではないかと思っています。

お仕事で普段使っているExcelデータをAccessに移行して管理したいのにうまくインポートできないのです。

それでどうしていいかわからず、結局融通のきくExcelさんに戻ってしまうという…

「2-5 テーブルと元データの整合性~作成への最初の関門」では

  • 書式のクリア
  • 空行・空列の削除
  • 表記の統一
  • 重複の削除
  • スペースの削除

など、Excelによく潜んでいるトラップを一つ一つ「解除」する方法が解説されています。

「Accessデータベース本格作成入門」より文字列の置換

この節をチーム全員が読めば、それだけでも、かなりチームの生産性が上がると思います。

データベース運用をするために知っておくとよいこと

Accessはデータベースソフトとは言え、データに関して万能であるわけではありません。

ですから、気を付けなければならないことがあります。

運用する上で気を付けなければならないこと、例えば

  • Accessはどのような規模間で使うのが理想?
  • データの二重かを防止するために
  • バックアップについて

といったことが、「2-8 運用に関する注意~データベースは組織の重要な財産」に、これまた親しみやすいイラスト入りで解説されています。

「Accessデータベース本格作成入門」よりマスターデータ

このような考え方は、Accessに限らず現場でデータを共同で利用するときには、まず知っておいて損はないんですよね…ぜひ、読んで欲しい。

親しみやすいイラストと丁寧な解説が実現する本格データベース活用

ここまで冒頭の部分を紹介してきましたが、本書ではAccessの「部品」である

  • テーブル
  • クエリ
  • レポート
  • フォーム

まで、Accessを仕事で活用する場合に必要となる全てを網羅しています。

しかもそれは、前述の通り、親しみやすいイラストと、実務に即した丁寧な解説でなされていますので、途中で脱落することなくたどりつくことができるはずです。

そして、そのボリュームは303ページ!しかも大型本!!しかも、CD-ROM付!!!

ぜひ、本書をきっかけとして、皆さんの職場に「有能な秘書」を迎えてみてはいかがでしょうか?

【エクセルVBA】指定のフォルダが存在するか判定して、存在してなければ作成する方法

$
0
0
cat

photo credit: Fygget Cat file escapes via photopin (license)

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

エクセルVBAでファイルやフォルダを操作するFileSystemオブジェクトの使い方を連載でお伝えしています。

前回の記事はこちら!

【エクセルVBA】FileSystemオブジェクトでファイルやフォルダが存在するかを判定する
エクセルVBAのFileSystemオブジェクトでファイルやフォルダの操作をする方法をお伝えしています。今回はFileExists、FolderExistsメソッドでファイル・フォルダの存在を判定します。

FileSystemオブジェクトでファイルやフォルダが存在するかを判定する方法をお伝えしました。

さて、判定するのはいいですが、目的のフォルダが存在しなかったとき、どうしましょう?

フォルダの判定確認をするということは、VBAプログラムで使いたい可能性が高いですよね。

そんな時は、作ってしまえ!

ということで、エクセルVBAで指定のフォルダの存在確認をして、存在しなかった場合にフォルダを作成する方法についてお伝えします。

今回もFileSystemオブジェクトを使いますよ。

では、行ってみましょ!

前回のおさらい:フォルダの存在チェック

前回作成したプログラムはこちらでした。

Sub フォルダの存在確認をする()

Dim objFso As Object
Set objFso = CreateObject("Scripting.FileSystemObject")

Debug.Print objFso.FolderExists(ThisWorkbook.Path & "\pdf")
Debug.Print objFso.FolderExists(ThisWorkbook.Path & "\エクセル") 

Set objFso = Nothing

End Sub

FolderExistsメソッドを使って、Thisworkbookと同階層のフォルダ内に「pdf」または「エクセル」というフォルダが存在するかどうかを判定する内容です。

存在していればTrue、そうでなければFalseがイミディエイトウィンドウに出力されます。

今回は、ただ判定するだけでなく、フォルダがなかったら作成するように、変更をしていきたいと思います。

FolderExistsメソッドをIf文の条件式として使う

FolderExistsメソッドはTrueまたはFalseを返しますから、そのままIf文の条件文に使用することができます。

例えば、このようなプログラムですね。

Sub フォルダの存在確認をする()

Dim objFso As Object
Set objFso = CreateObject("Scripting.FileSystemObject")

If objFso.FolderExists(ThisWorkbook.Path & "\pdf") Then
    MsgBox "フォルダpdfは存在しています"
Else
    MsgBox "フォルダpdfは存在していません"
End If

Set objFso = Nothing

End Sub

pdfフォルダが存在していれば「フォルダpdfは存在しています」、さもなくば「フォルダpdfは存在していません」と表示されます。

条件分岐の結果、Falseならフォルダを作成するようにすればよいのですね。

CreateFolderメソッドでフォルダを作成する

フォルダを作成するには、FileSystemオブジェクトのCreateFolderメソッドを使います。

書き方はこちらです。

FileSystemオブジェクト.CreateFolder(作成するフォルダのパス)

実際のプログラムとしては、このようなものが考えられるでしょう。

Sub フォルダの存在確認をしてなければ作成する()

Dim objFso As Object
Set objFso = CreateObject("Scripting.FileSystemObject")

If objFso.FolderExists(ThisWorkbook.Path & "\pdf") Then
    MsgBox "フォルダpdfは存在しています"
Else
    objFso.CreateFolder (ThisWorkbook.Path & "\pdf")
    MsgBox "フォルダpdfは存在しなかったので作成しました"
End If

Set objFso = Nothing

End Sub

このプログラムでは判定してから存在しない場合のみ作成をするので問題ありませんが、既に存在するフォルダを指定するとエラーになるので注意ください。

CreateFolderメソッドはフォルダのパスを返す

また、CreateFolderは返り値として作成したフォルダのパスを返しますので

Sub フォルダの存在確認をしてなければ作成する()

Dim objFso As Object
Set objFso = CreateObject("Scripting.FileSystemObject")

Dim strFolderPath As String

If objFso.FolderExists(ThisWorkbook.Path & "\pdf") Then
    MsgBox "フォルダpdfは存在しています"
Else
    strFolderPath = objFso.CreateFolder(ThisWorkbook.Path & "\pdf")
    MsgBox "フォルダpdfは存在しなかったので作成しました" & vbNewLine & strFolderPath
End If

Set objFso = Nothing

End Sub

11行目のように変数にフォルダパスを取得できます。これは、けっこう使い場所が多いと思いますよ。

pdfフォルダが存在しない場合は、以下のようにフォルダも作成されつつ、メッセージが表示されます。

エクセルVBAでフォルダの存在を判定

まとめ

エクセルVBAでフォルダの有無を判定し、なければフォルダを作成する方法についてお伝えしました。

FolderExistsメソッドで存在を確認し、CreateFolderメソッドでフォルダを作成します。

使いどころの多いテクニックだと思いますので、ぜひマスター頂ければと思います。

次回は、FileSystemオブジェクトを使って特定のフォルダ内のファイル一覧を出力する方法についてお伝えします。

【エクセルVBA】FileSystemオブジェクトとFor Each文でファイル一覧を取得する方法
エクセルVBAでFileSystemオブジェクトを使ってファイルやフォルダの操作をする方法についてお伝えしています。今回は、FilesコレクションとそのFor Each文を使ってファイル一覧を出力する方法です。

どうぞお楽しみに!

連載目次:エクセルVBAでFileSystemオブジェクトを活用する

ファイルやフォルダを操作するのはデリケートな気がしますが、エクセルVBAではFileSystemオブジェクトを使うことでファイル、フォルダ、ドライブをオブジェクトとして安全にそして細やかに操作をすることができます。 このシリーズでは、FileSystemオブジェクトの様々な活用法についてシリーズでお伝えしていきます。
  1. 【エクセルVBA】FileSystemオブジェクトの基本と簡単にフルパスを生成・分解する方法
  2. 【エクセルVBA】FileSystemオブジェクトでファイルやフォルダが存在するかを判定する
  3. 【エクセルVBA】指定のフォルダが存在するか判定して、存在してなければ作成する方法
  4. 【エクセルVBA】FileSystemオブジェクトとFor Each文でファイル一覧を取得する方法
  5. 【エクセルVBA】FileSystemオブジェクトでフォルダ内のサブフォルダ一覧を取得する

初心者でも簡単!エクセルファイルをスプレッドシートに変換する方法

$
0
0
spread-sheet

photo credit: BriarCraft Garden Planning via photopin (license)

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

スプレッドシートとGoogle Apps Scriptの初心者向けの連載として「請求データ一覧から自動で請求書を作るツール」の作成を目指していきます。

Googleスプレッドシートであれば、クラウド上にありますから

  1. 複数人がそれぞれの請求データを同じシートに入力
  2. GASで全員分の請求書を一気に作成してGoogleドライブに保存

などといった運用が可能になり、現場によってはエクセルVBAよりも絶大な威力を発揮します。

シリーズで一歩一歩丁寧に進めていきますので、Google Apps Scriptを最初に学ぶ際のお題としてご活用くださいませ。

事前準備としては、以下の記事を読んで頂いておけばOKです。

超初心者へGoogleAppsScriptを始めるメリットをこれでもかと説明します
Gmailやスプレッドシート、カレンダーなど数々のGoogleサービスを操作することができるGoogle Apps Script…仕事効率化において、学び活用するメリットをこれでもかとお伝えします。

今回はその手始めとして、エクセルファイルをスプレッドシートに変換する方法と、スプレッドシートのいくつかの操作についてお伝えします。

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

請求書作成ツールのベースとなるエクセルファイル

さて、今回は既にあるエクセルファイルをベースに、スプレッドシートとGASによる請求書作成ツール作っていきますね。

ベースとなるエクセルファイル「請求データ.xlsm」ですが、以下記事でも使用しているものです。

【初心者向けエクセルVBA】データ一覧から請求書を自動で作る
初心者向けVBAの実用的な使い方について、請求データ一覧から請求書を自動で作成するを目標に進めます。初回はシートを取り扱うためのWorksheetオブジェクトの準備とセルの値の操作についてお伝えします。

二つのシートから構成をされていまして、まず「請求データ」は、こちらのようになっています。

請求データ

請求書を作成するにあたり必要となる数量、単価、価格といったデータが品目単位で記載されています。

次に、「請求書ひな形」です。

請求書ひな形

その名の通り、実際の請求書を作成するテンプレートとなりまして、このテンプレートにデータを転記または集計して実際の請求書を作成していくことになります。

エクセルファイルをスプレッドシートに変換する

エクセルファイルをスプレッドシートに変換するのはとっても簡単です。

Googleドライブにエクセルファイルをアップロードする

まずGoogleドライブで請求書作成ツールを作成したいフォルダを開きます。

そしたら、そのフォルダへベースとなるエクセルファイルをドラッグ&ドロップします。

エクセルファイルをGoogleドライブにアップロード

これだけで「請求データ.xlsm」のアップロードが完了します。

もし、ファイルが見つからないようでしたら、ブラウザを再読み込みしてみて下さいね。

Googleドライブでエクセルファイルを閲覧する

続いて、アップロードしたファイル「請求データ.xlsm」をダブルクリックしてみましょう。

Googleドライブにアップロードしたエクセルファイルをダブルクリック

すると、Googleドライブのビューア機能で「請求データ.xlsm」の内容を確認できます。

Googleドライブでエクセルファイルを閲覧する

シート名をクリックすることで、表示するシートを切り替えることができます。また、上部の「←請求データ.xlsm」を選択すると、ビューア機能を終了してGoogleドライブに戻ります。

エクセルファイルをスプレッドシートに変換する

ただし、この時点では、あくまでエクセルファイルであって、それを閲覧しているだけですので、スプレッドシートとして編集するには変換をする必要があります。

そこで、ビューアで開いている画面で「Googleスプレッドシートで開く」を選択します。

エクセルファイルをGoogleスプレッドシートで開く

少し待つとスプレッドシートに変換されて開きます。

エクセルファイルがスプレッドシートに変換された

スプレッドシート名は「請求データ.xlsm」、二つのシート「請求データ」「請求書ひな形」もそのままのフォーマットで反映されていますね。

これで、無事にスプレッドシートとして編集ができるようになりました。

多くの場合、この方法でエクセルファイルはスプレッドシートに変換することができ、データはもちろん書式なども再現することができます。

ただし、グラフやピボットテーブルなどは、再現することはできませんのでご注意下さい。

スプレッドシート名を変更する

名称が「請求データ.xlsm」のままになっていますので、スプレッドシート名の変更をしておきましょう。

変更の仕方は簡単。

スプレッドシート名をクリックしますと、編集できるようになりますので、好きな名称に変更をしましょう。

スプレッドシート名を変更する

今回は「請求書作成ツール」というスプレッドシート名に変更しました。

スプレッドシートからGoogleドライブに戻る

さて、スプレッドシートとGoogleドライブは頻繁に行き来します。

Googleドライブからスプレッドシートを開くには、ダブルクリックをすればOKですが、スプレッドシートからGoogleドライブに戻りたいこともあります。

そんなときは、スプレッドシート名の右あたりにある「フォルダ」マークをクリックすると、そのスプレッドシートが格納されているフォルダ名が表示されますので、それをさらにクリック。

スプレッドシートからGoogleドライブに戻る

これで、Googleドライブの選択したフォルダを開くことができます。

エクセルファイルとスプレッドシート

Googleドライブに戻ると、エクセルファイルの「請求データ.xlsm」と、スプレッドシートの「請求データ.xlsm」の両方が存在していることがわかると思います。

エクセルファイルとスプレッドシート

エクセルファイルのほうは前述の通り閲覧のみしかできず、編集はできません。

特に不要ならば選択した状態で delete キーで削除してしまっても良いでしょう。

まとめ

今回は、エクセルファイルをスプレッドシートに変換する方法と、スプレッドシートの基本操作として、スプレッドシート名を変更すること、またGoogleドライブへの戻り方**についてお伝えしました。

これで請求書作成ツールの作成をする準備が整いましたので、実際にGoogle Apps Scriptを仕込んでいきたいと思います。

次回はその手始めとして、スプレッドシートからスクリプトエディタを開いて、スクリプトを書く方法についてお伝えします。

どうぞお楽しみに!

【Excel】勝手なシート操作を防ぐ!初心者向けのブックの保護設定

$
0
0

excel,book,protect,エクセル,ブックの保護

皆様こんにちは、ノグチです。

複数人で使うツールをエクセルVBAで作ったものの、「このシートは消されると困る」とか、「シートの名前を変えられるとVBAが動かなくなる」というお悩みはありませんか?

またまた、「この人は変更してもいいけど、それ以外の人には変更させたくない」なんていうことはありませんか?

変更されたくないシートを非表示にしておいても、まだ心もとない…

今回はそんなお悩みを解決できるエクセルの機能、「ブックの保護」をご紹介します!

シートの保護についてはこちらの記事でご紹介していますので、併せてご覧ください。

【Excel】勝手な編集は許しません!初心者向けのシート保護設定
エクセルの「シートの保護」を使ったシートの値編集を制限したり、パスワードを使って特定の人だけに操作できるようにする方法をご紹介しています。関数やマクロを使ったエクセルブックのように、値やシートを操作されると正しく動作しなくなる、というときに便利な機能です。

ブックの保護

ブックの保護は、そのブックにあるシートの操作をさせないようにする機能です。

シートの操作とは、シート名の変更、シートの追加や挿入、削除のほか、移動やコピーを指します。(各シート内のセルの値変更や削除などはこの機能の対象外)

使い方はとても簡単。

まずエクセルツールバーにある「ブックの保護」をクリックします。

エクセル,ブックの保護,エクセルツールバー

するとこんなウインドウが開くので、

エクセル,ブックの保護,ウインドウ

「シート構成」にチェックをつけて(初期値でついています)「OK」を押すだけ。

これで、ブックの保護を解除しない限りこのブック内のシートを変更することができなくなります。

試しに、シートにマウスポインタを当てて右クリックしてみると…

エクセル,ブックの保護,操作禁止

この通り、シートの「挿入」、「削除」、「名前の変更」、「移動またはコピー」が選択できないようになっていますし、シートをダブルクリックしてシート名を変更しようとしても、

エクセル,ブックの保護,メッセージ

こんなメッセージが表示されて、変更ができなくなっています。

もちろん、ショートカットキーを使ったシート操作も無効になりますよ。

このように、ブックの保護をしておくとブック内のシートへの操作をさせないようにすることができるんです。

パスワードを使って特定の人にだけ操作を許可する

ここまで、基本的なブックの保護の方法をご紹介しました。

しかし、ただブックの保護を設定しただけでは、エクセルの機能を知っている人なら簡単にブックの保護を解除できてしまいます。

それを防ぐために使えるのが、パスワードを使ったブックの保護です。

シートの保護でもご紹介していますが、ブックの保護にもパスワードを設定することができるんです

設定方法は、エクセルツールバーで「ブックの保護」をクリックして「シート構成とウインドウの保護」ウインドウを開いて、

エクセル,ブックの保護,パスワード設定

「パスワード」に任意のパスワードを入力して「OK」を押します。

エクセル,ブックの保護,パスワード設定,パスワード再入力

すると、パスワードの再入力を求めるウインドウが表示されますので、「シート構成とウインドウの保護」のウインドウで入力したパスワードをもう一度入力して「OK」を押せば、パスワードの設定完了です。

これで、このブック内のシートは、パスワードを入力してブックの保護を解除しない限り操作することができなくなります。

あとは、シートの操作を許可する人にだけパスワードを教えておけば、特定の人(=パスワードを知っている人)だけがシートを操作できるようになるというわけです。

ただし、こちらもシートの保護と同じく、ここで設定したパスワードはパスワードを設定した人ですら解析することができません

つまり、ここで設定したパスワードを忘れてしまうと、そのエクセルブックの保護が解除できなくなりますので、設定したパスワードは忘れないように注意してくださいね

ちなみに、ここで設定できるパスワードは半角英数字と記号が入力できますよ。

ブックの保護を解除する

ブックの保護解除

さて、最後は設定したブックの保護を解除する方法のご紹介です。

こちらはとても簡単。

エクセルツールバーから、「ブックの保護」をクリック。

エクセル,ブックの保護,解除

これだけです。

ブックの保護が設定されているブックは、このメニューの色が薄い緑色でハイライトされているので、わかりやすくなっています。

この「ブックの保護」をクリックすれば、ブックの保護が解除されてメニューの背面が白色に代わりますが、その他には特に「解除しましたよ」というメッセージ等が表示されません。

それでもちゃんとブックの保護は解除されますのでご心配なく。

パスワード付きブックの保護解除

パスワード付きのブックの保護を解除する場合も、まずエクセルツールバーから「ブックの保護」をクリックします。

エクセル,ブックの保護,保護解除,パスワード

すると、パスワード入力を促すウインドウが表示されるので、あとはここに設定しておいたパスワードを入力して「OK」をクリックするだけ。

これでブックの保護が解除完了です!

ちなみに、入力したパスワードが間違っていた場合、こんなメッセージが表示されます。

エクセル,ブックの保護,パスワードまり買い

シートの保護とブックの保護の使い分け

前回ご紹介したシート保護と、今回のブックの保護は「シートの中身を変更させたくない場合」や「ブック内のシート構成を変えられたくない」など、困りごと別に使い分けることができます

制限したい操作と、制限できる保護の種類を整理してみましたので、良かったら参考にしてくださいね。

制限したい操作 シートの保護 ブックの保護
セルの値や数式の変更
セルの書式設定変更
フィルターの変更
シート上のレイアウト変更
シートの数の変更(削除や追加、コピー)
シートの名前変更
シートの移動や順番の変更
シートの色変更

最後に

シートの操作を含むVBAでできたツールにとって、使う人が勝手なシート名の変更やシートの削除をしてしまうことは最も避けたいところです。

このブックの保護や、前回ご紹介したシートの保護を使えば、そんな心配もなくなります。

 

次回からは、VBAでシートやブックの保護を設定する方法をご紹介していきます。

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

エクセルVBAでマクロの動作をログファイルに記録する最も簡単なプログラム

$
0
0
log-file-2

photo credit: bwc Old school log file via photopin (license)

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

エクセルVBAによるマクロの動作状況については、Debug.Printによるイミディエイトウィンドウへの表示をすることで確認することができます。

ですが、表示したい内容が大量にある場合や、記録として残しておきたいときはどうしたら良いでしょうか?

そんな時は、ログファイルに出力して記録をとっておくという手法がオススメです。

ということで、何回かのシリーズで、ExcelVBAによるマクロの動作状況をログファイルに残す方法をお伝えしたいと思います。

以下記事で紹介しているOpenやCloseなどを使っても実現できるのですが、追々ファイルが存在しなかったときの処理も入れることを想定して、より扱いやすいFileSystemオブジェクトを使う方法にて紹介していきます。

エクセルVBAでテキストファイルに書き出す最も簡単なプログラム
エクセルVBAでは様々なテキストファイルを生成できますが、今回はその中でも最も簡単な拡張子txtのテキストファイルをエクセルシートのデータを元に出力する方法についてお伝えしています。

初回の今回は、FileSystemオブジェクトを使ってログファイルに書き出す最も簡単なプログラムを紹介します。

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

FileSystemオブジェクトとその生成と破棄

FileSystemオブジェクトはファイル、フォルダ、ドライブなどを操作するためのオブジェクトです。

なんで、ログファイルの書き込みにFileSystemオブジェクトを使うねんと思われるかも知れませんが、大丈夫です。

FileSystemオブジェクトはログファイル(つまりテキストファイルですが)の書き込みもできちゃう優れもののオブジェクトなのです。

使用する際は、オブジェクトの生成が必要になりますので、以下プログラムがベースとなります。

Sub FSOを使う()

Dim objFso As Object
Set objFso = CreateObject("Scripting.FileSystemObject")

'処理

Set objFso = Nothing

End Sub

CreateObjectで生成して、最後は破棄をします。

詳細については以下記事に書いていますので、合わせてご覧下さいね。

【エクセルVBA】FileSystemオブジェクトの基本と簡単にフルパスを生成・分解する方法
FileSystemオブジェクトを使ってエクセルVBAでファイルやフォルダを取り合う使う方法。今回は、FileSystemオブジェクトの基本と、ファイルのフルパスを簡単に生成・分解する方法ついてお伝えします。

テキストファイルにログを記録するプログラム

それで今回ですが、例えば、エラーが発生したときのことを想定して

  • タイムスタンプ
  • 「エラーが発生しました」

とだけログファイルに蓄積して残していくプログラムを紹介したいと思います。

前提として、既にファイル「error.log」は空のファイルとして存在しているものとします。

フォルダの構成はこんな感じです。

エクセルマクロファイルとログファイル

そして、マクロとして「ログファイル.xlsm」に仕込むVBAプログラムはこちらです。

Sub writeLog()

Dim objFso As Object
Set objFso = CreateObject("Scripting.FileSystemObject")

With objFso.OpenTextFile(ThisWorkbook.Path & "\error.log", 8)

    .WriteLine Now & vbTab & "エラーが発生しました "
    .Close

End With

Set objFso = Nothing

End Sub

あら、簡単そうじゃないですか?

上記ベースから追加になったのは、6行目からの4行だけです。

以下、解説していきますね。

OpenTextFileメソッドでテキストファイルとしてファイルを開く

まず6行目の部分ですが、ログファイル「error.log」を書き込み用として開く処理です。

テキストファイルとしてファイルを開く場合は、OpenTextFileメソッドを使います。

書き方はこうです。

FileSystemオブジェクト.OpenTextFile(ファイルパス, IOモード)

ファイルパスは開くテキストファイルのパスです。フルパスで指定するのが一般的でしょう。

IOモードは以下に表で示すファイルを開くモードを指定します。

定数 内容
ForReading 1 ファイルを読み取り専用として開く
ForWriting 2 ファイルを書き込む専用として開く
ForAppending 8 ファイルの最後に追加して書き込む用として開く

今回は「error.log」にずっと蓄積をすることを想定していますので、「8」を指定しています。

なお、OpenTextFileメソッドで開いたファイルはTextStreamオブジェクトとして取り扱いが可能になります。

WriteLineメソッドでテキストファイルに一行書き込む

次に8行目ですが、開いたTextStreamオブジェクトに一行書き込む処理です。WriteLineメソッドを使います。

書き方はこちら。

TextStreamオブジェクト.WriteLine 文字列

これでTextStreamオブジェクトに文字列を書き込んだ上で改行をします。

プログラムでは、Nowで書き込み時点の日時にTabを挿入して「エラーが発生しました」というテキストを文字列として指定しています。

Closeメソッドでテキストファイルを閉じる

Closeメソッドは開いたTextStreamオブジェクトを閉じます。

TextStreamオブジェクト.Close

開いたなら忘れずに閉じましょう。

ログファイルへの出力結果

上記プログラムを二回実行すると、error.logは以下のような内容になります。

エクセルVBAで出力されたログファイル

無事にタイムスタンプとメッセージが出力されていますね。

まとめ

エクセルVBAでFileSystemオブジェクトを使ってログをテキストファイルに出力する最も簡単なプログラムを紹介しました。

OpenTextFileメソッド、WriteLineメソッド、Closeメソッドの3つでした。

次回は、error.logファイルが存在しなかったときに、ファイルを作成するという処理を追加したいと思います。

どうぞお楽しみに!

【GAS】スプレッドシートをPDFにしてGmailで送付する方法

$
0
0

みなさん、こんにちは!
タダケン(@tadaken3)です。

前回は、作成したグラフを画像として、Gmailで送付する方法をお伝えしました。

【GAS】レポート共有も効率よく!作成したグラフをGmailで送る方法
Google Apps Scriptを使って、作成したグラフをメールで送付するテクニックを紹介します。初心者の方でもグラフ作成から、メールでの共有まで、自動化することができるようになります。

今回は、そこから一歩進んで、スプレッドシート全体をPDFにして、Gmailで送付する方法をお伝えします。

前回のおさらい

前回のコードは確認しましょう。
前回はChartオブジェクトに対して、getBlobメソッドで、グラフの画像を取得しましたね。
そして、GmaillAppのsendEmailメソッドで画像を送信しています。

function createChart() {
  var mySheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("sheet1");
  var range = mySheet.getRange("A1:C6");
  var chart = mySheet.newChart()
              .addRange(range)
              .setPosition(1,5,0,0)
              .asColumnChart() 
              .setOption('title', '野菜の産地別販売数')
              .setOption('titleTextStyle' ,{color: '#545454', fontSize: 20})
              .setOption('legend', {position: 'top', textStyle: {color: '#545454', fontSize: 16}})
              .setColors(["darkgreen", "darkgray"])
              .build();
  mySheet.insertChart(chart);

  //グラフの画像を取得
  var imageBlob = chart.getBlob().getAs('image/png').setName("chart_image.png");

  //GMailAppにsendEmailメソッドを実行してメールを送信する
  GmailApp.sendEmail(
        'itsumo-torari-it@gmail.com',//宛先です。※架空のメールアドレスです
        '野菜のレポート',//件名です。
        '添付ファイルをご確認下さい', //本文になります。
        {attachments: [imageBlob]}
        );
}

getAsメソッドでPDFを取得する

メールに添付する場合、スプレッドシートをPDFとして取得する必要があります。
getAsメソッドを使いスプレッドシートをPDFとして取得します。

書き方は

スプレッドシートオブジェクト.getAs(‘application/pdf’).setName(ファイルの名前);

です。

getASメソッドで、「application/pdf」を指定して、PDFとして取得します。
setNameメソッドではファイル名を設定します。
スプレッドシートは、PDFしかサポートされていない点はご注意ください。

function createChart() {
  var mySheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("sheet1");
  var range = mySheet.getRange("A1:C6");
  var chart = mySheet.newChart()
              .addRange(range)
              .setPosition(1,5,0,0)
              .asColumnChart() 
              .setOption('title', '野菜の産地別販売数')
              .setOption('titleTextStyle' ,{color: '#545454', fontSize: 20})
              .setOption('legend', {position: 'top', textStyle: {color: '#545454', fontSize: 16}})
              .setColors(["darkgreen", "darkgray"])
              .build();
  mySheet.insertChart(chart);
  var imageBlob = chart.getBlob().getAs('image/png').setName("chart_image.png");

 //スプレッドシートをPDFとして取得
  var pdf = SpreadsheetApp.getActiveSpreadsheet().getAs('application/pdf').setName("report.pdf"); 
  
    //GMailAppにsendEmailメソッドを実行してメールを送信する
  GmailApp.sendEmail(
        'itsumo-torari-it@gmail.com',
        '野菜のレポート',//件名です。
        '添付ファイルをご確認下さい', 
        {attachments: [imageBlob, pdf]} //添付ファイルとしてPDFを追加します
        );
}

シート単体ではなく、スプレッドシートに対して、getAsメソッドをする点にご注意ください。これでレポートをPDFとしてメールで送ることができました。

実際には、このような形で送付されます。

まとめ

今回は、getAsメソッドを使って、スプレッドシートをPDFで取得する方法をお伝えしました。

これでリッチなレポートを作成して、自動で共有できるようになりましたね。
次回も、グラフについてのテクニックを、お伝えしてきますね。

どうぞ、お楽しみに!

連載目次:GASでデータ分析!グラフを作成してデータの可視化

スプレッドシートを使う業務の中で多いのがデータの集計・分析作業です。データからインサイトを引き出すコツは「可視化」してデータを見えるようにすること。このシリーズではGoogleスプレッドシートでの集計・分析作業の効率を上げるための、Google Apps Scriptのテクニックを紹介します。
  1. Google Apps Scriptでグラフを作成する方法の最初の一歩
  2. 【グラフで説得力をあげる】Google Apps Scriptでグラフの種類を変更する方法
  3. 【複数の要素もひと目で分かる】Google Apps Scriptで積み上げ棒グラフを作成する方法
  4. 【意図を明確に】Google Apps ScriptのsetOptionメソッドでグラフタイトル・凡例を編集する方法
  5. Google Apps ScriptのsetColorsメソッドでグラフの色を設定する方法
  6. 【GAS】レポート共有も効率よく!作成したグラフをGmailで送る方法
  7. 【GAS】スプレッドシートをPDFにしてGmailで送付する方法

エクセルVBAでテキストファイルを新規作成するFileSystemオブジェクトの使い方

$
0
0
write

photo credit: Send me adrift. For you, darling via photopin (license)

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

ExcelVBAによるマクロの動作状況をログファイルに残す方法についてシリーズでお伝えしています。

前回の記事はコチラ。

エクセルVBAでマクロの動作をログファイルに記録する最も簡単なプログラム
ExcelVBAによるマクロの動作状況をログファイルに残す方法を連載でお伝えしています。まず今回はFileSystemオブジェクトを使ってログファイルに書き出す最も簡単なプログラムを紹介します。

指定のテキストファイルにログを書き出す簡単なプログラムを紹介しました。

今回ですが、書き出し先のログファイルが指定のフォルダに存在しなかった場合の処理を追加してみたいと思います。

FileSystemオブジェクトを使っていると、この部分の処理がスッキリ簡単にできちゃいます。

ということで、エクセルVBAでテキストファイルの有無を判定してなければ新規作成する方法についてお伝えします。

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

前回のおさらい

前回作成したプログラムはこちらです。

Sub writeLog()

Dim objFso As Object
Set objFso = CreateObject("Scripting.FileSystemObject")

With objFso.OpenTextFile(ThisWorkbook.Path & "\error.log", 8)

    .WriteLine Now & vbTab & "エラーが発生しました "
    .Close

End With

Set objFso = Nothing

End Sub

マクロを仕込んでいるエクセルファイルと同階層にある「error.log」というテキストファイルに、タイムスタンプとともに「エラーが発生しました」というログを追加するという内容です。

OpenTextFileで「error.log」をTextStreamオブジェクトとして取り扱えるように開き、その最後尾にWriteLineで指定の内容を一行書き込むという流れになります。

ログファイルが存在していない場合

上記のプログラムですが、指定の場所にファイル「error.log」 が存在していない場合は、以下のように「実行時エラー ’53’: ファイルが見つかりません。」というエラーメッセージが表示されます。

エクセルVBAのエラーメッセージ「ファイルが見つかりません」

今回は、ログファイルが存在していようがいまいがログ出力が正しく動作するように、ログファイルの存在を判定する処理を追加していきたいと思います。

ログファイルの存在を判定する

まず、ログファイルが存在するかどうかを判定するには、FileSystemオブジェクトのFileExistsメソッドを使います。

FileSystemオブジェクト.FileExists(ファイルパス)

ファイルが存在していればTrue、そうでなければFalseが返ります。

以下記事で詳細お伝えしています。

【エクセルVBA】FileSystemオブジェクトでファイルやフォルダが存在するかを判定する
エクセルVBAのFileSystemオブジェクトでファイルやフォルダの操作をする方法をお伝えしています。今回はFileExists、FolderExistsメソッドでファイル・フォルダの存在を判定します。

ですから上記のプログラムの5行目以降に

If Not objFso.FileExists(ThisWorkbook.Path & "\error.log") Then
    'ファイルを新規作成する処理"
End If

を挿入すれば良いということになります。

あとはファイルを新規作成する処理が必要ですね。

CreateTextFileメソッドでテキストファイルを新規作成する

FileSystemオブジェクトではテキストファイルを新規で作成することもできます。CreateTextFileメソッドです。

書き方はこちら。

FileSystemオブジェクト.CreateTextFile(ファイルパス)

ファイルパスはファイル名までを指定します。

以上をまとめると、全体のプログラムは以下のようになりますね。

Sub writeLog()

Dim objFso As Object
Set objFso = CreateObject("Scripting.FileSystemObject")

Dim strPath As String
strPath = ThisWorkbook.Path & "\error.log"

With objFso
    If Not .FileExists(strPath) Then
        .CreateTextFile (strPath)
    End If
    With .OpenTextFile(strPath, 8) '8:ForAppending
        .WriteLine Now & vbTab & "エラーが発生しました "
        .Close
    End With
End With

Set objFso = Nothing

End Sub

同じファイルパスが何度も出てくるので変数にまとめたのと、Withステートメントを使ってobjFsoでくくりました。

実行しますと、ファイルが存在していない場合でも、以下のようにファイル「error.log」が生成されて

エクセルVBAでログファイルを新規作成

error.logの中身をエディタで見てみますと、以下のようにしっかりとログが記録されます。

エクセルVBAでテキストファイルにログを書き出した

まとめ

エクセルVBAのFileSystemオブジェクトを使って、ログファイルが存在しているかを判別して、ない場合は新規作成をする方法についてお伝えしました。

  • ファイルの存在を判定するFileExistsメソッド
  • 新規のテキストファイルを作成するCreateTextFileメソッド

がポイントです。FileSystemオブジェクト、便利ですね。

さて次回ですが、エラーログを記録する方法についてお伝えしたいと思います。

エクセルVBAでエラーが発生したらエラーの内容をログファイルに書き出すプログラム
エクセルVBAでエラーが発生したときにそのエラーの内容をログファイルに書き出すプログラムを紹介します。On Error Gotoステートメントと、Errオブジェクト、そしてログファイルへの書き出しです。

どうぞお楽しみに!

連載目次:エクセルVBAでマクロの動作状況をログファイルに残す方法

マクロの動作状況やエラーの発生などをログファイルに記録しておきたいときありますよね。本シリーズではFileSystemオブジェクトを使ってログをテキストファイルに書き込む方法についてお伝えしていきます。
  1. エクセルVBAでマクロの動作をログファイルに記録する最も簡単なプログラム
  2. エクセルVBAでテキストファイルを新規作成するFileSystemオブジェクトの使い方
  3. エクセルVBAでエラーが発生したらエラーの内容をログファイルに書き出すプログラム
Viewing all 2078 articles
Browse latest View live


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>