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

徹底比較!ChatWork・IT弁護士が愛用するペーパーレスのためのクラウドツール

$
0
0
cloud

photo credit: Country Road via photopin (license)

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

先日「クラウドサインとチャットワークでペーパーレス」セミナーに参加してきました!

第1弾のレポート、クラウド契約サービスのクラウドサインについてのレポートはこちら。

さらば紙の契約書!クラウドサインによるペーパーレス契約による3つのメリット
クラウドサインは契約締結と契約書保管をクラウド上で行えるサービスです。今回はセミナーで学んだ、クラウドサインとは何か、またその使い方、3つのメリット、そしてその信頼性についてレポートをしたいと思います。

今回は第2弾のレポートになります。

後半は株式会社ChatWorkの河野様ファースト法律事務所の藤井弁護士のお二人のセッションで、ペーパーレスのためにそれぞれがどのようなクラウドサービスを、どのような目的で使われているのかをお話されていました。

今回はChatWork・IT弁護士が愛用するクラウドツールの比較まとめです。

では、よろしくお願いいたします。

ChatWork社が使っているクラウドツール

まずChatWorkがどのようなクラウドツールを使われているかです。

有名な話ですが、ChatWork社には電話もないですし、営業担当もいません。

今回の主題である「紙」も存在しませんし、それを補完する引き出しもない、というお話です(ティッシュボックスはさすがにあるそうですw)。

どのようにペーパーレスを実現しているかというと、様々なクラウドサービスを使って実現をされています。

実際にChatWorkさんで使っているクラウドサービス、お話頂いたものをまとめますとこうなります。

資料の保管・共有はGoogleドライブ

資料の保管と共有はGoogleドライブを使われています。チャットワークはGoogleドライブととても相性が良いですからね。

以下記事で紹介しているように、チャットワークからスプレッドシートをすぐにプレビューまたは編集ができたりします。

【幹事必見!】スプレッドシートの入力が完了したらチャットワークに自動で通知する方法
複数人でスプレッドシートを入力している際に入力完了をチャットワークに自動で通知できたら便利ですよね。今回は、Google Apps Scriptを使ってた力完了通知ツールの作り方について解説をします。

例えば、取引先への訪問時に資料を忘れてしまった…!というときも、Googleドライブに保管していればiPhone使ってセブンイレブンで印刷しちゃったりできます。

また、そもそも紙の資料を配布してしまうと、せっかくプレゼンしているのにさっさと読み進まれてしまう…という問題もあるので、画面を見せてプレゼンする場合もおありのようですよ。

eFaxとSansanについて

ChatWorkさんのようにある程度大きい会社になると、eFaxやSansanなどのサービスを使えるようになります。

毎月定額で一定の金額がかかるサービスです。

eFaxは毎月1,500円かかります。150枚までの無料送受信がついているので、けっこうな枚数を送る企業であれば全然割安ですよね。でも、弊社はほとんどFaxを送受信する機会がありませんので、割高についてしまいます。

Sansanはスキャナレンタルの台数とアカウント数によって決まりますが、以前お伺いしたときは月間数万円というお見積だったと思います。名刺管理のためにそこまでは払えないっす。

クラウドデータベースサービスのkintoneとかもそうなのですが、組織が一定の規模以上になるとクラウドツールの選択肢も一気に増えてくるわけですね。

チームプレイ…してみたいです。

IT弁護士が使っているクラウドツール

藤井弁護士はIT弁護士としてもとても有名な方で、クラウドツールを使いこなして世界を旅しながらノマドワークをされています。

この1年でたしか10回以上に海外に行かれていますが、その間もちゃんと顧問弁護士としてのお仕事をされているとのこと…すごいです。そしてうらやましい。

当然、出先ですからPC一つでいつでもどこでも仕事ができる環境を整えられています。もちろん、紙を持ち歩くわけにはいきません。

そんな藤井弁護士が使われているクラウドサービスはこちらです。

EvernoteとGoogleドライブの使い分け

資料の保管にEvernoteとGoogleドライブを両方使われているということで、質問をさせて頂きました。

EvernoteとGoogleドライブはどう使い分けをされているのでしょうか?

藤井さんのお答えとしては

  • Googleドライブ →なんでもかんでも入れておくところ
  • Evernote →厳選したものを入れておくところ

とのこと。

Evernoteですが「よくある質問への回答集」などのように、よく取り出すものをタグ付けして入れておくそうです。Evernoteは選択するとすぐに中身を見ることができるので、そこも便利とおっしゃっていました。

顧問弁護士ならではの活用法ですね。

ちなみに”なんでもかんでも”いれておくクラウドストレージは以前はDropboxを使われていらしたそうなのですが、他アプリケーションとの連携を考えてGoogleドライブに移行されたそうです。

クラウドを使うとお客様も満足する

クラウドサインにせよ、チャットワークにせよ、各種クラウドサービスを使うことは自分自身だけではなくて、お客様の満足度を上げることができると強調をされていました。

弁護士さんの話は一般的にはわかりづらいということで、チャットワークであれば

  • 気軽に
  • いつでもすぐに
  • 移動せずにどこでも
  • 履歴が残り
  • わかるまで話せる

といったやり取りをするだけで、満足度が大きく跳ね上がるとのこと。

プランノーツが使っているクラウドツール

クラウドツールの比較…面白いですね。

僭越ながら、最後に弊社が使っているクラウドツールについてお伝えしておきます。

主にバリバリ使っているものですと

という感じです。

クラウドサインについては、前回記事でもお伝えした通り、個別契約を含めてもっとガンガン使いたいと心に誓ったところです。

DropboxとGoogleドライブ、Evernoteの使い分け

資料の保管の仕方と各ツールの使い分けでいうと弊社の場合は

  • Dropbox →なんでもかんでも入れておくところ
  • Evernote →メモ、ワークスペース
  • Googleドライブ →スプレッドシートやGASが必要なときに使う

という使い方です。

仕事としてExcelとVBAが多いのでどうしてもローカルで物理的なファイルをいじらざるを得ないケースが多いのです。その結果がそのままシームレスにクラウドに同期されるDropboxの挙動が好ましいということになります。

またローカル環境でWebサイトを作っているときもDropbox内で作るのでバックアップも常にきいている状態です。

Evernoteは私の場合はワークスペースという言葉がマッチしています。アイデアや資料を組み合わせて、資料やブログやプロジェクトを組み立てていくスペースという使い方です。

ブロガー必見!いつの間にか記事ネタが完成するEvernoteの使い方
お仕事でもブログ作成でももうなくてはならないオンラインメモサービスEvernote。今回はその様々な活用法の中から、いつの間にかブログの記事ネタができちゃう的なEvernoteの活用法を紹介します。

前述のとおり、「よくある質問への回答集」的な使い方はとても参考になりましたので、今後絶賛使わせて頂ければと思います。

まとめ

以上、ChatWorkさん、藤井弁護士の使われているクラウドツールのまとめでした。

大枠は近いにしても、少し異なる部分をほじくってみると面白いものですね。

今はそれぞれに合ったクラウドツールが比較的自由に、そして気軽に選べるようになってきました。

ぜひ皆さんも好みのクラウドツールを見つけて、ペーパーレスと快適な仕事環境をゲット頂ければと思います。


カラム数を指定してBootstrapのグリッドシステムを使ったHTMLを生成するエクセルVBA

$
0
0
grid

photo credit: Urban Grids via photopin (license)

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

Boostrapを使ったWebサイトのHTMLコードをエクセルVBAで自動生成するプログラムを作っています。

方針としては

  • Bootstrapを使ったWordPressによる企業向けサイト
  • service,plan,aboutの3つのセクションによるトップページ
  • エクセルの入力情報から自動生成する

で進めております。

前回はこちらの記事。

【エクセルVBA】シートの開始行や行数の変更があってもちゃんと動く繰り返し文の書き方
エクセルではワークシートの運用上、行の挿入や行の追加が発生することが多々あります。今回はエクセルVBAでワークシートの開始行や行数の変更があっても繰り返し処理がちゃんと動くプログラムの作り方です。

aboutセクションの会社概要の部分のテーブルを表現するHTML部分をその行数に関わらず自在に生成してくれます。

さて、今回はBootstrapの主役とも言ってよいグリッドシステムがテーマです。

serviceセクション、planセクションはそのグリッドシステムを使っていますが、現状はまだそのカラム数は可変ではありません。

そこで今回はカラム数を指定することで、グリッドシステムを使ったセクションのHTMLソースを自在に生成するVBAプログラムを作っていきます。

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

Bootstrapグリッドシステムの書き方

多くのWordPressテーマやHTMLテンプレートのベースとして大人気のCSSフレームワークBootstrap

CSS初心者の強い味方!Bootstrapで簡単レスポンシブサイト制作
CSS初心者でもレスポンシブサイトが作れる!導入がややこしいBootstrapの設定を最小の記述で終わらせて実践方式で触ってみましょう!今回は導入前の予備知識の解説です。

その中でもグリッドシステムはスマホ時代を象徴する強力な仕組みです。

グリッドシステムでは画面を12分割して、そのいくつ分かを指定することで簡単にカラム組みができます。ですから、12の約数であれば3つでも4つでも6つでもいい感じに組むことができるというわけです。

例えば、縦に3つ並ぶカラムを作りたければ

<div class="row">
    <div class="col-sm-4">カラム①の内容</div>
    <div class="col-sm-4">カラム②の内容</div>
    <div class="col-sm-4">カラム③の内容</div>
</div>

とするだけでOKです。

  • 行にするエリアをclass=”row”で囲む
  • それぞれのカラムをclass=”col-画面幅-グリッド数”で囲む

という書き方です。

画面幅については本記事ではsmを使います。詳細は割愛しますので、ご興味あればこちらをご覧ください。

お題:カラム数を指定してエクセル表からHTMLソースを出力

今回はこちら弊社サイトのserviceセクション

プランノーツサイトのserviceセクション

のHTMLを生成していきたいと思いますが、これをHTMLソースで表現すると

<section id="service" class="section">
    <h1 class="section-title">service<p class="small">プランノーツが提供する主なサービスをご紹介します。</p></h1>
    <div class="row">
        <div class="col-sm-3">
            <h2 class="h4 text-center">お仕事効率化コンサルティング</h2>
            <div class="thum"><img src="http://placehold.it/300x225" /></div>
            お仕事の生産性を上げるための改善点の発見と解決のお手伝いを致します。
        </div>
        <div class="col-sm-3">
            <h2 class="h4 text-center">システム・WEBサイト開発</h2>
            <div class="thum"><img src="http://placehold.it/300x225" /></div>
            VBAやGASによる自動化ツールやWordPressによるWEBサイトの制作を致します。
        </div>
        <div class="col-sm-3">
            <h2 class="h4 text-center">電子書籍コンサルティング</h2>
            <div class="thum"><img src="http://placehold.it/300x225" /></div>
            電子書籍コンテンツの制作や事業改善などについてのお手伝いを致します。
        </div>
        <div class="col-sm-3">
            <h2 class="h4 text-center">研修・セミナー・スクール</h2>
            <div class="thum"><img src="http://placehold.it/300x225" /></div>
            企業・個人事業主向けのExcelVBA、WordPressなどをお教えします。
        </div>
    </div>
</section><!-- service -->

となります。

うっかりカラム数を3つに変えたくなった場合は

  • 不要なカラムのdiv要素よ削除
  • 残ったカラムグリッド数を3から4に変更

と、ちょっと面倒です。しかもどこかを修正漏れしそう…

ということで、カラム数も自在に変更できるHTML生成プログラムを作っていきたいと思います。

カラム数を変更可能なHTML生成VBAプログラム

ベースとしてはこちらの記事で紹介しているプログラムを使いますので、よろしければこちらも見ながらご覧ください。

エクセルVBAでインデントや改行を入れながらHTML文を追加していく便利関数を作る
エクセルVBAで自動でHTML生成シリーズです。今回はインデントや改行コードを入れながらHTML文を追加していく処理を関数化させつつ、Planセクションを生成するプログラムを作っていきます。

そして今回、まずエクセルシートをこのように準備しました。

serviceセクションのエクセルシート

各カラムに入力する内容は7~12行に入力します。6カラムまで対応できるようにしています。

また生成するカラム数をB4セルでリスト形式で1,2,3,4,6のいずれかから選択できるようになっています。なお、B4セルには「serviceカラム数」という名称をつけています。

このシートからHTMLを生成するプログラムはこちらになります。

'----------------------------------------------------------------------------------
'名称 : createServiceSection
'機能 : serviceセクションのHTMLを生成する
'引数 : テキスト要素が記載されているワークシート
'返り値 : serviceセクションのHTMLソース
'----------------------------------------------------------------------------------
Function createServiceSection(ByVal ws As Object) As String

Dim str As String
str = ""

'section開始タグ
str = addHTML("", 0, "<section id=""service"" class=""section"">")

'***** セクションタイトルB1,セクション概要B2 *****
str = addHTML(str, 1, "<h1 class=""section-title"">" & ws.Range("B1").Value & "<p class=""small"">" & ws.Range("B2").Value & "</p></h1>")

'***** カラム *****
Dim numColumns As Long
numColumns = ws.Range("serviceカラム数").Value 'カラム数

'class="row"の開始タグ
str = addHTML(str, 1, "<div class=""row"">")

Dim i As Long
For i = 7 To 6 + numColumns '指定カラム分繰り返し

    'class="col-sm-x"の開始タグ
    str = addHTML(str, 2, "<div class=""col-sm-" & 12 / numColumns & """>")

    'タイトルB列
    str = addHTML(str, 3, "<h2 class=""h4 text-center"">" & ws.Cells(i, 2).Value & "</h2>")

    'サムネイル画像(枠のみ)
    str = addHTML(str, 3, "<div class=""thum""><img src=""http://placehold.it/300x225"" /></div>")

    'テキストC列
    str = addHTML(str, 3, "" & ws.Cells(i, 3).Value & "</p>")

    'class="col-sm-x"の閉じタグ
    str = addHTML(str, 2, "</div>")

Next i

'class="row"の閉じタグ
str = addHTML(str, 1, "</div>")

'section閉じタグ
str = addHTML(str, 0, "</section><!-- service -->") & vbCr

createServiceSection = str

End Function

まず20行目でカラム数を取得します。

カラム数によって26行目のFor~Nextの繰り返しの回数と、29行目で指定するグリッド数を指定してあげればOKですね。

グリッド数は12÷カラム数で算出できます。

実行結果

こちらで出力した結果をブラウザで確認してみますと、2カラムの場合は

2カラムの場合の出力HTML

6カラムにした場合は

6カラムの場合の出力HTML

と表示されます。

まとめ

以上、カラム数を指定してBootstrapのグリッドシステムを使ったHTMLを生成するエクセルVBAプログラムを作成しました。

ちょこっといじるだけですぐに対応できちゃいました。

またブラッシュアップのアイデアが浮かびましたら紹介できればと思います。

どうぞお楽しみに!

これまで開催した全てのセミナーの振り返り、発見したこと、そしてこれから

$
0
0

セミナー終了

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

来週開催予定のこちらのセミナー。

なんと開催10日前なのですが定員に達してしまいました…!

初めての経験で…とっても嬉しいです!!

昨年末から半年ほど、あの手この手で色々なセミナーを毎月1~2講座、コツコツと続けてまいりました。

良かったこともあり、良くなかったこともあり、まだ半年ではありますが、継続すると色々な気付きがあるものです。

今回は、これまで開催したセミナーについての振り返り発見したことについてお伝えできればと思います。

セミナー開催半年の歴史と考察

今まで開催したセミナーをババーンとまとめてみましたので、どうぞご覧ください!

日程 テーマ レベル 価格 申込数 備考
2015/12/26 Excel 3000 4
2016/01/24 VBA ★★ 4500 4
2016/01/24 WordPress 3000 7
2016/02/20 データ分析 ★★ 4500 1
2016/02/20 SEO ★★ 4500 4
2016/03/27 WordPress 4500 4
2016/03/27 IT活用 2500 3
2016/05/01 IT活用 2000 4 板橋開催
2016/05/07 VBA ★★ 4500 3
2016/05/07 WordPress 4500 1
2016/05/29 VBA ★★ 18000 5 6/11と2日間の開催

おお…まとめてみると面白いですね。

5/29の予定も含めますと、11の講座を開催して、のべ40名の方に参加頂いたということになります。ありがたいことです。

この表をみながら、いくつか考察をしてみましたので、どうぞお付き合い下さい。

WordPressセミナーは人気なのか!?

初期のころ開催した2016/1/24にWordPressの初心者向けセミナーですが、非常に人気がありまして、定員10名のところ7名の方にご参加頂きました。

年齢層も20代から50代、男女は半々くらいでしたらから、非常に幅広い層が興味を持って下さいました。

「こりゃ、WordPress人気だぞ…!」

ということで、味をシメて以降さらに2カ月に1回のペースで開催したのですが、参加人数は7名→4名→1名と順調に下降傾向…

理由としては

  1. 内容に対して参加費が高く見えている(最初は\3,000でしたが2回目以降は\4,500)
  2. 開催頻度に新規集客が追い付いていない
  3. たまたま

など色々と考えられるかと。

1,2の仮説をつぶすために、もう一回\3,000でやってみるという手もありますね。

また後述しますが時間数を増やして集中講座にしてみるのもあるかなと思っています。

データ分析セミナーは…人気がなさそう

ビッグデータ、IoT、FinTechとかこれから盛り上がるITの領域を考えた場合に、統計をベースにした分析、データの取り扱いって絶対に重要になってくるはずです。

また、Googleのハル・ヴァリアン博士は

今後10年間で最もセクシーな仕事は統計学者である。

と2009年の時に言っています。ということは2019年まではセクシーということですね。

しかしながら…実際はそこまで日本では関心が高まっていないようです。

以前、株式会社データサイエンス研究所の研修に参加したときも

統計学科のある大学は米国では300校、中国では50校あるが日本には”存在していない”

と嘆かれていました。

弊社が開催した2/20のセミナーではなんとか1名ご参加頂きましたが…危ないところでした。

しばらく良い作戦が思いつくまでは、データ分析については潜めておいたほうがよさそうです。

IT活用セミナーは難しい

弊社としては本当はここが一番盛り上がってほしいテーマなのですが、実際はなかなか難しいです。

結果としては板橋と三鷹で2回開催してなんとか3~4名の参加。

内容的にはライトなのでできるだけ参加費も安めに設定して、たくさんの方に集まって頂きたいのですが、安いからと言ってたくさん集まるというわけではなさそうです。

ただ板橋開催のときは、チャットワークに内容を絞って実施したらなかなか盛り上がったのも事実。

【セミナーレポート】チャットワークを丸々2時間体験するセミナーを開催しました
「お仕事のためのIT活用セミナー~チャットワーク+なんでも相談会~」開催しました!チャットワークだけをテーマに、地元板橋区での開催という二点で初の試み。本記事でレポートをさせて頂ければと思います。

「IT」というふんわりしたワードではなくて、商品名とか固有名詞で的を絞って訴求していくほうが良いかもなどと思っています。

また、他の企業とコラボして集客面での相乗効果を狙っていくという方法もあるかと思ったりもしています。

集中講座は人気!?

5/29に予定していますVBAセミナーは、6/11と合わせて2日間で集中的に学ぶという講座になっています。

単価は高くなりますし、2日分の予定を押さえて頂く必要はあるというハードルはあったのですが、ふたを開けてみると、締め切りまで十分に余裕がある段階で売り切れとなりました。

皆さん価格は当然ご覧になられているとは思いますが

  • 2日で集中的に学ぶ2万円近くのセミナーのほうが課題解決が確実に見える
  • 一方で数千円で3時間の一発のセミナーは中途半端と感じられている

のかも知れないという、今までの足跡を覆す恐ろしい仮説が浮上していきています。

これに関しては、試すのも会場的にリスクがあったりするのですが、一度試してみる価値はあるかと思います。

WordPressとか、Google Apps Scriptとか…。怖い…、でもやってみたい…。

まとめ

まだまだ数が少ないのであくまで仮説から出ない部分も多いのですが、なんとなくまとめると

  • 価格が安いからといって集まりやすいわけではない
  • それよりも明確に課題解決ができると思えるか、が大事そう
  • 集中講座は別のテーマでもやってみたい
  • コラボ企画はやってみたい

などが今のところの考察とこれからやってみたいことです。

とにかくトライ&エラーですね。やってみないとわからないことがたくさんあり、分析してみないと見えないことがたくさんあります。

これからもIT×仕事というテーマで皆さまの役に立てるセミナーの企画実行していきたいと思います。

もし、こんなセミナーやってほしい!というご要望があれば、かなり前のめりに検討をして実施しますので、どしどしご意見を下さればと思います。

問い合わせフォーム

チャットワークでコンタクト

Bootstrapでレスポンシブなカラム作成 ブレイクポイントとカラム数の指定方法をマスター

$
0
0

カラム設定-アイキャッチ

初心者向けBootstrapのご案内、連載6回目の記事です。
前回はBootstrapをカスタマイズする際に知っておくべきCSSの優先ルールについて触れました。

Bootstrapをカスタマイズしよう!CSS調整のコツはスタイルの優先順位だ!
BootstrapのCSSをカスタマイズする方法をジャンボトロンを例に解説。変更の為には避けて通れない、CSSの優先順位についても説明しています。
※(CSSの優先順位についてはさらに別記事で、もっと詳しく解説しています)

今回は、Bootstrapの機能でもっとも便利なカラム分け部分、グリッドシステムの使用法を説明します。

3カラムサンプル

上記のように3つのブロックに分かれたレイアウトをカラム分けと呼びます。1カラム=1列ですので、上画像は3カラムレイアウトですね。

そしてブラウザの画面が狭くなると、レイアウトは下図のように変化します。

縦積み1列

このように「大きな画面では3カラム、小さな画面サイズでは1カラム縦積みに変化」というレイアウトを、Bootstrapでは簡単に組むことができます。

Bootstrapのカラム分けは、ルールさえ覚えてしまえばとても簡単です。
最低限のポイントのみに絞って解説しますので、ここでカラム分けの基本形をさくっとマスターしてください。

3カラムから1カラムに変化するレスポンシブデザインのサンプル

それでは早速、上図サンプルと同じページを作成していきましょう。これまでの連載同様、index.htmlファイルを一つ作って、以下を丸々コピペしてください。

完成形のソースはこちらです。

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>ページタイトル</title>
<!--CSS -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" />
<!--JS -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>
<!--自作CSS -->
<style type="text/css"><!--
body {background-color: #fff; margin-top: 20px;}
    .o-3column h2 {text-align: center; font-size: 28px; margin-bottom: 10px;}
    .o-3column p { margin-top: 10px;}
    .o-3column .col-md-4 { padding: 0 20px;}
--></style>
</head>


<body>

<!-- ▼ 3カラム  -->
    <div class="container">
      <div class="row o-3column">
        <div class="col-md-4">
          <h2>3カラム見出しテキスト</h2>
          <img src="mini.jpg" class="img-responsive"></p>
            テキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキスト
        </div>
         <div class="col-md-4">
          <h2>3カラム見出しテキスト</h2>
          <img src="mini.jpg" class="img-responsive">
            テキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキスト
        </div>
        <div class="col-md-4">
          <h2>3カラム見出しテキスト</h2>
          <img src="mini.jpg" class="img-responsive">
            テキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキスト
        </div>
      </div>
    </div>
<!-- ▲ 3カラム  -->

</body>
</html>

※ファイルを保存する際エンコードの種類は必ず「UTF-8」にしてください。

使用している画像は、コチラです。ダウンロードしてindex.htmlと同階層に置いてください。

以上でサンプルページが完成しました。

実際にブラウザで開き、横幅を狭めて3カラム部分がどのように変化するか確かめてみてください。

ブラウザを狭めると、3カラムから1カラム縦積みへ

※index.htmlに、どのようにBootstrapを読み込んでいるのかに関しては以前の記事で説明しています

カラム部分のソースをチェック

では3カラム部分のソースはどのように書かれているか、確認してみましょう。

<!-- ▼ 3カラム  -->
    <div class="container">
      <div class="row o-3column">
        <div class="col-md-4">
          <h2>3カラム見出しテキスト</h2>
          <img src="mini.jpg" class="img-responsive">
            テキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキスト
        </div>
         <div class="col-md-4">
          <h2>3カラム見出しテキスト</h2>
          <img src="mini.jpg" class="img-responsive">
            テキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキスト
        </div>
        <div class="col-md-4">
          <h2>3カラム見出しテキスト</h2>
          <img src="mini.jpg" class="img-responsive">
            テキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキスト
        </div>
      </div>
    </div>
<!-- ▲ 3カラム  -->

図解するとこうなっています。

各クラス指定

「container」「row」「col-md-4」がBootstrapで定義されているクラスですね。この内「container」については、以前の連載で詳しく解説しています。

さらにカラム部分だけを抜き出すと……

上記のソースからさらにカラム指定に関わらないh2やpタグ、自前のクラス指定などを削除してみましょう。

<div class="row">
<div class="col-md-4"> </div>
<div class="col-md-4"> </div>
<div class="col-md-4"> </div>
</div>

非常にシンプルになりました。それではこのソースの内容について説明していきます。

カラム分けのポイント「row(行)+col(列)]

カラム分けを行う場合、「row」「col-md-4」の2つをセットで使います。この2つのクラスは、それぞれ下記のような役割を持っています。

●「row」= 行 
●「col-md-4」= Column = 列

覚え方のコツとしては、「row(行)」でココはこれからカラム分けをするですよーと宣言して、「col-md-4(列)」でカラムの分割数を指定する、というイメージで捉えて下さい。

カラム分割の指定のしかた

さて、「row(行)」はシンプルなのに、列を指定する「col-md-4」は何やら「-」で繋がっていてややこしそうですね。

このクラスは3つの意味に分解できます。

① col = columnの略
② md  = Bootstrapで定義している、ブレイクポイントの指定
③ 4 = カラムをどう分割するか指定するための数字

大事なのは②と③です。それぞれの用法を説明します。

② ブレイクポイントの指定方法

実際のサンプルページで確認していただいた通り、この3カラムは狭い画面になると1カラムへ変化します。

この変化するポイント(ブラウザ画面横サイズ)を指定しているのが「md」部分になります。

指定ポイントの定義は以下のようになっています。
 

Class名 .col-xs-* .col-sm-* .col-md-* .col-lg-*
ブレイクポイント 切り替えなし 768px 992px 1200px
サイズ感 スマホ タブレット PC PC大画面

 

サンプルの「col-md-4」の場合、大きな画面では3カラムで表示されますが、ブラウザの横幅が992pxになったとたん、1カラムの縦積みに変化します。

これを「col-sm-4」に変更すると、切り変わるポイントは768pxになります。

「col-xs-4」を指定すると切り替えは無くなり、どれだけブラウザサイズを狭めても、3カラムのまま表示され続けます。

★覚えておくポイント


◆「lg・md・sm・xs」というブレイクポイントの定義がある。
◆指定したブレイクポイント以下のサイズになると、とにかく1カラム縦積みになる。
◆「xs」だけ例外で、指定したカラム数のまま表示されつづける

③ カラム分割数の指定方法

次は「col-md-4」の数字部分についてです。

Bootstrapのカラムというのは、あらかじめ1行を12列に分割してあります。
この分割済みの12列を「幾つづつまとめる」と定義するのが、カラム数の指定方法です。

再度サンプルのソース(簡略版)を見てみましょう。

<div class="row">
<div class="col-md-4"> </div>
<div class="col-md-4"> </div>
<div class="col-md-4"> </div>
</div>

使用しているクラス「col-sm-4」は、「12ある列のうち4列を1セットにして1カラムにするよ!」という意味になります。

サンプルでは、「4列で1カラム」なdivを3つ配置していますね。4列☓3個で12列が綺麗に分割されています。

3カラムサンプル

◆均等に2分割した例

<div class="row">
<div class="col-md-6"> </div>
<div class="col-md-6"> </div>
</div>

6+6分割

◆不均等に2分割した例

<div class="row">
<div class="col-md-8"> </div>
<div class="col-md-4"> </div>
</div>

8+4分割

このように「12列を幾つづつまとめるか」を「col-md-数字」の部分で指定しますので、「row」の中に配置した「col」の数字の合計が12を超えると、1行に収まりきれず、カラム落ちが発生します。

合計12以上になるとカラム落ち発生

★覚えておくポイント


◆カラム分割は各カラムの数字が合計すると12になるよう指定する。
◆合計12を超えるとカラム落ちが発生する

Bootstrapでカラム作成のまとめ

以上がBootstrapでグリッドシステムを用い、カラムを作成する方法の一例となります。

ポイントをまとめますね。

◆「row(行)」と「col-●●-数字(列)」をセットで使う
◆「col-●●-数字」の「●●」部分はブレイクポイントの指定で「lg・md・sm・xs」のどれかが入る
◆「col-●●-数字」の「数字」は、カラム数の指定で、元々12分割してある列をいくつごとにまとめて1カラムにするか、という考え方をする。

このような点を押さえておけば、レスポンシブなカラムを用いたページをさくさくと作ることができますね。

自前でこうしたCSSを一から書くと大変ですので、上手く活用できるようになると、ページ制作がとてもはかどりますよ。

Bootstrapのカラム分けは、指定を組み合わせるともっと複雑なことができるようになります。是非とっかかりの基礎編として、サンプルを作成してみてください。

連載目次:初心者向け!Bootstrapで簡単レスポンシブサイト制作

  1. CSS初心者の強い味方!Bootstrapで簡単レスポンシブサイト制作
  2. CDNを利用して最速お手軽にBootstrap導入しよう!サンプル付き実践編
  3. Bootstrapで横幅いっぱいに画像を表示しよう!ジャンボトロン(jumbotron)の設置方法
  4. Bootstrapでコンテンツを中央寄せするcontainerの役割を覚えよう!
  5. Bootstrapをカスタマイズしよう!CSS調整のコツはスタイルの優先順位だ!
  6. Bootstrapでレスポンシブなカラム作成 ブレイクポイントとカラム数の指定方法をマスター

TrelloとGoogleカレンダーで自らの予定と行動を上手にコントロールするタスク管理

$
0
0

control

フリーランスの場合は出勤時間や勤務場所が決まっていませんし、管理してくれる上司や同僚もいませんので、自らを律するというのが非常に重要になってきます。

今日はやる気ないな~

なんてゴロゴロしていたら、あっという間に死亡フラグが立ちます。

またフリーランスの場合は、コツコツと勉強を重ねて仕事の幅を広げたり、ブログを書いて集客力を高めたりといった、継続的に積み重ねるタイプの行動も求められます。

気分や、天気や、周囲の騒音に惑わされることなく、決めた通りに自らの行動をコントロールしていく必要があります。

そんなときもITは役に立ちます。

今回はTrelloとGoogleカレンダーの組み合わせで自らの予定と行動を上手にコントロールするタスク管理の方法がありますので紹介をしたいと思います。

Trelloでいつでもタスク全体の様子を把握

Trelloはカンバン方式のタスク管理ツールです。

カードを移動させて各タスクが作業前なのか、作業中かなのかなどのステータス管理を行います。

自分だけでももちろん、チームでタスクがたくさんあるときでも、タスクの状態をパッと見で把握することができます。もちろん、スマホアプリもあります。

チームでのタスク状況が一目瞭然!初心者向けTrelloの使い方と解説
チームのタスクの状況が一目瞭然でわかるカンバン方式を採用したクラウド型のタスク管理ツールTrelloについて登録の仕方、使い方、そしてその特徴とメリットにについてお伝えしたいと思います。

ボードの状況ですが、例えばこんな感じです。

カンバン方式タスク管理ツールtrello

タスクが発生したらToDoに立てて、後述しますが作業開始前にDoingにそのタスクのカードを移動します。

作業が完了したらDoneに移動してそのタスクのカードはお役御免、ということになります。

各タスクの規模間も当然ありますが、ToDoやDoingが数多く溜まり過ぎないように頑張るという感じにはなりますよね。

私はいつもTrelloのタブは開いているようにしています。

カードの移動の際に、全体がパッと見えるので、常にタスクの状況は把握できるというわけです。

タスクを「どれくらいの時間をかけるか」も管理する

Trelloは非常に優れたタスク管理ツールなのですが、それだけでは不十分です。

Trelloも含めて多くのタスク管理ツールは

  • 「何をやるか」
  • 「いつまでにやるか」

は上手に管理できるのですが、「どれくらいの時間をかけてやるか」は上手に管理をすることができません。

だって、我々フリーランスは1時間で稼がなくてはいけない売上が決まっているのです。

ITをなりわいにしているフリーランスの1時間あたりの最低目標売上
ITのフリーランスは、設備もPCくらいなので、そのリソースのほとんどは「時間」です。そして、その使い方が生死を分けます。今回はその時間の使い方として「1時間あたりの最低目標売上を決めておく」についてです。

いくらタスク管理ツールを使っていても、かける時間を気にせずにタスクに着手してしまうと

  • そのタスクにかけるべき時間を大幅に超過してしまう
  • 他のタスクの期限が間に合わなくなってしまう
  • 期限までに余裕があるから手を抜いてしまう

などの問題が発生します。

それを避けるために、Googleカレンダーを併用しています。

定期的な予定は繰り返しの予定でカレンダーへ

どのようにGoogleカレンダーを使うかを説明しますね。

まず、定期的に発生する予定は全てGoogleカレンダーに繰り返しの予定として入れておきます。

私の場合は

  • ランチ(毎日)
  • ディナー(毎日)
  • スポーツジム(週2回)
  • ブログ(毎日)
  • 定期的な仕事(毎週または毎月)

などを入れます。

だいぶ先の予定でも、こんな感じになっています。

Googleカレンダーに定期の予定を入れる

もうこうなると、午前中の2~3時間、午後の6時間くらいしか使える時間はないのだ、というのがビジュアル的にわかります。

着手するタスクを全てカレンダーに予定する

さらに、直近の予定(だいたい向こう1週間程度)に関しては、デスクワークや移動時間、ランチやディナーなど他のイベントもガンガン入れていきます。

具体的には以下のような手順です。

  1. TrelloのToDoにあるうちで近々着手するタスクについて工数を想定してGoogleカレンダーにイベント追加
  2. Googleカレンダーに追加したタスクのカードをToDoからDoingに移動する
  3. タスクを実行する
  4. TrelloのカードをDoingからDoneに移動する
  5. カレンダーの内容を実績に応じて修正

という流れです。

結果として近々のタスクは全てGoogleカレンダーに予定として入ります。

数週間単位でかかる大きめのタスクもちゃんと分解して入れておきます。

実際のカレンダーはこのようになっています。

Googleカレンダーにすべての予定を入れる

もうほとんど埋まっていますよね…だから、新たなタスクを入れられるのは来週以降だな~というのがすぐに判断つきます。

ちゃんと決まっていればちゃんと行動できる

こうすることで、着手漏れは当然なくなりますし、向こう1週間程度の予定がほぼ決まります。

予定がほぼ決まっていると

  • タスクの開始時間に着手したくなる
  • タスクの終了時間を超過すると気持ち悪い

というように力学が働きます。

逆に、予想より早く終わると気持ちが良くなります。

単純なのですが、ちゃんと予定を決めると人はその通りに行動しやすいということなんです。

ちゃんと決まっている予定はカレンダーに入れることができますが、ちゃんと決まっていない予定はカレンダーに入れることができません。

だから全てのタスクをカレンダーに入れるのがオススメというわけです。

カレンダーを実績通りに更新する

なお、作業が完了したときは、その実績通りにカレンダーの予定も動かしておきます。これが作業記録になり、後で分析するときに非常に有用なデータとなります。

こちらの記事で書いてある通りです。

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

これを繰り返すことで、各タスクにかかる時間の精度も上がっていきますよね。

まとめ

TrelloとGoogleカレンダーを使って自らの予定と行動を上手にコントロールする方法についてお伝えしました。

この方法により

  • 予定通りに行動しやすくなる
  • タスク漏れがなくなる
  • 無理な予定を組まなくなる
  • 長期的なタスクもきちんと予定できる
  • 継続的なタスクもさぼらなくなる
  • 予定の精度が高くなる

など数多くのメリットがあります。

フリーランスに限らず、全てのビジネスマンにオススメできる方法です。

TrelloやGoogleカレンダーに関しては、APIやGoogle Apps Scriptを活用してさらに色々とできそうですよね。

日々研究をしていきますので、良いアイデアが出ましたらお伝えしたいと思います。

フリーランスがブラック顧客から身を守るための3つのテクニック

$
0
0

black

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

フリーランスは自由なんだから「ブラック」とは無縁だと思ったら大間違い…最近、そんな記事を見かけました。

そうなんです、フリーランスになっても運悪く「ブラック顧客」に出くわしてしまうことがあります。

私は独立してから1年ほど経ちます。99.9%のお客様とは良いお仕事をさせて頂いていますが、ご依頼のお問い合わせを頂いた中では、私を安く買い叩こうとか、いいように使ってやろう、金を払うのだから何でも言うことを聞くだろう、などといった匂いがプンプンする案件もいくつかありました。

そこで今回は、フリーランスがブラック顧客から身を守るためのいくつかのテクニックをお伝えしたいと思います。

常駐フルタイムの案件は受けない

フリーランスなのに「常駐フルタイム」ってあるの?

と思われる方も多いかも知れませんが、案件として超いっぱいあります。

私もいくつかのフリーランス人材の紹介サービスに登録してみましたが、とあるフリーランス人材の紹介サービスで紹介されたのは、ほぼ全ての案件が常駐フルタイムでした。

金額が大きいので嬉しくて受けちゃうなんてこともあり得ますが、常駐フルタイムはサラリーマンまたはフルタイムの派遣社員と何ら変わりません。

しかしながら依頼主との契約は「雇用契約」ではなく「業務委託契約」ですから、福利厚生なども通常はありませんし、労働基準法で守られることもありません。

別に全ての案件がヤバいわけではありません、中にはちゃんとした仕事もたくさんあると思います。フルタイム常駐のフルタイム経由での社員登用というパターンもあります。

ですが、この仕事の受け方のヤバい点は、生活を人質に捕られかねないということです。

当然フルタイムで場所も限られていますから、他の仕事はほとんどできないことになり、生活に必要な収入がその仕事に依存することになります。

その仕事が急になくなった場合、十分な貯金がないと、次の仕事を受けるまでに生活が持たなくなる可能性があります。

そうなってしまうと、依頼主からの多少の無理な”お願い”も受けざるを得なくなっていきます。

その覚悟とその仕事の魅力とを天秤にかけて決めて頂ければと思います。

フリーランスの仕事は、小さく、細かく、多く、長くが良いです。

着手前に契約書のやり取りをきっちり

契約書、ちゃんとやり取りしていますか?

妥結する前に、適当に着手しちゃだめですよ。

ちゃんと着手前に契約について会話をしましょう。

業務内容とその方法、納期、役割分担、報酬額、支払タイミング、瑕疵担保、権利…などちゃんと決めるんです。

別に傲慢にわがままを言いまくれ、ということではないんですよ。普通にお互いの利益が最大化するように約束事を取り決めていけばよいです。

片方の利益だけではなく、です。

しかし、ここで先方に明らかにしておきたいのは、自分が「ちゃんとしている」ということなんです。

業務委託契約書はサボっちゃダメ!そのよく知られた理由ともう一つの重要な理由
フリーランスやひとり社長にとって避けては通れない業務委託契約書。手を抜くと後で痛い目を見る場合も…。この記事では、なぜ契約書を取り交わすのか、二つの重要な理由についてお伝えしたいと思います。

逆にブラック顧客はこの時点で「めんどくさいやつ」と感じてくれると思います。

契約関連が苦手…という方もいるかも知れませんが、少しずつ勉強をしていくと良いと思います。ネットにはたくさんの情報がありますし、助けになるサービスもたくさんあります。

クラウドサインには各種契約のひな形もありますし

さらば紙の契約書!クラウドサインによるペーパーレス契約による3つのメリット
クラウドサインは契約締結と契約書保管をクラウド上で行えるサービスです。今回はセミナーで学んだ、クラウドサインとは何か、またその使い方、3つのメリット、そしてその信頼性についてレポートをしたいと思います。

Bizerを使えば専門家に相談をすることもできます。

無料または激安で利用可能!お仕事に便利なクラウドサービスまとめ12選
技術の進歩によりお仕事に限らず様々なクラウドサービスが利用できるようになりました。今回はお仕事効率化オタクの私が「便利さ」「手軽さ」「価格」を重点ポイントとして12のサービスを厳選しまして紹介をしていきます。

また報酬に関しては、最低ラインを伝えちゃうというのも良いです。当然、移動時間も含めて計算します。

ITをなりわいにしているフリーランスの1時間あたりの最低目標売上
ITのフリーランスは、設備もPCくらいなので、そのリソースのほとんどは「時間」です。そして、その使い方が生死を分けます。今回はその時間の使い方として「1時間あたりの最低目標売上を決めておく」についてです。

仕事内容によってもちろんそれ以上の見積を出しても良いと思いますが、なんとなく買い叩こうという雰囲気が出たら、「すいません、自分はこれくらいもらわないと赤字なので」と正直に伝えます。

そのほうがお互いのためです。

以前、仕事の内容もロクに決まってないのに「1年間、毎月5万円あげるから、毎月5日間働いて」と依頼を受けたことがあります。

その方は「ITを活用したい」のではなくて「安く叩いて労働力を買う」のが目的なのだと思いました。そういう方、けっこういると思います。

ブログやWebサイト、SNSで発信をする

ひとり社長の大先輩、税理士の井ノ上さんもおっしゃっているのですが、ブログや問い合わせフォームに「やらない仕事」を明記するのが有効です。

私は電話問い合わせを受けていません。

とか

自分でなくてもできるような仕事は、受けないようにしています。

など、切れ味鋭く、はっきりしています。

また、間接的には日々こうして発信しているブログやSNSの投稿が効果的です。

検索経由で来てくれるお客様も依頼内容がかなり明確な状態でお越し頂きますし

フリーランスの仕事はどこから来たか、独立して1年間の受注件数を全て晒す
独立してからもうすぐ1年となります。その間、いかにして仕事を獲得したのか、毎日書いているブログによるコンテンツマーケティングの効果はあったのか、実際の件数を全て晒してフリーランスのリアルをお伝えします。

知人もFacebookの投稿を見て、私がどういうポリシーを持って仕事をしているか理解をして下さっているので、マッチする相談だけ下さっているように思います。

結果的に良い案件で埋まりやすいという環境ができますので、変な案件は選ばなくて済むようになります。

オススメです。

まとめ

以上、フリーランスがブラック顧客から身を守る3つのテクニックについてお伝えしました。

もう1回おさらいすると

  • 常駐フルタイムの案件は受けない
  • 着手前に契約書のやり取りをきっちり
  • ブログやWebサイト、SNSで発信をする

です。

いずれにしても受ける前、着手前に手を打つことが大事です。

一旦着手してしまうと、納品・検収まで断りづらくなってしまいますからね。

ぜひ独立した本来の目的に向かってまっすぐまい進すべく、ブラック顧客を上手に避けていきましょうね。

エクセルVBAで文字コードUTF-8のCSVファイルを書き出す方法

$
0
0

write

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

エクセルのデータを様々なファイルに書き出す方法についてお伝えしています。

以前、こちらの記事でCSV形式で書き出す方法を紹介しました。

エクセルVBAでセルが結合されているかどうか、またそのセルの数を判定する方法
エクセルVBAでセルが結合されているかどうか、またその結合されているセルの数を判定する方法を紹介します。また結合セルがある場合のエクセル表をHTML形式に出力するプログラムも合わせて紹介します。

しかしながら、残念ながらこの方法で書き出すCSVファイルの文字コードは「Shift-JIS」なんです。

世の中のソフトウェアの多くはそれとは別の「UTF-8」に対応をしている場合が多いので、そこにデータを渡そうとしたらUTF-8に変換をして渡す必要があります。

そこで今回は、エクセルVBAでUTF-8の文字コードでCSVファイルを書き出す方法についてお伝えします。

おさらい:Shift-JISでCSVを書き出す

こちらが以前紹介した、PrintでCSVを書き出すプログラムです。まずはこのプログラムのおさらいをします。

Sub writeCSV()

Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets(1)

Dim csvFile As String
csvFile = ActiveWorkbook.Path & "\data.csv"

Open csvFile For Output As #1

Dim i As Long, j As Long
i = 1

Do While ws.Cells(i, 1).Value <> ""

    j = 1
    Do While ws.Cells(i, j + 1).Value <> ""

        Print #1, ws.Cells(i, j).Value & ",";
        j = j + 1

    Loop

    Print #1, ws.Cells(i, j).Value & vbCr;
    i = i + 1

Loop

Close #1

MsgBox "data.csvに書き出しました"

End Sub

9行目のOpenで書き出すファイルを出力用ファイルとしてオープンします。

14~27行目で対象となるシートのデータがある範囲を走査しながら、開いたファイルにデータをカンマ区切りで書き出していきます。書き出しにははPrintを使います。

最後に29行目でファイルを閉じて終了です。

冒頭でお伝えした通り、この方法では有無も言わさずShift-JISで書き出されます。

ADODB.StreamオブジェクトでUTF-8のCSVを書き出す

UTF-8でCSVを書き出すにはADODB.Streamオブジェクトを使います。

簡単に説明するとADODB.Streamオブジェクトにいったんデータを流し込むと、取り扱う文字コードがUTF-8の状態でCSVファイル保存ができるようになります。

ADODB.Streamオブジェクトとは何か、またそのライブラリの追加方法について詳しくはこちらの記事で解説していますのでご覧ください。

文字化けよさようなら!エクセルVBAでUTF-8のCSVを読み込む方法
エクセルVBAのLine Input命令でUTF-8のCSVファイルを取り込むと文字化けを起こします。今回は、ADODB.Streamを使ってUTF-8のCSVファイルを取り込む方法についてお伝えします。

UTF-8でCSVを書き出すプログラム

ADODB.Streamオブジェクトを使ってUTF-8でCSVを書き出すプログラムはこちらになります。

Sub writeCSV_utf8()

Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets(1)

Dim csvFile As String
csvFile = ActiveWorkbook.Path & "\data_utf8.csv"

'ADODB.Streamオブジェクトを生成
Dim adoSt As Object
Set adoSt = CreateObject("ADODB.Stream")

Dim strLine As String
Dim i As Long, j As Long
i = 1

With adoSt
    .Charset = "UTF-8"
    .LineSeparator = adLF
    .Open

    Do While ws.Cells(i, 1).Value <> ""

        strLine = ""

        j = 1
        Do While ws.Cells(i, j + 1).Value <> ""

            strLine = strLine & ws.Cells(i, j).Value & ","
            j = j + 1

        Loop

        strLine = strLine & ws.Cells(i, j).Value

        .WriteText strLine, adWriteLine

        i = i + 1

    Loop

    .SaveToFile csvFile, adSaveCreateOverWrite
    .Close

End With

MsgBox "data_utf8.csvに書き出しました"

End Sub

見慣れないものが多く出てきている印象ですが、大まかな流れはそれほど変わりません。

  1. ADODB.Streamオブジェクトを生成
  2. ADODB.Streamオブジェクトの文字コード、改行コードを設定
  3. ADODB.Streamオブジェクトをオープン
  4. 1行ずつ文字列を生成し、ADODB.Streamオブジェクトに流し込む
  5. ADODB.Streamオブジェクト内のデータをCSVファイルに保存する
  6. ADODB.Streamオブジェクトをクローズ

という流れです。

書き出しの際に使うADODB.Streamオブジェクトのプロパティとメソッド

以下で本プログラムで使用しているADODB.Streamオブジェクトのプロパティとメソッドについて解説をします。

Charset:Streamオブジェクトで取り扱う文字コードを指定。
LineSeparator:Streamオブジェクトで取り扱う改行コードを指定します。規定値はadCRLF。
Open:Streamオブジェクトを開く。
WriteText:Streamオブジェクトに文字列を書き出す。オプションadWriteLineで改行コードを追加して書き込む。
SaveToFile:Streamオブジェクトから指定のファイルのデータを書き込む。オプションadSaveCreateOverWriteでファイルの上書きをします。
Close:Streamオブジェクトを閉じる。

意味さえわかれば対して難しい部分はないかと思います。

ADODB.Stream…恐れるに足らずです。

ちなみにですが、Unixなどでは改行コードはLFの場合が多いためLineSeparatorプロパティで設定をしています。

実行結果

このプログラムで出力したデータをテキストエディタで開いてみると

エクセルVBAで出力したUTF-8のCSVファイル

と、このようにきちんとUTF-8で書き出しがされていることがわかります。

まとめ

エクセルVBAでUTF-8のCSVファイルを書き出す方法についてお伝えしました。

Open,Print,Close命令とだいぶ雰囲気が異なるので少し戸惑うかも知れませんが、実際にやっていることはほぼADODB.Streamオブジェクトのメソッドへの置き換えとプラスでいくつかのプロパティ設定となります。

さて、次回はBOMなしUTF-8のCSV書き出しについてお伝えできればと思います。

どうぞお楽しみに!

連載目次:エクセルVBAでCSVや様々なテキストファイルを出力する

多くの企業では様々なデータをエクセル形式で保持しています。そのデータ群をCSVやHTMLなどで有効利用できたら便利ですよね?このシリーズでは、エクセルデータをテキストをはじめ様々な形式のファイルに出力する方法についてお伝えしています。
  1. エクセルVBAでテキストファイルに書き出す最も簡単なプログラム
  2. エクセルVBAでエクセルシート上のデータをCSVファイルに書き出す
  3. エクセルの表をHTMLのtableタグに変換して出力するVBAマクロ
  4. エクセルVBAでセルが結合されているかどうか、またそのセルの数を判定する方法
  5. エクセルVBAで文字コードUTF-8のCSVファイルを書き出す方法
⇒以下連載中!

【GAS】チャットワークで作る翻訳チャットに例外コマンドでエラーが出たときの処理を追加

$
0
0
exception

photo credit: Solo via photopin (license)

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

Google Apps Scriptでチャットワーク上に翻訳チャットを作成しています。

ベースのスクリプトはこちらの記事でできていまして

Google Apps Scriptでチャットワーク上に翻訳チャットを作る
Google Apps ScriptとチャットワークAPIを使って翻訳チャットを作る方法です。Google翻訳の機能をGASで扱うtranslateメソッドを使って、まずは最低限のシステムを目指します。

仕込んだチャット「翻訳さん」上で、 ISO639-1で登録されている言語コード(アルファベット2文字)を指定しつつ

言語コード;本文

と送信すれば翻訳結果が返ってくるという仕組みです。

しかし、上記のルールにのっとっていないコマンドを送ってしまったときは、Google Apps Script側でエラーが起きて何にも返事が返って来ないケースがありました。

今回はそれを解消すべく、Google Apps Scriptで作った翻訳チャットのスクリプトにエラー処理を搭載していきます。

これまでのおさらい

翻訳チャットのスクリプトのおさらい

まず翻訳チャットのベースとなるスクリプト、以前作成したものはこちらです。

function translateChat() {

  var token = 'APIトークン'; //チャットワークAPIトークン
  var room_id = XXXXXX; //翻訳さんのルームID

  var json = fetchMessage(token,room_id); //翻訳さんグループチャットのメッセージを取得

  /* 各メッセージについて 繰り返す */
  for each(var obj in json){

      var arr = obj.body.split(';'); //セミコロンでsplitして配列に格納
      var result = LanguageApp.translate(arr[1], "", arr[0]); //翻訳

      var body = "[rp aid=" + obj.account.account_id
        + " to=" + room_id
        + "-" + obj.message_id
        + "] " + obj.account.name
        + "さん[info]翻訳結果:" + result + "[/info]"; //チャットワークに送るテキスト

      sendMessage(token,room_id,body); //チャットワークにメッセージを送る
    }
}

流れとしては

  1. fetchMessageでチャットワークから未取得メッセージを取得
  2. 取得したメッセージ全てについて
    1. セミコロンでsplitして言語コードと本文に分割
    2. LanguageApp.translateメソッドで翻訳
    3. チャットワークに返すテキストを生成
    4. sendMessageでチャットワークに送る

という流れになります。

fetchMessage,sendMessageに関してはチャットワークAPIを使ってメッセージの送受信をする独自の関数ですので、以下の記事をご覧くださいね。

【GAS】チャットワークのメッセージを取り出す関数とメッセージを送る関数
Google Apps Scriptを活用してチャットワークにおみくじチャットを作成しています。今回はチャットワークからメッセージを取り出す、メッセージを送る処理を関数化して全体のコードをスッキリさせます。

エラーが発生したときの分岐処理のおさらい

チャットワークから受け取ったメッセージがルール以外のものだった場合、LanguageApp.translateメソッドがエラーを起こしてしまいます。

その場合のエラーをキャッチするサンプルスクリプトがコチラです。

function translateTest(){

  var strTest = "翻訳をして下さい"; //テスト用文字列
  var arr = strTest.split(';'); //セミコロンでsplitして配列に格納

  try{
    var result = LanguageApp.translate(arr[1], "", arr[0]); //翻訳
  }catch(e){
    result = "エラーの内容:" + e;
  }
    Logger.log(result);
}

try~catch文により、LanguageApp.translateがエラー検証の対象になっていて、エラーがない場合はそのまま翻訳結果をログ出力、エラーだった場合はエラーの内容をログ出力する仕組みです。

詳細はこちらの記事をどうぞ。

Google Apps Scriptでエラーが発生したときに処理を分ける方法
Google Apps Scriptでtry~catch文でエラー処理をしていきます。チャットワークの翻訳チャットを例にエラーが発生したかどうかを判定して、エラーによって処理を分ける方法をお伝えします。

エラー処理を追加した翻訳チャットのスクリプト

上記二つのスクリプトを組み合わせて、翻訳チャットにエラー処理を追加したスクリプトがこちらです。

function translateChat() {

  var token = 'APIトークン'; //チャットワークAPIトークン
  var room_id = XXXXXX; //通訳さんのルームID

  var json = fetchMessage(token,room_id); //通訳さんグループチャットのメッセージを取得

  /* 各メッセージについて 繰り返す */
  for each(var obj in json){

    /* 返信に対しては翻訳をしないように正規表現で[rp aid=で始まるメッセージを除外 */
    if(!obj.body.match(/^\[rp aid=/)){

      var body = "[rp aid=" + obj.account.account_id
      + " to=" + room_id
      + "-" + obj.message_id
      + "] " + obj.account.name + "さん";
      var arr = obj.body.split(';'); //セミコロンでsplitして配列に格納

       /* translateメソッドでエラーを検証、結果により生成するメッセージを分岐 */
       try{     
       var result = LanguageApp.translate(arr[1], "", arr[0]); //翻訳
         body = body + "[info]翻訳結果:" + result + "[/info]"; //チャットワークに送るテキスト

       }catch(e){
         body = body + "[info][title]翻訳できませんでした[/title]通訳さんのルール:\n" +
           "翻訳後の言語コード;本文\n" +
           "https://ja.wikipedia.org/wiki/ISO_639-1%E3%82%B3%E3%83%BC%E3%83%89%E4%B8%80%E8%A6%A7[/info]"; //チャットワークに送るテキスト

       }     
       sendMessage(token,room_id,body);
    }
  }
}

以下解説をしていきますね。

translateメソッドのエラー検証結果による分岐

20~30行目ですが、try~catch文を使ってLanguageApp.translateメソッドでのエラーを検証しています。

エラーが発生しなかった場合は規定通りの翻訳結果により返すテキストを生成します。

エラーが発生しなかった場合は「翻訳できませんでした」というメッセージとともに、そのルールと言語コードの参考URLを生成します。

返信に対して翻訳処理をしない

12行目のif文が新たに追加されたのに気付きましたでしょうか?

JavaScriptでは

if(!条件){ ~ }

エクスクラメーションマークを付けた場合は、条件の結果を反転させます。ですから条件が満たなかった場合に処理を行うということになります。

matchですが、正規表現というパターンマッチングをする際に用いる表記法を用いて、「取得したメッセージ本文が”[rp aid=”で始まるものでないか」ということを判定しています。

チャットワークのメッセージが「返信」である場合に該当をします。

なぜ「返信」を除外しているのでしょうか?

「返信」を除外しないと、通訳さん自身がチャットワークに「返信」にて送ったメッセージを拾ってきてしまいます。

それを読み取ると、当然翻訳ルールにのっとっていませんので、「翻訳できませんでした」と「返信」をします。

さらにまたその返信を通訳さんが拾ってきてしまい…

というエンドレスなループができてしまいます。

それを避けるために、返信を除外したというわけです。

ちなみに、正規表現を使ったマッチングについては

文字列.match(正規表現)

を使用していますが、今回は正規表現についての詳細については割愛をしますので、詳しく知りたい場合は以下記事を参照ください。

参考:正規表現(RegExp)

実行結果

では実行してみましょう。

en;翻訳をお願いします。

とメッセージを送った場合は

翻訳チャットで正しいメッセージを送った場合

zz;翻訳して下さい。

と送った場合は

翻訳チャットでエラーになるメッセージを送った場合

となります。ちゃんとリンクをクリックするとWikipediaの言語コードのページに遷移します。

まとめ

Google Apps Scriptで作成したチャットワーク上の翻訳チャットにエラー処理を追加しました。

具体的にはtry~catchによるエラーによる分岐処理と、正規表現を用いたエンドレスループの回避を行いました。

このところチャットをインターフェースとしたシステムが注目を集めていますね。しかしながら、人が入力する内容ですから、色々なパターンが出てきてしまうものです。

想定していない例外の処理が発生したときも、面白おかしい返事が返せると、楽しくお仕事ができるようになるかもしれませんね。

翻訳チャットについては今回でシリーズ終了となりますが、また便利なツールについてアイデアありましたら紹介したいと思います。

どうぞお楽しみに!

連載目次:GASとチャットワークAPIで翻訳チャットを作る

おみくじチャットの仕組みを利用して翻訳チャットを作ります。Google Apps ScirptでGoogle翻訳を操作する方法、チャットからの入力がルール外だった場合のエラー処理など少し発展的な内容を学ぶことができますよ。
  1. Google Apps Scriptでチャットワーク上に翻訳チャットを作る
  2. Google Apps Scriptでエラーが発生したときに処理を分ける方法
  3. 【GAS】チャットワークで作る翻訳チャットに例外コマンドでエラーが出たときの処理を追加

エクセルVBAで一部のワークシートのみ選択してPDFで出力する方法

$
0
0

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

エクセルVBAでPDF出力や印刷をする際のテクニックについてお伝えしています。

前回はこちらの記事でした。

エクセルVBAで全てのシートを一つのPDFにまとめて出力する方法
エクセルVBAでPDF出力や印刷をする際のテクニックについて引き続きお伝えしていきますが、今回はエクセルVBAで全てのシートをまとめてプレビューまたはPDF出力をする方法についてお伝えします。

エクセルVBAですべてのワークシートをまとめてプレビューまたはPDF出力する方法についてお伝えしました。

これはこれで便利なのですが、一部のシートは出力しなくてもいい、というときはどうしましょうか?

今回は、エクセルVBAで一部のシートのみプレビューまたはPDF出力する方法についてお伝えをしますね。

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

前回のおさらい:全てのシートをPDF出力する

では、前回紹介したプログラム、全てのシートをPDF出力するVBAプログラムについておさらいをしましょう。

こちらです!

Sub outputPDF()

Dim fileName As String '保存先フォルダパス&ファイル名
fileName = ThisWorkbook.Path & "\201604請求書_株式会社ホゲホゲ御中.pdf"

Dim ws As Worksheet
For Each ws In Worksheets

    With ws.PageSetup

        .Zoom = False
        .FitToPagesWide = 1
        .FitToPagesTall = 1
        .CenterHorizontally = True
        .TopMargin = Application.CentimetersToPoints(1)
        .BottomMargin = Application.CentimetersToPoints(1)

    End With

Next ws

Worksheets.Select
ActiveWorkbook.PrintPreview
'ActiveWorkbook.ExportAsFixedFormat Type:=xlTypePDF, fileName:=fileName '選択したシートをPDF出力

End Sub

まず、7~20行目ですが、For Each分で作業中のワークブックの全てのワークシートについて繰り返しを行っています。

そしてその繰り返し内の処理の中身といいますと、9~18行目でPageSetupオブジェクトで出力に関する各種設定を行っているということになります。

22行目で全てのシートを選択した状態にしつつ、23行目でプレビューをするということになります。

複数のシートをプレビューまたはPDF出力をする場合は、対象となるシートを全て選択した上で、ワークブックに対してメソッドを実行するんだったんですよね。

一部のシートは出力したくない

では、このような場合はどうでしょうか。

出力しないシートも含まれている

シートが3つありまして、「請求書①」「請求書②」は出力したいのですが、「Sheet1」は出力したくないのです。

こういうケースも結構ありますよね。

計算途中のためのシートだったり、元データを格納するシートだったりします。

前回のプログラムで言うところの「すべてのシートを選択してワークブックに対してメソッド」の部分を「一部のシートを選択してワークブックに対してメソッド」とすればOKなんですよ。

では具体的なプログラムをお見せしていきましょう。

一部のシートのみプレビューまたはPDF出力するVBAプログラム

ワークブック内の一部のシートのみプレビューまたはPDF出力するVBAプログラムはこちらです。

Sub outputPDF()

Dim fileName As String '保存先フォルダパス&ファイル名
fileName = ThisWorkbook.Path & "\201604請求書_株式会社ホゲホゲ御中.pdf"

Dim ws As Worksheet
For Each ws In Worksheets(Array("請求書①", "請求書②"))

    With ws.PageSetup

        .Zoom = False
        .FitToPagesWide = 1
        .FitToPagesTall = 1
        .CenterHorizontally = True
        .TopMargin = Application.CentimetersToPoints(1)
        .BottomMargin = Application.CentimetersToPoints(1)

    End With

Next ws

Worksheets(Array("請求書①", "請求書②")).Select
ActiveWorkbook.PrintPreview
'ActiveWorkbook.ExportAsFixedFormat Type:=xlTypePDF, fileName:=fileName '選択したシートをPDF出力

End Sub

前回のプログラムと変わったのは7行目、そして22行目のたった2行です。

よく前回のプログラムと比較してみますと、その2行とも共通で

Workseets

Worksheets(Array(“請求書①”, “請求書②”))

に置き換わっただけ、というのはおわかりになりますでしょうか?

Array関数で配列を作る

まずArray関数ですが、配列を表すための関数です。

Array(値1,値2,…)

は、値1,値2,…からなる配列を表します。

例えば、Array(“請求書①”, “請求書②”)は、請求書①と請求書②という二つの文字列が格納された配列を表すということです。

Array関数で複数のワークシートの集まりを表現

さらにこのArray関数を使って

Worksheets(シート名の配列)

とすることで、シート名の配列に格納された全てのシート名からなるワークシートの集まりを指すことができます。

シート名の配列は具体的にはArray(“請求書①”, “請求書②”)と表すことができますから、Worksheets(Array(“請求書①”, “請求書②”))は請求書①と請求書②の二つのシートからなる集まりを表現しているということになります。

ですから

For Each ws In Worksheets(Array("請求書①", "請求書②"))
     ’処理
Next ws

は請求書①と請求書②の二つのシートについて処理を繰り返すということですし

Worksheets(Array("請求書①", "請求書②")).Select

は、請求書①と請求書②の二つのシートを選択する、という命令になります。

実行結果

このプログラムを実行すると

一部のシートのみプレビュー

指定した2ページ(2シート)のみプレビューがされていますし、シートの状態を見ると

一部のシートのみ選択

請求書①と請求書②のシートのみ選択され、Sheet1は選択されていないということがわかります。

まとめ

以上、エクセルVBAで一部のシートのみプレビューまたはPDF出力する方法についてお伝えしました。

今回紹介しましたArray関数による配列でワークシートの集まりを表現する方法は、その他の様々なオブジェクトの集まりを作ることに応用ができまして、とっても便利です。

ぜひ機会があれば活用してみて下さいね。

エクセルVBAによる印刷設定&PDF出力についてのシリーズは今回でいったん終了です。

また便利な機能を見つけては紹介していきますね。お楽しみに!

連載目次:エクセルVBAでPDF出力と色々な印刷設定

エクセルで見積書や請求書などの帳票を作成する場合、印刷やPDF出力したいときがありますよね。このシリーズでは印刷やPDF出力をする方法、またその際の様々な設定やテクニックについてお伝えします。
  1. 初心者でも簡単!エクセルVBAでPDFを出力する最もシンプルなプログラム
  2. エクセルVBAで印刷時のページ中央配置と余白を設定する
  3. エクセルVBAで印刷範囲の設定をする方法とクリアをする方法
  4. エクセルVBAで印刷時のヘッダー・フッターの設定をする方法と書式コード・VBAコード一覧
  5. エクセルVBAで全てのシートを一つのPDFにまとめて出力する方法
  6. エクセルVBAで一部のワークシートのみ選択してPDFで出力する方法

公開から1年以上経ったブログの記事が今でも大活躍してくれていることに感動せざるを得ない

$
0
0

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

ブログを書き始めて1年と3カ月ほどが過ぎました。

直近1カ月のページビューはで19万PV、公開済みの記事数は332記事です。

なかなか頑張ってますね…!

さて、このところずっと気になっていることがあります。

弊ブログの人気記事のランキングに変化がなく、全然代わり映えしないのです。

どうなってることやら…調べてみました。

人気記事のランキングが変わり映えしない件について

最近も一生懸命記事を公開しているんです。ほぼ毎日更新しています。

なのですが、新しい記事たちは全くもって人気記事ランキングに入って来ません。

人気記事ランキングはブログのサイドバーでも確認できます。

サイドバーの人気記事ランキング

あまりの代わり映えのなさに、ちょっと撤去してしまおうかとも思いましたが、新規ユーザーもたくさんいらっしゃるのでひとまずガマン。

どうせ累計ランキングなんでしょ~?そしたら当然古い記事が有利じゃん

なんて、思われているかも知れませんが、てんで違います。

WordPressテーマSimplicityの人気記事ウィジェット機能を活用させて頂いていますが、その設定は

人気記事のウィジェット設定

と、1週間単位の集計になっています。ですから、この1週間のPVでのランキングになっているというわけです。

感覚的には新しい記事のほうが有利そうなんですがね…

直近30日のPVランキングTOP30記事はいつ公開したものか?

人気記事がいつ公開されたものか

3カ月前?半年前?それとも1年前…?

そこで、こちらの記事などで作った記事別の過去30日のPVランキング

GoogleAnalyticsアドオンを活用して自動で低品質コンテンツをあぶり出す
ブログの低品質コンテンツを常に自動であぶり出すシステムを作る手始めとして、GoogleAnalyticsアドオンで各記事の検索流入数と滞在時間を自動で出力する方法についてお伝えしていきます。

を活用して、直近30日のPVランキング上位30の記事がいつ公開されたものなのかを調べてみました。

No 公開日 記事タイトル カテゴリ PV
1 2015/11/30 Windows10にアップグレードして見づらいフォントの解決法 PC全般・Windows 19335
2 2015/05/02 エクセルVBA超入門!たった10分でスタート地点に立つための方法 Excel・VBA活用術 7916
3 2016/01/04 2016年版!仕事効率化ヲタク向けのiPhoneホーム画面を晒す iPhone・アプリ 4885
4 2016/01/14 エクセルVBAでテキストファイルに書き出す最も簡単なプログラム Excel・VBA活用術 4883
5 2015/05/14 【初心者向けエクセルVBA】For~Next文で簡潔にプログラムを書く Excel・VBA活用術 3369
6 2015/05/13 【初心者向けエクセルVBA】データ一覧から請求書を自動で作る Excel・VBA活用術 3068
7 2015/04/15 エクセルで空白や空白以外のセルを一気にまとめて置換する方法 Excel・VBA活用術 2330
8 2015/07/03 軽い!速い!簡単!無料ランチャーCLaunchでWindowsデスクトップを超スッキリ PC全般・Windows 2180
9 2015/04/22 1,200万人の事務員たちよ、VBAという武器を手に戦いに出よ! Excel・VBA活用術 2105
10 2015/04/03 もう大捜索はイヤだ!人にもPCにも優しいファイルとフォルダの整理術 PC全般・Windows 1927
11 2015/08/21 条件付きSUMPRODUCT関数の使い方とよく出くわすエラーの回避方法 データ分析・アクセス解析 1824
12 2015/07/26 スケジュールを共有しても恥ずかしくないGoogleカレンダーの使い方 WEBサービス・クラウド 1485
13 2015/12/09 UWSCでパソコン自動化!単純作業で消耗しない仕事術 PC全般・Windows 1434
14 2015/08/15 【エクセルVBA入門】For Each~Nextでフォルダ内のブック全てを参照する Excel・VBA活用術 1407
15 2015/04/26 本当にストレスフリーに成果が上がる!チャットワークの一歩進んだ使い方 WEBサービス・クラウド 1386
16 2015/05/16 【初心者向けエクセルVBA】行の数をカウントする&不要な行を隠す Excel・VBA活用術 1365
17 2016/01/18 遅い…重い…そんなエクセルVBAプログラムの処理速度を劇的に改善する方法 Excel・VBA活用術 1302
18 2015/09/22 非エンジニアでもSourceTreeを使えば超簡単にGitでのバージョン管理ができる PC全般・Windows 1210
19 2015/09/17 【エクセルVBAでIE操作】10分で終わるセッティングとWEBページの閲覧確認 Excel・VBA活用術 1143
20 2015/06/12 【初心者向けエクセルVBA】Public変数の宣言とSubプロシージャの呼び出し Excel・VBA活用術 1054
21 2016/01/25 パソコンの動作が遅い!Microsoft純正ソフトで安全にメモリを開放する方法 PC全般・Windows 940
22 2016/03/03 Word、Excel、PowerPointのデフォルトフォントを変更する方法 PC全般・Windows 927
23 2015/07/25 【保存版】初心者がエクセルVBAを実務で使えるようになるための完全マニュアル Excel・VBA活用術 894
24 2015/09/30 SourceTreeでバージョン履歴を分岐したりマージしたりする方法 PC全般・Windows 884
25 2015/09/18 非エンジニアのためのバージョン管理Git~メリットと導入前の準備 PC全般・Windows 877
26 2015/11/22 エクセルVBAでCSVを読み取る初心者向けの最も簡単なプログラム Excel・VBA活用術 863
27 2015/10/21 【エクセルVBAでIE操作】WEBページのテーブル要素を自動で取得する方法 Excel・VBA活用術 857
28 2015/09/09 データ分析をするならとりあえず作る!エクセルピボットテーブルの作り方 データ分析・アクセス解析 849
29 2015/11/13 ファイル大捜索とサヨウナラ!デスクトップのファイル整理術 PC全般・Windows 802
30 2015/10/22 コンフリクトって!?Gitバージョン管理でマージしたときに発生した衝突を解決する PC全般・Windows 792

…えーっと。。けっこう古いのいっぱいある気がしますね。

これらの記事の公開から経過した日数で分布をとってみました。
人気記事の公開時期による分布

なんと、一番多いのは301日以上360日以下。つまり公開から10カ月~1年ほど経った記事です。

また公開から181日以上、つまり公開から約半年以上の記事が25記事で、全体の83.3%を占めています。

人気記事、衝撃の古さです。

テクニカル系の記事だから検索と相性が良い、というのも当然あると思われますが、1年経って今な稼ぎの中心となっていてくれる記事たち…なんて頼もしいんでしょうか。

公開1年経った記事が稼いだ累計PV

では、さらに深堀して調べてみましょう。

昨年5月に公開した記事たちが、現時点まででどれくらいのPVをたたき出しているのかを調べてみました。

No 公開日 記事タイトル 累計PV 直近PV
1 2015/05/02 エクセルVBA超入門!たった10分でスタート地点に立つための方法 69370 7916
2 2015/05/13 【初心者向けエクセルVBA】データ一覧から請求書を自動で作る 29516 3068
3 2015/05/14 【初心者向けエクセルVBA】For~Next文で簡潔にプログラムを書く 27692 3369
4 2015/05/02 エクセルVBA超入門!プログラミングと変数の基礎中の基礎 22596 787
5 2015/05/17 仕事効率化ヲタク向けのiPhone6ホーム画面を晒してみました 21351 500
6 2015/05/16 【初心者向けエクセルVBA】行の数をカウントする&不要な行を隠す 13642 1365
7 2015/05/21 【初心者向けエクセルVBA】文字列の連結&Format関数での書式変更 7691 543
8 2015/05/30 【初心者向けエクセルVBA】If~Thenを使った条件分岐の超入門 7654 786
9 2015/05/09 チャットワークが爽快すぎ!すぐ使えるショートカットキー&裏ワザ6選 4472 370
10 2015/05/12 iPhoneの充電、心配無用!iPhone6用おすすめバッテリーケース 4318 128
11 2015/05/28 副業禁止!?いやむしろ解禁することで企業にもたらされる4つのメリット 3186 274
12 2015/05/20 ブロガー必見!いつの間にか記事ネタが完成するEvernoteの使い方 1279 33
13 2015/05/02 忘れると痛い…!Wordpress初心者向け投稿前の6つのチェックリスト 452 15
14 2015/05/06 徹底解剖!グノシー掲載に至るTwitterとはてブの条件を導く 365 17
15 2015/05/24 Googleアナリティクスでサイトアクセスの全体像を楽しくつかむ方法 252 21

上記、昨年5月に公開した記事は全部で15記事ですが、全記事の合計でなんと213,836PVです。

記事によってだいぶ差はありますけど、このうち1/5の記事は毎日100PV以上、2/3の記事は毎日10PV以上を稼ぎだしてくれています。

ジャンルごとに基礎的な記事から初めて1年継続する作戦

昨年5月はブログを始めてまだ数カ月ですから、エクセルVBAや、チャットワークなど、各カテゴリでかなり初歩的な記事が多かったことは確か。検索する人の裾野が広いというのは実際にあると思います。

その後、徐々に各カテゴリの記事を深く広く充実させていくことで、ドメインとしてそのカテゴリの評価が上がっていった、というのは考えられるシナリオかなと思います。

しかしこの仮説が正しいとすると、何か新しいジャンルに手を出して地道に1年くらい頑張っておけば、また同じくらいの活躍をしてくれるようになるというのは、わりと期待ができるのではないかと思います。

名付けて、ジャンルごとに基礎的な記事から初めて、広げたり深めたりしながらずっと継続する作戦です。

まとめ

ほとんどの記事についてその結果は半年とか1年とかそういう単位で出てくるものだということが、数字の裏付けをもって理解できました。

しかし、1年以上経ってもコツコツ稼いでくれている記事たち、なんと頼もしくて愛くるしいのでしょうか…!?

これから先も2年、3年…と活躍し続けてくれるものなのか…なかなか興味深いところです。定期的に検証していきますね。

ブログをこれから始める方、始めたばかりの方もたくさんいらっしゃるかと思いますが、1年以上続けられる人は全体の1割にも満たないと言われています。

結果は年単位で出てきますから、ぜひその覚悟を持って臨んで下さい。

コンテンツマーケティングには覚悟が必要、しかし決して辛いものではない
ブログによるコンテンツマーケティング、必要かつ忘れがちなものとして「覚悟」があります。今回の記事では、ブログによるコンテンツマーケティングに必要な覚悟についてお伝えできればと思います。

逆に言うと、続けているだけで9割の人は簡単に追い越すことができます。

そしてさらに過去に世に送り出した記事たちはきちんと毎日10PVとかうまくいけば100PVとかのレベルで、薄皮1枚ずつを重ねるようにしかし着実に、発信力を育て、各人が成し遂げたい目的やテーマの力強い支えになります。

継続は力なりですね。

【GAS】Gmailに来た問い合わせをチャットワークに通知してかつタスク追加する

$
0
0

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

Google Apps Scriptを使って問い合わせメールをスプレッドシートに記録したり集計したりといったシステムを作っています。

前回はこちらの記事。

【GAS】新たな問い合わせメールをGmailで取得しスプレッドシートに随時追加する
Gmailの未読メールを取得する方法、メールを既読にする方法などを活用して、Google Apps Scriptで問い合わせメールを都度スプレッドシートに追加していく方法についてお伝えします。

Gmailから問い合わせメールを都度スプレッドシートに追加する方法でした。

今回はこのシステムをチャットワークと連携させて

  • 問い合わせメールの通知をチャットワークに送る
  • 問い合わせメール対応のタスクを立てる

という二つの機能を追加していきたいと思います。

前回のおさらい

まず前回作成したGmailから問い合わせメールを検索抽出して、スプレッドシートに追加するスクリプトのおさらいです。

function fetchContactMail() {

  /* Gmailから特定条件のスレッドを検索しメールを取り出す */
  var strTerms = '(is:unread "このメールは いつも隣にITのお仕事 http://tonari-it.com のお問い合わせフォームから送信されました")';
  var myThreads = GmailApp.search(strTerms, 0, 500); //条件にマッチしたスレッドを取得、最大500通と決まっている
  var myMsgs = GmailApp.getMessagesForThreads(myThreads); //スレッドからメールを取得する →二次元配列で格納

  var valMsgs = [];

  /* 各メールから日時、送信元、件名、内容を取り出す*/
  for(var i = 0;i < myMsgs.length;i++){

    valMsgs[i] = [];
    valMsgs[i][0] = myMsgs[i][0].getDate();
    valMsgs[i][1] = myMsgs[i][0].getReplyTo();
    valMsgs[i][2] = myMsgs[i][0].getSubject();
    valMsgs[i][3] = myMsgs[i][0].getPlainBody().slice(0,200);
    valMsgs[i][4] = myThreads[i].getPermalink();

    myMsgs[i][0].markRead(); //メッセージを既読にする

  }

  /* スプレッドシートに出力 */
  if(myMsgs.length>0){
    
    var mySheet=SpreadsheetApp.getActiveSpreadsheet().getSheetByName('メール'); //シートを取得
    var maxRow=mySheet.getDataRange().getLastRow(); //シートの使用範囲のうち最終行を取得
    mySheet.getRange(maxRow+1, 1, i, 5).setValues(valMsgs); //シートに取得したメッセージのデータを追加

  }
}

コメントを見て頂ければだいたいわからなくもないですが、流れとしては

  1. Gmailから未読の問い合わせメールのスレッドを抽出する
  2. 抽出したすべてのメッセージについて
    1. 各メールから日時、送信元、件名、本文抜粋を取り出して配列に格納
    2. メッセージを既読にする
  3. スプレッドシートの最後尾に配列の内容を書き出す

となっています。

問い合わせをチャットワークに通知しつつタスクを立てる

スプレッドシートに追加するメッセージ一つ一つについて、チャットワークへ通知をしてタスクを追加していけばよいですね。

スクリプトとしては20~22行目の間に

  • チャットワークへ送るメッセージを生成
  • そのメッセージをチャットワークに送る
  • チャットワークへ立てるタスクを生成
  • そのタスクをチャットワークで立てる

という処理を入れればOKです。

チャットワークにメッセージを送る

まずチャットワークにメッセージを送る部分について考えます。

以下記事で作成した、sendMessageという関数を少しカスタマイズして流用します。

【GAS】チャットワークのメッセージを取り出す関数とメッセージを送る関数
Google Apps Scriptを活用してチャットワークにおみくじチャットを作成しています。今回はチャットワークからメッセージを取り出す、メッセージを送る処理を関数化して全体のコードをスッキリさせます。

関数はこちらです。

/* 本文を受け取りメッセージを送る */
function sendMessage(body){
       var params = {
               headers : {"X-ChatWorkToken" : CW_TOKEN},
               method : "post",
               payload : {
                    body : body
               }
        };

     var url = "https://api.chatwork.com/v1/rooms/" + ROOM_ID + "/messages";
     UrlFetchApp.fetch(url, params);
}

メッセージ本文を成形して引数bodyとして渡すと、ROOM_IDで指定したグループチャットに送信します。

  • グループチャットのルームID:ROOM_ID
  • チャットワークAPIトークン:CW_TOKEN

はタスクを立てる処理でも使うので、関数の外で定数として別途宣言をしておきます。

チャットワークに送るメッセージを生成

それでその引数bodyとして、チャットワークに送る文字列を生成してsendMessageを呼び出す部分です。

/* メッセージを生成しチャットワークにを送る */
    var msgBody = "[To:" + ACCOUNT_ID + "][info][title]問い合わせメール from " + valMsgs[i][1] + "[/title]" +
               valMsgs[i][3] +
               "[hr]メッセージURL:" + valMsgs[i][4] + "\n" +
               "問い合わせ記録:https://docs.google.com/spreadsheets/d/1hdhJiaBMIFGw_QWDgUTlpZr3eSZwjQCWNE6jxFqgI0k/edit" +
               "[hr]" + valMsgs[i][0] + "[/info]";

    sendMessage(msgBody);

いつもながら、この部分はちょっとややこしく見えてしまうのですが

  • valMsgs[i][1]:送信元メールアドレス
  • valMsgs[i][3]:本文の抜粋
  • valMsgs[i][4]:メッセージへのパーマリンク
  • 問い合わせ記録のスプレッドシートへのリンク
  • valMsgs[i][0]:メッセージ受信日時

という情報をチャットワークのメッセージ記法に則って生成するという仕組みです。

ちなみにToで指定をしている

  • アカウントID:ACCOUNT_ID

これも他で使うので関数外で定数宣言しておきますね。

チャットワークのメッセージ記法についてはこちらの記事もご参考ください。

Google Apps ScriptでチャットワークにToや返信でメッセージを送る
Google Apps Scriptでチャットワークのおみくじチャットを作っています。今回はチャットワークのメッセージ記法を使って、おみくじの結果をToや返信のメッセージにする方法です。

チャットワークにタスクを立てる

続いてチャットワークにタスクを立てる部分を作成していきます。

こちらも以前紹介したaddTaskという関数をカスタマイズして流用します。

Google Apps Scriptでチャットワークにタスクを追加する最も簡単なプログラム
チャットワークの大きな特徴であるタスク機能がもAPIを使って操作することができます。今回はGoogle Apps Scriptでチャットワークにタスクを追加する最も簡単なプログラムを紹介します。

関数はこちらです。

/* 本文とアカウントIDを受け取りタスクを追加 */
function addTask(body){
  var params = {
    headers : {"X-ChatWorkToken" : CW_TOKEN}, //APIトークン
    method : "post",
    payload : {
      body : body, //タスク内容
      to_ids : ACCOUNT_ID //アカウントID
    }
  };
  var url = "https://api.chatwork.com/v1/rooms/" + ROOM_ID + "/tasks";
  UrlFetchApp.fetch(url, params); //チャットワークAPIにリクエスト
}

タスク内容を引数bodyとして渡すと、ROOM_IDで指定したグループチャットに、ACCOUNT_IDで指定した担当者でタスクを追加します。

payloadの中にはタスク期限を表すlimitも設定できるのですが、今回はなしで作っています。

例えば

/* タスクを生成しチャットワークに追加する */
    var taskBody = "問い合わせメール:" + valMsgs[i][2];
    addTask(taskBody);

などと指定してあげれば、「問い合わせメール:件名」というようなタスクが追加されるわけです。

実行結果

こちらのスクリプトを実行してみました。

問い合わせメールをチャットワークに通知してタスクを追加

無事にメッセージも送信できていますし、タスクも追加できていますね。

まとめ

Gmailに届いた問い合わせメールをスプレッドシートに集計記録しつつ、それをチャットワークに通知しながらタスクも追加する、そんな素敵なシステムをGoogle Apps Scriptで作成することができました。

しかも、イベントトリガーで5分ごととか10分ごとに設定をしておけば完全自動で全ての動作がなされます

便利ですね~。

さて、おさらいですが、本体のスクリプトfetchContactMailはこちらです。

var CW_TOKEN = '--------------------------'; //チャットワークAPIトークン
var ROOM_ID = XXXXXXXX; //ルームID
var ACCOUNT_ID = NNNNNN; //アカウントID

function fetchContactMail() {

  /* Gmailから特定条件のスレッドを検索しメールを取り出す */
  var strTerms = '(is:unread "このメールは 株式会社プランノーツ http://plannauts.co.jp のお問い合わせフォームから送信されました")';
  var myThreads = GmailApp.search(strTerms, 0, 500); //条件にマッチしたスレッドを取得、最大500通と決まっている
  var myMsgs = GmailApp.getMessagesForThreads(myThreads); //スレッドからメールを取得する →二次元配列で格納

  var valMsgs = [];

  /* 各メールから日時、送信元、件名、内容を取り出す*/
  for(var i = 0;i < myMsgs.length;i++){

    valMsgs[i] = [];
    valMsgs[i][0] = myMsgs[i][0].getDate();
    valMsgs[i][1] = myMsgs[i][0].getReplyTo();
    valMsgs[i][2] = myMsgs[i][0].getSubject();
    valMsgs[i][3] = myMsgs[i][0].getPlainBody().slice(0,200);
    valMsgs[i][4] = myThreads[i].getPermalink();

    myMsgs[i][0].markRead(); //メッセージを既読にする

    /* メッセージを生成しチャットワークにを送る */
    var msgBody = "[To:" + ACCOUNT_ID + "][info][title]問い合わせメール from " + valMsgs[i][1] + "[/title]" +
               valMsgs[i][3] +
               "[hr]メッセージURL:" + valMsgs[i][4] + "\n" +
               "問い合わせ記録:https://docs.google.com/spreadsheets/d/1hdhJiaBMIFGw_QWDgUTlpZr3eSZwjQCWNE6jxFqgI0k/edit" +
               "[hr]" + valMsgs[i][0] + "[/info]";

    sendMessage(msgBody);

    /* タスクを生成しチャットワークに追加する */
    var taskBody = "問い合わせメール:" + valMsgs[i][2];
    addTask(taskBody);

  }

  /* スプレッドシートに出力 */
  if(myMsgs.length>0){
    
    var mySheet=SpreadsheetApp.getActiveSpreadsheet().getSheetByName('メール'); //シートを取得
    var maxRow=mySheet.getDataRange().getLastRow(); //シートの使用範囲のうち最終行を取得
    mySheet.getRange(maxRow+1, 1, i, 5).setValues(valMsgs); //シートに取得したメッセージのデータを追加

  }
}

問い合わせメールに関するGASのシステム作りについてのシリーズはこちらで完結となります。

また便利なシステムを思いついたら書きたいと思いますので、どうぞお楽しみに!

連載目次:GASでGmailに届いた問い合わせメールを分析する

お仕事の現場では日々様々なメールが届きます。その中で重要なのが「問い合わせメール」ですね。このシリーズでは、Webサイトからの問い合わせメールを自動でスプレッドシートに取り込んだり、チャットワークに送る方法についてお伝えしていきます。
  1. 【GAS】Gmailに送られた過去のメールから特定条件のメールを検索して取得する
  2. 【GAS】Gmailからメールを検索してスプレッドシートに書き出す
  3. フリーランスの仕事はどこから来たか、独立して1年間の受注件数を全て晒す
  4. 【GAS】新たな問い合わせメールをGmailで取得しスプレッドシートに随時追加する
  5. 【GAS】Gmailに来た問い合わせをチャットワークに通知してかつタスク追加する

本当に大学進学一択で良いのか?投資対効果を考えて進路を決めて欲しい

$
0
0

university

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

先日こちらの記事を読みました。

アプリ分析や金融サービスをグローバルで展開している株式会社メタップスの代表佐藤航陽氏のお話です。

授業料が150万円分ぐらいあって、来年の早稲田の授業料に150万円ぶっ込むのか、はたまた会社を作るのかで迷っていたんですよね。

どっちがROI(注:return on investment、投資収益率)が高いかと言ったら、やっぱり会社作ったほうがいいねという話になりまして、そこから行かなくなって、今の会社を作って辞めちゃいましたね。

本当におっしゃる通り!

と思いました。

とりあえず大学に入って、就職して…と決めつけている方はいまだに多いと思うのです。

大学で学ぶことの投資効果に触れつつ他の選択肢も含めてきちんと考えて決めて欲しいということについて書きたいと思います。

大学に通う費用はいくらかかるのか?

一般的に大学の授業料ってどれくらいかかるのかということなのですが

私立の理系で、授業料は年間136万円。うち126万円を日本学生支援機構の奨学金でまかなう。貸与型で、一部は有利子のため、卒業時に息子本人が約500万円のローンを背負う。

…高!

国立大学に関しては

40年前に年間3万6千円だった国立大学の授業料は、15倍の約54万円。私立との差が縮まり、国立ももはや「贅沢」な選択なのだ。

昨年末には文部科学省が、15年後の2031年度には国立大の授業料が年間93万円程度にまで上がるという試算を示した。

だそうです。

国立大学まだ私立よりも多少マシな気もしますが、実家通いができない場合は仕送りもあるでしょう。

親の仕送りが十分でない場合は、生活費を稼ぐためにアルバイトに明け暮れたりします。

学費は奨学金で借金、大学にはあまり行かずに日々アルバイトして生活費を稼ぐ…って何のために奨学金を借りているんだって話もあったりします。

いずれにしても、大学4年間で少なくとも数百万円から多いと一千万円以上かかります。

その結果として得ているものは何でしょうか?

大学を卒業した時点で得られるものは?

冒頭の記事では

日本では、興味があるから勉強するというより、「○○大学卒業」というブランドを手に入れるために勉強していますよね。

というコメントがありました。

全ての学生がそうとは限りませんが、一定数はそういう学生もいるのでしょう。

一定のブランドを持たないと就職活動の門すら叩けない大企業もありますから、当然ブランドは必要という考え方もあります。

ブランドだけでなく、取得するしている124の単位、卒業研究、サークル活動、アルバイト、など様々な機会から学んで、きちんとそこから成長を得ている学生もいると思います。

しかし、そこで考えるべきは数百万円以上かけたことによる投資効果です。

得るものが

  • ○○大学卒業というブランド
  • サークルやアルバイトの経験と仲間たち
  • カリキュラムで学んだこと

だったとします。

数百万円以上の価値がありますか?ROIが成立していますか?

単位取得したカリキュラムの多くが仕事に活かせるかわからないもの、卒業のころにはすっかり忘却の彼方に押しやられるもの、とりあえず楽をして単位を取ったものかも知れません。

「とりあえず大学出て、とりあえず大企業に就職するのが普通」という思考停止のプレッシャーに逆らって、ぜひ親子できちんと考えて進学を決めて頂きたいのです。

大企業に入っても40代、50代になってから大規模にリストラされることがあります。就職を目標でありゴールと捉えることは大きなリスクです。

数百万円かけて進学をするなら、きちんと自らの人生を支える土台となる学びを得るべきです。

高卒からやり直すとしたらのシナリオ例

IT業界の話をしますと、佐藤さんのおっしゃる通り大学より起業のほうがキャリアとしては投資効果が高いと思います。

私も高卒からやり直せるなら、やると思います(とはいえ、40歳まで様々な経験があるこそそう思えるというのがありますが)。

19歳になる年の春休みに準備をして当初はこのように物事を進めます。

  • 設備投資はPC1台、机&椅子のみ
  • ネット環境があれば地方でも起業可能、実家を間借りすればなお良し
  • 流行りのプログラム言語と経営を勉強
  • ブログ開設、事業やそのための言語について学んだことをアウトプットしながら集客&広告収入
  • イベントやSNSで興味ある会社や人に絡む(そう考えると都市部のほうが少し有利)
  • 利益の半額または10万円の安いほうを実家に収める

ITの場合は投資は本当に少なくて済みます。そして、学ぶ環境、発信をする環境、仕事を受ける環境は全てネットが解決してくれ、そしてそのほとんどが無料または激安です。

事業としては、10万円を実家に収めるとしても、おそらく半年から1年くらいで黒字化します。

4年経ったら

  • 年商数百万円以上の事業
  • 1つ以上のプログラミング(しかも実務で使える)スキル
  • 数十万PV以上のWebメディア
  • いくつかの仕事実績、ポートフォリオ

を得ていることが期待できます。

この実績があってその時点で23歳だったら、普通に就職できちゃうIT企業は多いと思います。

このまま事業に専念しても良いですし、複業的にどこかの企業の事業に参画するという選択肢もあります。

…とまあこんなシナリオもあるのですが、これもいくつかの選択肢の中の一つです。

ぜひ思考停止の一択で進まずにベストな道筋を考えて進路を決定してほしいと思います。

まとめ

高卒からやり直すシナリオを考えるの…とても楽しかったんです。

皆さんもご自身だったらどうするか、ぜひ考えてみてくださいね。

さて、大学進学一択ではなくて他の選択肢も…というお話をしてきたのですが、いずれにしても絶対に必要不可欠な要素があります。

それはスキルを身に着けるスキルです。

社会が必要としていること、家族が必要としていること、自分が必要としていることなどを満たすために、今自分自身に何が不足しているのかを発見し、その不足を補う能力を身に着ける能力

です。

「スキルがないから独立できない」人が身に着けるべきたった一つのスキル
独立するのに必要なスキルって何でしょうか?たくさんのスキルはあるに越したことはないのですが、独立するのであればただ1つ「絶対に身に着けておくべきスキル」がありますので今回お伝えできればと思います。

このスキルを身に着けるためにはどうしたら良いのか…?

これは単純な問いではないと思うのですが、親や先生など周りにいる素晴らしい大人たちから学ぶことが多いのではないかと思います。

自分も微力ながらそんな大人の一人になれればと思う限りです。

【脱エクセルVBA初心者】新規のワークブックを作成、シートのコピーと名前の変更

$
0
0

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

以前、初心者向けVBAということで、「請求データ一覧から請求書を自動で作成する」を目的とした連載記事を公開しました。

こちらの記事から始めるシリーズです。

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

おかげさまで「請求書を自動で作る」というニーズはとても多いようで、たくさんの方にご覧いただいています。

そこで、「請求書を自動で作る」際に他にも便利な機能やテクニックが山ほどありますので、脱エクセルVBA初心者向けということでシリーズで紹介していきたいと思います。

初回の今回は、エクセルVBAで新規のワークブックを作成して請求書ひな形シートをコピーする方法です。

また、合わせてワークシートのシート名を変更する方法、またThisWorkbook、ActiveWorkbook、ActiveSheetに関するちょっとしたTIPSについてもお伝えしますよ。

では、改めてよろしくお願いします!

各種請求に関するデータとひな形を準備

では、使用していく各種データとひな形について紹介します。

今回作成していく「請求書作成.xslm」は

  1. 請求書ひな形
  2. 請求データ
  3. 取引先マスタ

の3つのシートから成ります。

それぞれ説明をしていきますね。

請求データ

まず請求データシートです。

エクセルの請求データ

納品が完了した品目についてこのフォーマットに、納品日、取引先名、品目、単価、数量、価格を記録していきます。このデータが各取引先向けの請求書を作成するための元データになりますので、間違えないように…。

取引先マスタ

次に取引先マスタです。

エクセルの取引先マスタ

請求書に載せる取引先名と郵便番号、住所をリストをしています。

最終的には、ここに記載している取引先の分だけ請求書ファイルを作成していきますので、この例では「ABC株式会社」「株式会社ホゲホゲ」の二社分を作成することになります。

請求書ひな形

こちらが請求書ひな形シートです。

エクセルの請求書ひな形

やたら長いですが、最大30品目まで入力できるようになっていて、使用しない行は非表示にする処理を追加しますのでご安心下さい。

請求書作成プログラムの流れ

今回作成したい請求書作成プログラムの流れについてですが、大まかには

  1. 取引先マスタの取引先の分だけ新規ブックを作成しそこに請求書ひな形シートをコピーする
  2. コピーしたシートの名称を「請求書ひな形」から「請求書」に変更する
  3. 各社の「請求書」シートに「請求データ」から該当のデータを抜き出して転記する
  4. 各社の「請求書」シートに「取引先マスタ」から必要な項目を転記する
  5. 各社の「請求書」シートの不要な行を非表示にするなど表示を調整
  6. 各社の「請求書」シートをPDF形式で保存する

というような流れで進めていく予定です。

新規ブックを作成して請求書ひな形シートをコピーする

まず今回は上記の流れの1,2まで。新規ブックを作成して、そこに請求書ひな形シートをコピーして、そのシート名を変更する、というところまでです。

その部分だけプログラムを作成してみますと、こちらのようになります。

Sub wsCopyNewBook()

    Dim wsInvoice As Worksheet '「請求書ひな形」シート

    Workbooks.Add '新規ワークブックを作成
    ThisWorkbook.Worksheets("請求書ひな形").Copy before:=ActiveWorkbook.Sheets(1) '新規ワークブックのsheet1の前にひな形をコピー

    Set wsInvoice = ActiveSheet 'コピーしたシートを変数にセット
    wsInvoice.Name = "請求書" 'シート名を変更

End Sub

意外と短いですね。

以下解説をしていきます。

新規ワークブックを作成

新規ワークブックの作成ですが、簡単です。

Addメソッドを使って

Workbooks.Add

これでOK。新しいブックが作成されます。また重要なのは、新たに作られたブックが常にアクティブになりますので、覚えておいてください。

ThisWorkbookとActiveWorkbookは何が違うのか

ThisWorkbookActiveWorkbookはともに特定のワークブックを指定するときに非常に便利ではあるのですが、それぞれどう違うのか混乱するときがあるかも知れません。

一回整理しておきましょう。

ThisWorkbook:現在動作しているVBAプログラムが仕込まれているワークブック
ActiveWorkbook:現在アクティブになっているワークブック

と、このような違いです。

一般的にThisWorkbookはVBAプログラムがどのような動作をしようとも、別のワークブックを指すことはないんですね。ずっと同じブックです。

一方でActiveWorkbookはアクティブになっているワークブックを指しますから、前述のように新たに作成したワークブックや

Workbookオブジェクト.Activate

などとすると、指定したワークブックがアクティブになります。

ワークシートをコピーする

ワークシートをコピーする場合はCopyメソッドを使って

Worksheetオブジェクト(コピー元).Copy before:=Worksheetオブジェクト(コピー先)

とします。

この場合、Worksheetオブジェクト(コピー先)の前にコピーしたシートが追加されます。

Worksheetオブジェクト(コピー先)の後ろにコピーしたシートを追加したい場合は

Worksheetオブジェクト(コピー元).Copy after:=Worksheetオブジェクト(コピー先)

とします。

今回の例の場合は

ThisWorkbook.Worksheets("請求書ひな形").Copy before:=ActiveWorkbook.Sheets(1) '新規ワークブックのsheet1の前にひな形をコピー

とあります。新規に作成したワークブックには「Sheet1」というシートが自動で作られていますので、その前にコピーしたシートを挿入するという形です。

そして、もうお気づきだと思いますが、コピーして新しくできたシートはアクティブなシートになりますので

Set オブジェクト変数 = ActiveSheet

とすることで、簡単にオブジェクト変数にセットできます。

これを知らないと

Set wsInvoice = ActiveWorkbook.Worksheets("請求書ひな形")

などと書く必要があります。アクティブなうちにセットしちゃうと簡潔に書けることが多いです。

シート名を変更する

コピーしたシートは「請求書ひな形」というシート名ですが、各社ごとに作る請求書に”ひな形”はおかしいので、ここでリネームをしておきます。

シート名を変更するときはNameプロパティを使って

Worksheetオブジェクト.Name = シート名

とします。

実行結果

このプログラムを実行しますと

エクセルVBAで新たに作成されたワークブック

このように新規ワークブックができ、そこに「請求書ひな形」シートがコピーされた上で、シート名が「請求書」に変更されています。

まとめ

エクセルVBAで新規のワークブックを作成して請求書ひな形シートをコピーするプログラムを作成しました。

今回は短いプログラムでしたが

  • Workbooks.Addで新規ワークブックを作成
  • Worksheetオブジェクト.Copyでワークシートをコピー
  • Worksheetオブジェクト.Nameでシート名を変更
  • ThisWorkbookとActiveWorkbookの違い
  • 新規のブックやシートはアクティブになる

などなど、けっこう使えるTIPS盛りだくさんでお送りしました。

さて、次回はいらないシートを削除する方法についてお伝えしていきたいと思います。

どうぞお楽しみに!

Googleスプレッドシートでクラウド上の勤怠管理集計システムを作る

$
0
0

Attendance

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

みなさんの会社では勤怠管理はどのように行わていますか?

今は、クラウド型の安価な勤怠管理サービスなども出てきていますが、実際はタイムカードとエクセルによる管理表を組み合わせて管理されているケースも多いのではないでしょうか?

もしかすると、本人か人事担当者がタイムカードをベタ打ち…ということもあるかも知れません。

また、人事担当者としては月が締まると

  1. 各スタッフが記入した勤務管理表のエクセルファイルとタイムカードを収集
  2. タイムカードとエクセルファイルの内容に齟齬がないか確認
  3. エクセルファイルの集計結果をもとに給与計算
  4. 振込作業

などといった作業をされていると思います。

マネージャーが取りまとめ作業を一部担当されているかも知れませんが、全スタッフの情報をもれなく集めるのはなかなか大変です。

そういった毎月発生する雑務の時間は減らすに越したことはありませんよね。

そこで、今回はGoogleスプレッドシートを使った簡易的な勤怠管理集計システムの作り方をシリーズ連載でお伝えできればと思います。

スプレッドシートはクラウド上で動作しますので、複数人での共同閲覧や編集が得意かつ関数やスクリプトで様々な動作の自動化が可能です。

今回はまず初回として、これから作成するGoogleスプレッドシートを使った勤怠管理集計システムの方針と概要についてお伝えできればと思います。

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

エクセルは様々な関数や機能が盛りだくさんに搭載されているので非常に便利なのですが、

  • 物理的にファイルをやり取りしないと内容の確認や修正ができない
  • 何回も修正を繰り返すとどれが最新かわかりづらくなる

などといったデメリットがあります。

スタッフが数人だったら良いのでしょうけど、これが10人、100人、…と大人数になってくると、エクセルファイルを集めるだけで大変です。

そこで、その悩みを解決する方法として、Googleスプレッドシートを使った簡易的な勤怠管理集計システムの作り方をシリーズ連載でお伝えできればと思います。

Googleスプレッドシートはクラウド上の表計算ソフトで

  • URLを共有することで同一のシートを共同閲覧・編集できる
  • 管理すべきファイルは一つで常に最新
  • 無料から利用できる
  • 関数などがエクセルと共通のものが多く覚えやすい
  • Google Apps Scriptでプログラミングによる追加機能も可能

などといった特徴があり、勤怠に関する情報の収集や、やり取りに適しています。

勤怠管理集計システムの構成

スプレッドシートによる勤怠管理集計システムの構成ですが、まずは以下4つのシートを作成していきます。

ちなみに方針としては

  • この1ファイルだけでスタッフ全員分を管理する
  • データ収集や出力はできる限り自動化する

という方針で進めていきたいと思います。

勤怠管理

勤怠状況を月次で集計出力するための「勤怠管理」シートです。

スプレッドシートの勤怠管理シート

各スタッフの月ごとの

  • 出社時間、退社時間
  • 勤務時間(通常、残業、深夜)
  • 出勤、欠勤、有休、代休日数

などを一枚にまとめたものです。

エクセルで勤怠管理をされている場合は、毎月このシートをエクセルで作成していることと思います。

最終的にはこのシートを印刷したり、PDFやXLS形式で出力したりすることを想定しています。

設定項目

「設定項目」シートは勤務時間の集計を行う際の各パラメータを指定しておくシートになります。

スプレッドシートの勤怠に関する設定シート

もし就業規則などで変更があった場合は、このシートを変更することで全スタッフ分の計算式を変更することができます。

物理的に別ファイルになっているエクセルだとそうはいきませんよね。

社員マスタ

社員マスタは社員ごとのID、部署、名前を管理するシートです。

スプレッドシートの勤怠管理の社員マスタシート

部署異動があった場合などはここを変更します。

アカウントIDは、ちょっと後でのお楽しみです。

データ

この「データ」シートに社員全員分のデータを集めてきます。

スプレッドシートの勤怠管理データシート

一行に1レコードとして、勤怠に関するデータを蓄積していき、この情報を引っ張る形で「勤怠管理シート」が出来上がります。

一般的にエクセル管理をされている場合は、1番目に紹介した「勤怠管理シート」がデータベース兼アウトプットとして活用をされていることが多いと思います。

しかし、システムを作る場合はデータベースとアウトプットを別にしたほうが運用しやすいことが多くあります。

というのも、コンピュータにはコンピュータが得意なデータの持ち方があるので、データの保管の仕方はコンピュータに合わせてあげるのが良いのです。

一方でアウトプットは人間が見やすいように作ります。

この「データ」シートにできるだけ効率よくデータを集められるようなシステムが望ましいですよね。

勤怠管理システムの動作イメージ

このシステムの動作イメージですが

  1. スタッフはチャットで出勤、退勤の打刻を行う
  2. その打刻情報が「データ」シートに蓄積される
  3. 「勤怠管理」シートで、社員IDと年月を変更することで、「データ」を自動集計する

というところまでを想定しています。

まとめ

今回はGoogleスプレッドシートによる勤怠管理システムの概要についてお伝えしました。

以降、スプレッドシートやGoogle Apps Scriptの機能を駆使してシステムを少しずつ作っていきたいと思います。

次回は、「勤怠管理」シートの各数値を関数を使って自動集計していく部分を解説してきます。

どうぞお楽しみに!

【脱エクセルVBA初心者】確認メッセージを表示させずにワークシートを削除する方法

$
0
0

Garbage

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

脱エクセルVBA初心者向け、請求書を自動で作る際の様々なテクニックをお伝えしています。

前回はこちらの記事。

【脱エクセルVBA初心者】新規のワークブックを作成、シートのコピーと名前の変更
エクセルVBAで「請求書を自動で作る」をテーマに、新規のワークブックを作成して請求書ひな形シートをコピーする方法、ワークシートのシート名を変更する方法、ブックやシートに関するTIPSについて書きました。

新規のブックを作成して請求書ひな形シートをコピーをする方法についてお伝えしました。

で、その新規のブックなのですがデフォルトで「Sheet1」というシートをがある状態で作られます。

ちょっと邪魔なので、上手に削除してしまいましょう。

今回は、エクセルVBAで特定のシートを削除する方法と、それに付随して確認メッセージをオフにする方法についてお伝えします。

前回のおさらいと今回のお題:Sheet1を削除したい

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

Sub wsCopyNewBook()

    Dim wsInvoice As Worksheet '「請求書ひな形」シート

    Workbooks.Add '新規ワークブックを作成
    ThisWorkbook.Worksheets("請求書ひな形").Copy before:=ActiveWorkbook.Sheets(1) '新規ワークブックのsheet1の前にひな形をコピー

    Set wsInvoice = ActiveSheet 'コピーしたシートを変数にセット
    wsInvoice.Name = "請求書" 'シート名を変更

End Sub

ゆくゆくは請求データから必要な情報を抽出して、取引先別の請求書を自動で作成するプログラムとしていきたいと思っていますが、まずはその最初の段階という状態です。

プログラムとしては

  1. 新規ワークブックを作成する
  2. 「請求書ひな形」シートをその新規ワークブックにコピーする
  3. 新規ワークブックにコピーしたシートの名前を「請求書」に変更する

という内容のものですね。

新規ワークブックのSheet1を削除したい

上記プログラムを実行しますと

エクセルの新規ブックにはSheet1がデフォルト

とこのように、新規ブックが作成され、請求書シートが出来上がります。

しかし、「Sheet1」シートは新規ブックを作成したときにデフォルトで存在するもので、特に必要のないシートなんですね。

今回はこのSheet1を削除する処理を追加していきたいと思います。

Deleteメソッドでワークシートを削除する

ワークシートを削除する場合は、Deleteメソッドを使って

Worksheetオブジェクト.Delete

とすればOKです。簡単ですね。

上記のプログラムに

ActiveWorkbook.Worksheets("Sheet1").Delete 'Sheet1を削除する

を追加すれば、新たに作成したワークブックがアクティブになっているわけですから「Sheet1」を削除することができそうです。

ワークシートの削除は確認メッセージが出てしまう

上記の一行を追加して実行をしてみますと

エクセルでシート削除時に出る確認メッセージ

このように「シートを削除すると元に戻せません。また、一部のデータが削除される可能性があります。それでも問題ない場合は、[削除]をクリックしてください。」という確認メッセージのウィンドウが表示されてしまいます。

うーん、わざわざ確認する必要はないんですけどね…。

Application.DisplayAlertsメソッドで確認メッセージをオフにする

この場合、いちいちメッセージが表示されてしまうと面倒なので、確認メッセージの表示をオフにする方法をお伝えします。

Application.DisplayAlertsメソッドを使って

Application.DisplayAlerts = False

とすることで、全ての確認メッセージの表示をオフにできます。

一方で、オフにしたままですと不都合がありますので、確認メッセージが表示されるように戻す必要があります。その場合は

Application.DisplayAlerts = True

とすればOKです。

実行結果

シートの削除の処理の前後に確認メッセージのオフ/オンを入れて実行すると

エクセルVBAで確認メッセージなしでシート削除
このように「Sheet1」が有無も言わさずに削除され、「請求書」だけが残っている状態になります。

まとめ

以上、エクセルVBAで特定のシートを削除する方法確認メッセージをオフにする方法についてお伝えしました。

作成したプログラムをまとめました。こちらです。

Sub wsCopyNewBook()

    Dim wsInvoice As Worksheet '「請求書ひな形」シート

    Workbooks.Add '新規ワークブックを作成
    ThisWorkbook.Worksheets("請求書ひな形").Copy before:=ActiveWorkbook.Sheets(1) '新規ワークブックのsheet1の前にひな形をコピー

    Set wsInvoice = ActiveSheet 'コピーしたシートを変数にセット
    wsInvoice.Name = "請求書" 'シート名を変更

    Application.DisplayAlerts = False '確認メッセージをオフにする
    ActiveWorkbook.Worksheets("Sheet1").Delete 'Sheet1を削除する
    Application.DisplayAlerts = True '確認メッセージをオンにする

End Sub

確認メッセージはエクセルの仕様上、どうしても入れないとプログラムが不自然な場合が出てきますので、ぜひ覚えておいて頂ければと思います。

次回ですが、この新規で作成したワークブックを別名で保存、PDF出力して閉じるという処理を追加してみたいと思います。

どうぞお楽しみに!

連載目次:【脱エクセルVBA初心者】請求書を自動で作る際のテクニック集

「請求書を自動で作る」というニーズはとても多いですから、その際に便利な機能やテクニックをシリーズにてお伝えしていきます。脱エクセルVBA初心者をターゲットにしています。
  1. 【脱エクセルVBA初心者】新規のワークブックを作成、シートのコピーと名前の変更
  2. 【脱エクセルVBA初心者】確認メッセージを表示させずにワークシートを削除する方法

企業の原動力として期待されるCIOの日本企業の設置率は米国の1/4にも満たない

$
0
0

information

photo credit: I via photopin (license)


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

皆さん、CIOってご存知ですか?

Chierf Information Officerの略で、日本語では最高情報責任者です。

日本の企業ではほとんど見かけることのないCIOですが、世界では急激に注目度を集めつつあります。

2015年9月末、米サンフランシスコで開かれたゼネラル・エレクトリック(GE)の年次イベントで、CEO(最高経営責任者)のジェフリー・イメルトは気炎をあげた。「企業の生産性を高める最大の原動力、それはCIOです。社内のあらゆる活動の中心に、彼らがいるのです」

世界のGE、そのCEOが最大の原動力と言っていますよ。

なのに日本ではてんで見かけない…

さて、本記事では、CIOとは何か、また日本と米国のCIO設置状況について触れつつ、日本企業がCIOを設置すべきその理由についてお伝えできればと思います。

CIOって結局何をする人?

なんとなくスパイっぽい感じしますね。

CIOとは、企業内の情報システムや情報の流通を統括する担当役員。「最高情報責任者」「情報統括役員」などと訳される、企業の情報戦略のトップである。元は米国の企業で用いられていた呼び名だが、情報戦略に注目が集まるにつれて日本でも採用する企業が増えつつある。
引用:IT用語辞典

あー、情報システム部門の偉い人でしょ?事業部門の言われた通り、ちゃんとシステム運用してくれてれば、それ以上やることないんじゃないの?

などと思われるかも知れませんが、その感覚はもうだいぶ古臭い認識です。

日本政府もそのIT戦略の一環として「政府CIO」を設置し

ITの活用による国民の利便性の向上及び行政運営の改善に係る総合調整等を行っています。

その役割として、これまでの情報システムの最適化の役割に加えて

  • 情報活用による経営戦略の創造(Intelligence)
  • 全社横断のビジネス変革(Innovation)
  • ITガバナンス確立(Information)

といった、部門を越えて経営の変革を推進する主導的な役割として期待が集まっていると伝えています。

政府CIOポータル 

日本のCIO設置状況は悲惨な状況

一般社団法人電子情報技術産業協会の2015年10月の報告ですが、日米の「CIOの設置状況」は以下の図の通りでした。

日本企業のCIO設置率

米国企業のうち専任のCIOを設置している企業が73.7%、対して日本企業はたったの16.7%…なんと1/4にも届きません。

CIOが存在すらしていない企業も51%以上、つまり半数以上です。

…それは見かけないですよね。

ちなみにこの調査は従業員数300人以上の企業のみが対象となっていることに注目してください。

もう一つ調査結果を紹介します。

経済産業省による2014年5月の調査結果です。

経済産業省-企業のCIO設置率

対象企業の従業員数などはわかりませんが、CIOがいない企業は最新の平成24年で70.4%です。

てか、CIOの設置率が年々下がっているという衝撃の事実…。

なぜ設置しないのか、その理由としては

経済産業省-企業がCIOを設置しない理由

「必要がない」が48.1%…。

GEのCEOと熱の入りようが全く異なります。

日本においてどうして熱が冷めてしまっているのかについては以下の記事で紹介されていました。

日本企業においてCIOの必要性が明確に意識されたのは、1990年代に多くの企業がERP(統合基幹業務システム)を導入して業務改革を推進しようとした頃からだ。

だが、多くのERP導入プロジェクトは失敗する。利用部門の抵抗に抗しきれず大幅なカスタマイズを行ったため、業務改革にはならず、開発や保守で膨大なコストを積み上げただけという結果になった。

CIOがうまく活躍できなかった結果、「必要ない」という烙印を押されたままの流れで来てしまっているようです。

なぜ情報システムは活躍できないか?

私がこれまで数十社のIT活用状況を見てきた限りで言うと、会社全体としてITをうまく導入できている企業はなかなかありません。

ITを主力商品にしている企業もありますが、実はそういった企業でもCTO配下の開発部門だけがMAXでIT活用をしていて、営業部門や管理部門の活用度合いは決して高くない場合が多いのです。

じゃあ情報システム部門は何をしているんだ?ということになりますが、正直なところ明確に会社に貢献できている情報システム部門は少ないのが現状です。

というのも、その理由として

  • ITシステムの利活用に関して責任を負うボードメンバーがいない(つまり情報システム部門に責任を含めて丸投げ)
  • 情報システム部門の目標や評価が明確ではなく、たいがいはうまく評価できない
  • 裁量や権限が少なく、ITシステムの導入や活動に関係者すべての承認がいる
  • ITシステム導入に関して事業部門への意義の説明は不完全
  • ITシステム導入に関して発生する事業部門側のリソースや役割の調整が不完全

など、非常に厳しい状況に置かれています。

また情報システム部門以外のスタッフでいうと

  • 業務時間により報酬・評価がコミットされている
  • 生産性により報酬・評価がコミットされていない
  • ITの利活用またはそのスキルにより報酬・評価がコミットされていない

という状態では、生産性の向上や業務の変化を受け入れる理由がありません。

ITシステムの導入に関しては、事業部門はもちろんのこと、労務や人事考課などにもデリケートに関わってくる話になります。非常に社内で横断的な説明や協力支援が必要になりますので、ボードメンバーに責任者がいないと動かしづらいのです。

この状態で情報システム部門に任せていても、成果が上がるわけはありません。かわいそうです。

専任CIOを設置する意味

というわけで、そんな困難な状況を打破してくれるスーパーマンがCIOということになります。

専任CIOを設けることで

  • 経営メンバーなので全社的な、また部門を横断したプロジェクトを推進しやすい
  • 経営メンバーなので経営視点で行動でき、他の経営陣に意見もできる
  • 専任なのですべてのITに関わることの責任を負ってくれる
  • 専任なのでITに関する情報収集・発信に強い使命感をもって動ける

という動きを期待することができます。

さすがスーパーマンですね。

ぜひ、社内外の人材を見渡して、CIO候補を探してみてください。

しかし、そんな人材いないよ~、という場合もあるかも知れません。その場合は

  • コンサルをつけてCEOが兼務する
  • CIOを委託する

などといった方法があります。

CFOやCOOが兼務するのは、あまりうまくいきません。財務や事業のことを真剣に携わりながら、他のことも専門性をもって責任を持つという一人二役は非常に難易度が高いですし、従業員から見ると「兼務でできる内容」ということで本気度が伝わらない可能性があります。

弊社ではCEOのサポートとしてコンサルをさせて頂いている例もありますので、様子を見ながらスモールスタートしたい場合などは、そういう作戦もうまくご活用頂ければと思います。

ご興味あればぜひお問い合わせ下さい。

まとめ

以上、CIOの役割と国内外の設置状況、そしてその必要性についてお伝えしてきました。

シンプルにまとめると

  • コンピュータやインターネットをはじめITは既に仕事と切り離すことはできない
  • ではそのITに責任を持つ人間は誰なのか?

ということが問われているということだと思います。

その責任や成果は全社横断的になりますから、末端の現場やシステム部門に適当に負わすにはあまりにも重すぎる。

適任がいないとすると社長自らが背負う必要がありますが、CEOがITに深く精通していない場合は専任のボードメンバーを置く、または外部からの援助を求めるというのが自然な姿と思います。

いずれにしても

経営者がITを”我が事”と深く認識することが全ての前提である。

そこさえ腹が決まれば、打てる手段はいくつかあるものと思います。

お仕事効率化オタク向けのiPhoneカレンダー神アプリを探してみた

$
0
0

iPhoneカレンダーアプリ

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

えー、大変残念なことに、先日Sunriseアプリのアップデートが終了とのニュースが報じられました。

カレンダーアプリSunrise…まあ一言で言えば神アプリだったんですね。

いや、買収先のMicrosoftさんが

Outlookの開発は進められていき、Sunriseの機能や今後Sunriseで開発予定だったものはOutlookに統合されていくそうです。

と言っているそうですから、まあOutlookに期待をすればいいのですが、まあなんというかOutlookにはちょっともにょもにょした期待感というか、期待できないというか…

ということで、Sunriseの代わりとなる神級のiPhoneカレンダーアプリがないか探してみました!

素敵なカレンダーアプリとの出会いはあったのでしょうか!?

いくつか試したうち、3つのアプリについて紹介をしたいと思います。

仕事効率化オタク的なカレンダーアプリの条件

Sunriseに代わるiPhoneカレンダーアプリの条件ですが、私は仕事で便利に使いたいということもあり以下ポイントを重視したいと思います。

スマホでも見やすい・編集しやすい

私の場合はカレンダーは主にPCで操作することが多いのですが、外出時には当然カレンダーアプリで予定の確認は行いますし、突発的に予定が入ったり調整したりというときには当然iPhoneで操作をすることになります。

ですから、スマホの小さい画面でも

  • 予定が見やすい
  • 予定を編集しやすい

というのは、カレンダーアプリを選ぶ上で非常に重要なポイントになります。

Sunriseですが、まずこちらのリスト形式の画面。

iPhoneカレンダーアプリSunriseリスト表示

画面上部が2週間分のカレンダー表示、画面中央から下部がスケジュールの表示部分になっていまして、このスケジュール部分は上下にスルスルとスクロールして前後の予定を見ることができます。

もう一つが3日分の画面。

iPhoneカレンダーアプリSunrise3日間表示

やっぱりスマホだと3日分くらいがちょうど良いですね。この画面は左右にスクロールしますので前後の予定もすぐに確認できます。

イベント内に設定した住所からGoogleマップを呼び出せる

もう一つ重要なポイント、というよりはMustといっても良い機能が、Googleマップとの連携です。

Googleマップアプリにはルート検索をした場合にそのルートをカレンダーに登録してくれるという超絶便利な機能があります。

冒頭で紹介した記事に書いているのですが、Sunriseはカレンダーに登録した予定の場所をクリックするとGoogleマップアプリを呼び出して現在地からその場所へのルート検索までをしてくれる機能が搭載されています。

従いましてSunriseでは

  1. カレンダーアプリで予定の場所をタップ
  2. Googleマップで現在地からのルート検索
  3. ルート検索結果をGoogleカレンダーに登録

という一連の流れが実現できていたのです。

iPhoneアプリSunriseでGoogleカレンダーに移動予定も入れる
実はGoogleマップアプリは検索した経路をカレンダーに登録できるのをご存知ですか?さらに多機能カレンダーiPhoneアプリSunriseを使うとスムーズに移動予定をカレンダーに追加できますよ!

これを新しく見つけたカレンダーアプリでもぜひ踏襲したいと思っています。

PROPELa

まず最初に紹介するアプリはこちらのPROPELaです。

以下記事にも紹介されていますが

予定と場所情報さえ入力しておけばあとは自動で「いつ出発すれば予定に間に合うのか」を知らせてくれ、さらにGoogleマップと連動しているので目的地までのナビも超絶簡単に使えます。

これは期待できそうです。

画面表示・編集

PROPELaの画面はこちら。

iPhoneカレンダーアプリPROPELaリスト表示

Sunriseと似ていて、かつスタイリッシュです。

上部は2週間単位になっていまして、前後を見たい場合はそのエリアを左右にスライドします。

下部はSunriseと同様に上下にスクロールできますが、上記に表示されている2週間以外は上部をスライドして切り替えないと見れませんね。

ちなみに例えば3日分などの別表示はないようです。

Googleマップとの連携

各予定を開くとこのような画面です。

地図の部分をタップすると、「現在時刻からルートガイドします」→「OK」でGoogleマップが立ち上がります。

iPhoneカレンダーアプリPROPELaマップ連携 iPhoneカレンダーアプリPROPELaマップ連携確認

ここは合格ですね。

ただ、どうしても住所をタップしたくなるのですが、ここは何の反応もしません。

ダッシュボード

PROPELaのウリとして自動で次の予定の開始時刻、そこまでの移動時間などを表示してくれます。

iPhoneカレンダーアプリPROPELaダッシュボード

なんですけど、私は机に座っているときはPCのGoogleカレンダーとChrome拡張の「Checker Plus For Google Calender」で確認をしていますので、アプリでこの機能はあまり使わないかなと思いました。

お仕事効率化に絶賛おすすめ!超便利なGoogleクローム拡張5選
お仕事効率化をうたっておきながら、Googleクローム拡張機能について紹介するのを忘れておりました…。ということでお仕事効率化視点で厳選したおすすめのGoogleクローム拡張機能5個をドドンと紹介します!

次から次に外出のアポイントが入っている営業さんなどには向いているかも知れません。

Googleカレンダー

次は大本命の本家Googleカレンダーアプリです。

Googleカレンダー
(2016.06.07時点)
posted with ポチレバ

当然ながらGoogleカレンダー自体やGoogleマップとの相性はバッチリでしょうから期待できそうです。

画面表示・編集

画面表示はデフォルトでリスト、3日間、週間の3種類あります。

リスト表示と3日間表示はこちらです。

iPhoneカレンダーアプリGoogleカレンダーリスト表示 iPhoneカレンダーアプリGoogleカレンダー3日間表示

リスト表示はオシャレですね。ランチやディナーなどイベント名から予測して帯のデザインを変えてくれます。これはポイント高い。

3日表示は安定感ありますが、リスト表示のほうがテンションは上がりますね。

ちなみに、週間表示は…まあ見づらいので使わない感じです。

PC版のGoogleカレンダーと同様に、長押しで引っ張ったりできそうな雰囲気なのですが残念ながらできません。時間変更や延長・短縮は各予定をタップして編集する必要があります。

Googleマップとの連携

当然できます。予定をタップして開いて、そこから住所をタップです。

iPhoneカレンダーアプリGoogleカレンダーマップ連携

これでGoogleマップが呼び出せます。

カレンダーの切り替えについて

私は自分のカレンダーを「仕事用」と「プライベート用」の二つのカレンダーを使い分けて使っているのですが、Googleカレンダーアプリはなぜか予定の編集からカレンダーの切り替えができません。

他のカレンダーアプリはできるんですが…。

プライベートの移動時間を予定入れたい場合も、いったん「仕事用」に入ってしまうのです。これはほんのり困っちゃう点です。

Calendars by Readdle

さて、しんがりはCalendars by Readdleです。

画面表示・編集

画面表示はリスト、デイリー、週間、月間の4種類です。

スマホで使う場合は、リストかデイリーがオススメです。

iPhoneカレンダーアプリCalendars by Readdleカレンダーリスト表示 iPhoneカレンダーアプリCalendars by Readdleカレンダーデイリー表示

いずれもなかなか見やすいです。実はデイリーのほうですが、予定を長押しをすると…

iPhoneカレンダーアプリCalendars by Readdleカレンダー予定のドラッグ

このようにドラッグで移動ができるようになります!また、右上・右下に表示されるピンチを引っ張って予定時間の短縮や延長もできます。

これはものすごいポイント高いです。

また予定の編集時も

iPhoneカレンダーアプリCalendars by Readdleカレンダー専用キーボード

このようなカレンダーならではの独自キーボードが搭載されています。この点も特徴的ですね。

Googleマップとの連携

予定をタップすると開くポップアップから住所をタップして

iPhoneカレンダーアプリCalendars by Readdleカレンダーマップ連携 iPhoneカレンダーアプリCalendars by Readdleカレンダーマップ連携確認

「この場所をマップアプリで見ますか?」→「はい」をすると…

Apple地図

残念…!Appleのマップか~…!

などとあきらめかけていたら、「設定」→「表示設定」→「地図アプリ」というマニアックな場所に

iPhoneカレンダーアプリCalendars by Readdleカレンダー表示設定

使うマップの設定が…!迷わず「Google」を選択。これで無事にGoogleマップの条件もクリアしました!

機能追加について

基本的な機能は無料で通ことができますが、繰り返しイベントの登録、メンバーの招待などは有料で追加購入できる機能になります。

でもこのへんは、PCのGoogleカレンダーでも対応はできますので、しばらく様子を見ながら必要に応じて、個々の機能を購入していけばよいかと思います。

まとめ

他にも色々と試したのですが、上記3つがオススメですね。

私の場合はCalendars by Readdleがかなり気に入りましたので、しばらく使ってみようと思います。

ぜひご参考頂ければと思います。

某メガバンクがMFクラウドとの口座連携できていなくて入出金明細の取得が大変だった話

$
0
0
tab

photo credit: img_3319 via photopin (license)

さて、当社の設立は2015/6/16でしたから、なんとか1期目を乗り越えることができました。

ということは期末ですから、決算となります。

初めての決算…

一応、弊社はIT業ですから棚卸なども必要ありません。

MFクラウド会計で、全ての銀行口座、クレジットカードも連携していますし

フリーランス・副業の経理作業はMFクラウド確定申告を使うのが良いです
個人事業主にとって避けては通れない経理と確定申告…それを断然楽にするクラウド会計ソフト「MFクラウド確定申告」について、その素晴らしさとちょっとしたテクニックについて紹介したいと思います。

経費精算もMFクラウド経費アプリでばっちりです。

MFクラウド経費アプリで領収書と交通費の経費精算が超簡単!
MFクラウド会計・確定申告ですが、このたびMFクラウド経費アプリがリリースされました!レシートや領収書などの経費や交通費などの仕訳が超簡単になりましたので、その使い方をお伝えしていきます。

だから楽ちん。

…などと思っていたら、うっかり某メガバンクの口座連携ができていないということに気が付きまして、そこからいくらかすったもんだしています…。

皆さんには同じ轍を踏んで欲しくないので、自省の意味も込めて書いておこうと思います。

某メガバンクの口座連携ができていないことが発覚

6月に入りまして決算の準備を進めている中、税理士さんから「日本政策金融公庫の返済が帳簿上確認できなかったのですが、どうなっていますか?」という問い合わせがありました。

おや?

公庫の返済に関しては以下記事に書いています通り某メガバンクさんから毎月所定の額を返済することになっていました。

三菱東京UFJ銀行と楽天銀行の法人口座開設の手順と審査について
晴れて法人設立したら、法人用の銀行口座を速やかに開設する必要があります。弊社では三菱東京UFJ銀行と楽天銀行を開設したのですが、それぞれ私が踏んだ手順や審査などについてお伝えしたいと思います。

特に返済ができていないという話もありませんでしたので、安心していたのですが…

急いで確認をしてみます。

こちらの銀行さんは電子証明書連携です。まずMFクラウド電子証明書連携アプリで証明をして、MFクラウド会計上でワンタイムパスワードを入力して、連携状況を確認してみます…

MFクラウド会計での重要なお知らせ

おや?

「本サイトのログイン頂き、重要なお知らせをご覧ください。」

こちらの銀行さんのインターネットバンキングはBizSTATIONというサービス名なのですが、なんと今時Internet Explorerしか対応をしていないという、ステキ仕様

今ではVBAのスクレイピングでしか起動しないIEを起動してBizSTATIONにアクセス、そしてログインをしてみますが…「重要なお知らせ」とやらなんとも出ていない様子でした。

うーむ。

MFクラウドのチャットサービスの返事は超速

そこで、超頼れるMFクラウドのチャットサービスで問い合わせてみることに。

問いかけると、ものの10秒程度で超速反応。

そして聞いてみると、「お使いの銀行ですと、ご利用プランによって明細が取得できないという事象が以前もございました」的な回答。

おっと。

BizSTATIONには通常のBizSTATIONと、BizSTATION Lightという二つのプランがあり、弊社が登録していたのは「Light」のほうだったのです…!

おそるおそるBizSTATION Lightの紹介ページにアクセスしてみると…

BizSTATION Lightについてのお知らせ

(*1)BizSTATION Lightでは入出金明細はご利用いただけません。(初回のご利用から90日間のみお試しいただけます)

だー…!

いや、私が悪いんです。ちゃんと見ないで登録したものですから。

まさかネットバンクで明細がとれないサービスがあるなんて…思ってもみなかったんですもの。

…じゃあ、ネット経由でできることは何?ということなんですが主に

  • 振込
  • 残高照会

です。

MFクラウド会計では、残高だけ取りにいっていたわけですね。…なんか切ない。

最後の手段、通帳記帳

仕方がありません、通帳の記帳をしにいきます。

さすがメガバンク。記帳ができるATMがアチコチにありますよ。家から歩いてすぐにあります。

で、早速記帳をしてみると…

合算記帳

なにこれ?

「合計記帳」って、それじゃ日付も中身も何にもわかんないじゃない?

また某メガバンクさんのWebサイトを確認してみると

当行では、普通預金・貯蓄預金のお取引明細を通帳にご記帳いただいていない場合、ご入金・ご出金の合計件数・合計金額をまとめて記帳(合計記帳)させていただいております。

だそうな。

…そんなん、記帳の意味ないじゃん、って思うの私だけでしょうか??

本当に最後の手段、店舗に赴く

仕方ないので後日店舗に赴きます。

支店はちょっと隣の駅になりますので、アポイントの予定に合わせて早めに家を出て立ち寄りました。

書類を書きまして窓口に提出。

「お届け印があれば早くて店頭で明後日、お届け印をお持ちでないならご郵送で10日後ほどにお送りします」

という衝撃のご案内。

え?今日もらえないの…?

ってか郵送って10日間も??

もうね、ここまでくると苦笑ですよ。窓口のお姉さんには悪いのですが、本当に笑っちゃいました。

  • ネットでは見られない(正確には月額1,728円/月払えば見られる)
  • 通帳の記帳も合算で意味なし
  • 店舗でもすぐには出してはくれない

とまぁ、こんな感じです。

窓口のお姉さん、気を利かせてくれて「今後のご記帳の際に合計記帳をしないように設定できますが、させて頂きましょうか?」とのこと。

「是非…!」

てか、できるならデフォルトで合算しないでおくれ…。

ということで、来期の決算時には通帳の記帳でおそらくOKになりました。ちゃんちゃん。

まとめ

あまりにも周りを便利なITで固めすぎていると、こういった事象への耐性が低くて風邪をひいてしまいそうでした。

振り回されないようにするための教訓として

  • 全ての銀行で同じようにサービスしているだろうと思いこまない
  • 合算記帳は最初から設定解除をしてもらう
  • 決算準備は余裕をもってやる

ということでございました。

皆さまも貴重な時間を奪われることなきよう、お気をつけ下さい。

チャットワークのiPhoneアプリアップデートで追加されたシェアエクステンションとは

$
0
0

チャットワークのシェアエクステンション

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

5月末で10万社の利用を突破した我らがビジネスチャットの雄、チャットワーク

もう皆さんご存知だとは思いますが、 そのチャットワークのiPhoneアプリが大幅アップデートされました。

デザイン、UI、メッセージ入力、メッセージ検索、アドレス帳連携、パスコード&指紋認証、位置情報送信、3D Touch機能などなどいっさいがっさいが刷新されております。コードをスクラッチから書き直すことで安定性も向上したとのこと。

Android版も一部機能を追加しています。

嬉しいニュースですね~!

まだダウンロードされていない方はこちらからどうぞ。

さて、そんなチャットワークですが、今回のアップデートで私が個人的に大注目している機能があります。

その名も「シェアエクステンション」

なんだそれ?って感じの方もいらっしゃるかも知れませんが、このシェアエクステンション機能が追加されたことにより、スマホでのお仕事利用体験がグッとパワーアップするんですね。

では、チャットワークのiPhoneアプリアップデートの隠れた目玉機能、シェアエクステンションについて紹介していきます。

シェアエクステンションとは

シェアエクステンションとは、他のアプリと連携してシェアをするための拡張機能です。

画面で見て頂くと一目瞭然なのですが、例えばブラウザSafariであれば、下部のシェアボタンから開く

Safariブラウザのシェアアイコン iPhoneのシェアエクステンション

この機能です。

横にスライドをしていくと色々なアプリが並んでいますが、このいずれかを選ぶことで、現在ブラウザで開いているページについて

  • Pocketする
  • Twitterでツイートする
  • Evernoteに保存する
  • LINEでシェアする
  • 1PasswordでIDとパスワードを埋める

などが可能になります。

今回のアップデートでは、そこにチャットワークが加わったということです。

シェアエクステンションにチャットワークを追加する方法

ではシェアエクステンションにチャットワークを追加する方法をお伝えします。

まずSafariでもなんでも良いので、シェアエクステンションを開きます。

一番右までスライドすると最後に「その他」というアイコンがありますのでタップ。

シェアエクステンションからその他を選択 シェアエクステンションからアクティビティを開く

「アクティビティ」という画面が開きますので、その中からチャットワークを探してスイッチオンしてください。

これでOKです!

シェアの仕方ですが、他アプリと同様です。

例えばとあるページをチャットワークに投稿したい場合は、シェアエクステンションから「ChatWork」をタップ。

シェアエクステンションからChatWorkを選択 シェアエクステンションからチャットワークに投稿

投稿先のチャットルームを選んで、投稿。

これでOK。

チャットワークにページがシェアされた

ばっちり投稿されていますね。

チームメンバーや取引先に関連したニュースや記事を共有したいときに便利だと思います。

ちなみにですが、シェアアイコンの配置はアイコン長押しで場所を変更できますからね。チャットワークもすぐに使えるように左側に配置してあげましょう。

スマホからPCに写真や動画を送りたいとき

応用編なのですが、撮った写真や動画をさっとPCに送りたいときにもチャットワークのシェアエクステンションが便利です。

ここではチャットワークならではのクールな機能、マイチャットが大活躍です。

iPhoneで写真を撮ったらそのままシェアアイコン、そして「ChatWork」を選択します。

写真からシェアアイコンを選択 シェアアイコンからChatWorkを選択

マイチャットを選択して、テキスト入力して、投稿。

シェアエクステンションでチャットワークに投稿

これで無事に画像を送れました。

チャットワークに送られた写真

なんかプレビューでは横になっていますが、画像はちゃんと縦で保存されていますのでご安心下さい。

もちろん、チャットワークアプリ内で撮影して送ることもできますが、既に撮影済みの写真だったり、スクリーンショットを送りたいとき、または便利です。

また、この方法は一枚ずつしか送れません。まとめて送りたいときなどはDropboxなどのほうが便利ですので、一枚だけちょっと送りたいときに使うと良いと思います。

あ、ちなみにですが、くれぐれもマイチャット以外に送らないように注意して下さいね。チャットワークアプリで最も上にあるチャットがデフォルトになっているようです。

まとめ

以上、チャットワークのiPhoneアプリアップデートで追加された機能、シェアエクステンションとその使い方についてお伝えしました。

通常のシェアもそうなのですが、「マイチャット」があるというのがチャットワークの強みの一つだと思うんですよね。

私は日々の色々なものをマイチャットに自動で通知されるようにしますし

Google Apps ScriptでTwitterの検索結果を自動でチャットワークに通知
Google Apps Scriptを使ってTwitterのエゴサーチ結果をチャットワークに通知する方法を紹介していきます。IFTTTとスプレッドシートを活用し初心者でもわかりやすい方法です。
GASでチャットワークにGoogleアナリティクスの前日レポートを自動送信
以前、Googleアナリティクスの日次レポートを自動記録する方法をお伝えしましたが、今回はさらに発展をさせてそれをGoogle Apps Scriptを使ってチャットワークに毎朝自動で通知します。

自分向けのメモやタスクを追加する場所という使い方もあります。

今回、それに加えて、写真や画像、記事などを置いておくということが簡単にできるようになったというわけですね。

さて、チャットワークですが、次のアップデートなどでPCブラウザ版のデザイン/UI刷新などが期待できちゃったりするんでしょうか。

楽しみに待ちましょう!

WordPressで今見ているページのテンプレートファイル名を管理バーに出力してくれるプラグイン

$
0
0

Show Current Template

こんにちは。くろゆきです。

WordPressブログをちょっとカスタマイズしたいのに、テーマ内のどのファイルを弄れば良いのかわからなくてお手上げ状態、なんてことはありませんか?

もしくは一生懸命変更してもなぜか反映されないっっ!と悩んでいたら、まったく関係のないファイルを弄っていた、なんてことも……、自分では正しいファイルを修正していると思い込んでいるので、なかなか気づけないんですよね。

しかし、今回紹介するプラグインを導入すると、この手のミスはゼロになります。なにせ編集したいページをみたら、管理バーに編集すべきテンプレートファイル名が表示されているんですから、ミスのしようがありません。

というわけで、WordPressのテーマをカスタマイズされる方はうっかりミス防止のために! WordPressカスタム初心者様はテーマ構造の把握のために! 大声でおすすめしたい便利プラグイン「Show Current Template」のご紹介です。

「Show Current Template」を有効化するとこうなる

「Show Current Template」をインストールし有効化すると、管理バーに以下のように、今見ているページで使用されているテンプレートファイル名が表示されます。

管理バーにテンプレートファイル名

それだけではなく、複数ファイルを読み込んでいる場合、クリックするとそれらも表示してくれます。

開くと読み込まれているファイル名全てが表示されている

ファイルの相対パスも表示してくれているので、編集するテーマフォルダを間違えることも無し!

single.phpがインクルードしているファイルも一目瞭然ですので、どのようにパーツ化されているかも把握しやすいです。

テーマファイルの構造と成り立ちを理解するのに、これ以上はないツールですね!

「Show Current Template」インストール方法

インストール方法は簡単です。
通常のプラグインと同様、「Show Current Template」と検索し、インストールボタンを押すだけ。

Show Current Template インストール画面

有効化以外に、特別な設定はありません。

実際にテーマを変更してみよう

FTPを使用せず、管理画面からテーマファイルを弄って変更する場合の例でご説明しますね。

今回はシングルページの日付部分「投稿日:」を「DAY:」と変更してみます。

テーマ名を確認

まずテーマファイル名を確認します。

ファイル名をチェック

「single.php」を編集すればよいことがわかりますね。

※FTPで作業する場合は併せてファイルの相対パス「 themes/blog/single.php」も要チェックです。うっかり別テーマフォルダのsingle.phpを編集していた、なんて間違いはよくあります。管理画面から変更する場合は、現在使用中のテーマだけを編集しますので、チェックは不要です。

テーマファイルを管理画面から編集しましょう

管理画面の左メニューから「外観」>「テーマの編集」と進みます。

テーマの編集へ移動

右側にテーマ内のテンプレートファイル一覧が表示されます。簡単な解説付きです。親切ですね。

single.phpをみつける

親切が故にちょっと見つけにくくなっている「single.php」は赤で囲った部分に有りました。クリックしてソースを表示させます。

ソース内を「投稿日」で検索すると、

投稿日:<?php the_time('Y/m/d'); ?>

という表記が見つかりました。<?php the_time('Y/m/d'); ?>は投稿の日付を取得して出力してくれるテンプレートタグですね。

DAY:<?php the_time('Y/m/d'); ?>

「投稿日」を「DAY」に書き換えて、エディタ下の「ファイルを保存」ボタンを押します。

ファイルを保存

これで変更完了です。サーバー上のテンプレートファイルが直接書きかわりました。

シングルページを更新して確認してみましょう。

変更が反映されている

ちゃんと変更されてますね!迷うことなくテンプレートファイルの編集ができました!

バックアップは必ず取っておこう

ここでひとつ注意点です。このやりかたはサーバのテンプレートファイルを直接変更してしまうので、ミスをするとサイトの表示が崩れます。

ブログの投稿エディタのようなリビジョン機能はないので、自分でバックアップをとっておく必要があります。

編集画面をイジる前に、Ctrl+A & Ctrl+C で全体を選択コピー。

別ファイルとして保存(UTF-8対応のテキストエディタ推奨)して、バックアップを作成しておきましょう。

このとき使用するテキストエディタは、UTF-8に対応しているものが良いです。Windows付属のメモ帳だと文字化けしてしまう危険があります。

「Show Current Template」のまとめ

WordPressのテーマは、カスタムするにしろ自作するにしろ、複雑な条件分岐が絡んでいて、けっこう一筋縄ではいきません。

「どのテンプレートファイルを修正すればいいのか?」は、慣れない方が必ずつまづくハードルの一つですが、このプラグインがあれば迷うこと無くカスタマイズにチャレンジする事ができます。

WordPressの勉強はしつつ、実際にテーマをいじりながら「このページはこのテンプレートファイルが反映されているのね」という実感を重ねていくのも、スキルアップの速道ではないかなぁと思います。

Viewing all 2098 articles
Browse latest View live