echoを100%使いこなすために、使い方や便利テクニックなどを発信していきます。[黄銅]こんにちは~。「デザインもできるシステムエンジニア」のあつもり(@atumori17)です。今日も業務効率化のアイデアを発信していきますっ!前回は「日付の曜日を判定してセルに入れる方法」を紹介しました。日付と曜日をワークシートに自動で入力するエクセルVBAプログラムの紹介です。日付だけでなく曜日まで入れられるようになるとグッと実用性がアップしてきますよね。スケジュール表や業務進捗表などを作るときに役に立つと思います。縦並びだけでなく横並びも選べるようにしました。04:29今回はさらにもっと使いやすくするために、「エクセルVBAでWebAPIを使って祝日を判定する方法」を紹介していきます。祝日の判定はエクセルの関数などでできないので、WebAPIを使います。スケジュール表を作るときなどに、祝日の判定までできるとさらに実用性が上がりますよね。まとめ祝日を判定するWebAPIWebAPIは以下のサイトのものを使わせていただきました。API国民の祝日チェックs-proj.comシンプルでとってもわかりやすい!こういう便利なものを作ってくれるとホント助かりますよね~。実際にプログラムで使用するURLはhttp://s-proj.com/utils/checkHoliday.phps-proj.comを使います。このURLの後ろにパラメーター(日付のデータ)を付加してサーバーにリクエストを送ります。http://s-proj.com/utils/checkHoliday.php?kind=h&date=20171128こんな感じでサーバーにhttpリクエストを送ります。するとWebAPIが「20171128」は祝休日なのかを判定してくれます。判定の結果は平日ならelse祝休日ならholidayという値を返してくれます。前回のプログラムを修正するそれでは実際にプログラムを作っていきます。前回使用した「今月の日付と曜日を入力.xls」を開いて修正していきます。UserForm1のSubプロシージャ「CommandButton1_Click」に次の段落で説明するコードを貼り付けます。サンプルコードを貼り付ける「CommandButto1_Click()」に貼り付けるコードです。Functionプログラムコードの解説それではプログラムコードの解説をしていきます。重要なポイントに絞って説明していきます。プログラム全体の流れは以下のようになります。今月の月末の日にちを取得する処理対象の列番号または行番号を取得する行か列どちらが選択されたかを調べるセルに日付を入力する日付から曜日を取得して隣のセルに入れるWebAPIを使って祝日休日の判定を行い、日付の色を変える1~5では前回の記事で紹介していますので、6のWebAPIを使うところからの説明をしていきます。それでは早速WebAPIを使っていきます。XMLHttpRequestオブジェクトを作成するXMLHttpRequestオブジェクトはサーバーとクライアント間でデータ通信を行なうためのAPIです。オブジェクト変数をObject型で宣言します。Object続いて先ほど宣言した変数にXMLHttpRequestオブジェクトをセットします。CreateObject(“MSXML2.XMLHTTP”)全体のプログラムコードでは81~83行目になります。CreateObject("MSXML2.XMLHTTP")ここで注意点が1つあります。XMLHttpRequestオブジェクトをエクセルのVBAで使用するには参照設定を行う必要があるんです。設定しないとエラーが表示されますが、事前に設定しておいたほうが良いでしょう。openメソッドでHTTPリクエストを作成するWebAPIを使う準備ができましたので、今度はサーバーに対してHTTPリクエストを送ります。サーバーに送る前にリクエストを作成する必要があります。リクエストの作成はopenメソッドを使います。Boolean第1引数にリクエストの種類を指定します。今回の場合、URLに日付のデータを付加して送るのでリクエストはGETを指定しています。第2引数にはリクエストを送る先のURLを指定します。さいほど説明したようにURLに日付のデータを付加して指定します。http://s-proj.com/utils/checkHoliday.php?kind=h&date=20171128こんな感じになります。第3引数は同期通信か非同期通信を指定します。Trueで非同期通信、Falseで同期通信になります。今回の場合、Falseで同期通信を指定しています。サーバーから応答があるまで次の処理は行わないようにしています。sendメソッドでHTTPリクエストを送る今度はopenメソッドで作成したHTTPリクストをsendメソッドを使ってサーバーに送ります。send(サーバーへ送るデータ)引数にはサーバーへ送るデータを指定します。POSTの場合はここで指定しますが、GETの場合はopenメソッドの第2引数で既に日付を付加したURLを指定していますので、NULLを入れます。responseTextプロパティで祝日判定結果を取得するサーバーにリクエストを送ったので、その返答をもらわなければいけませんよね。そのためにはresponseTextプロパティでサーバーから返ってきたレスポンスデータを文字列として取得します。XMLHttpRequestオブジェクト.responseTextこのレスポンスデータを独自関数であるCheckHolidayの戻り値としています。平日ならelse祝休日ならholidayが戻り値として渡されるわけですね。openメソッドからresponsTextプロパティを使用するところまでの流れは以下になります。全体のプログラムコードでは106~110行目になります。HttpReq.responseTextColorIndexプロパティで日付の色を変えるCheckHoliday関数の戻り値によって日付の色を変える処理をします。セル内にある文字の色を変えるには次のようにします。今回の場合は祝休日の場合は赤文字にするようにします。全体のプログラムコードでは44~47行目、57~60行目になります。Ifプログラムコードの解説は以上です。祝休日を判定してセルに入れるプログラムの動作確認それでは実際に出来上がったプログラムを動かしてみましょう。ワークシートの起動ボタンを押します。日付入力ボタンをクリックして、列を選択しOKボタンをクリックします。今月の日付と曜日が入力されました。祝休日の日付はきちんと赤文字になっていますね。行を選択した場合はこんな感じになります。まとめいかがでしたか?今回の内容をまとめます。XMLHttpRequestのopenメソッドとsendメソッドを使いサーバーにhttpリクエストを送信するレスポンスデータをresponseTextプロパティを使って文字列で取得するColorIndexプロパティで祝祭日に色をつける以上「エクセルVBAでWebAPIを使って祝日を判定する方法」でした。おつかれさまでした~。[黄銅]レクタングル大336×280レクタングル大336×280シェアするツイートフォローするあつもりよく読まれている記事はこちらエクセルVBAのローカルウィンドウで変数の値を見ながらデバッグする方法ローカルウィンドウとはプログラムコード内で使われている変数を全て表示してくれるウィンドウです。デバッグ時に変数にどんな値が入ったのかなどの動きがわかるためとっても便利です。VBA初心者がプログラムの動きの理解を深めるのにも役に立ちます。今回は僕が実際に登録した「社内SE転職ナビ」という社内SEを専門的に扱った転職エージェントについてです。実際に行った面談内容と会員登録して良かった3つのことをお伝えしていきます。記事を読むエクセルVBAでイミディエイトウィンドウを使ってデバッグする方法イミディエイトウィンドウはデバッグ役立つ便利な機能が備わっています。プログラムの中にある変数や関数の戻り値を表示させる、関数の実行結果を見る、計算をする、エクセルブックやシートなどのプロパティを見るなんてことができちゃいます。記事を読むエクセルVBAでダイアログボックスを表示させ特定のファイルを1つだけ開く方法エクセルVBAを使ってエクセルファイルを開く方法はアプリケーションを作っていくときに基本となる技です。業務効率化ツールを例に挙げても、まずはエクセルファイルを読み込ませて、そのデータを直接加工したり、参照したりする場合が圧倒的に多いので覚えておくと便利です。記事を読むエクセルVBAで同じデータが切り替わる項目ごとに空白行を挿入する方法エクセルシートの見栄えを整えていると項目ごとに空白を入れたいっていうケースがあると思います。そこで今回はVBAを使って「項目ごとに空白行を挿入する」プログラムを作っていきます。職場など複数人で作業する場合、エクセルの集計機能などを使うより便利だからです。大量のデータが入った表などをエクセルで表示させると、背景色が一色だとどこまでデータを見ていたのかわかりずらいことがあります。そこで1行おきに色をつけて見やすくするというアイデアがあると思います。条件付き書式とエクセルの数式を組み合わせる方法でなく、VBAで実現する方法を紹介します。変数や式などをウォッチ式を登録しておくことで、デバック時にリアルタイムで変数の値やオブジェクトのプロパティなどを見ることができます。デバッグ時に変数の値などがどのように変化していくかがわかるのでとっても便利です。記事を読むエクセルVBAのイミディエイトウィンドウで文字数をカウントする方法プログラムを書く時にも文字数を調べたい場合があります。データベースと連携するプログラムを作るときなどで。データベースはテーブルの列ごとに文字数が決まっていますので、この文字数を意識する必要があります。そんなときにイミディエイトウィンドウを使ってサクッと調べられると便利ですよね。記事を読むエクセルVBAでダイアログボックスを使ってファイルを非表示で開く方法ダイアログボックスを表示させてエクセルファイルを非表示で開く方法を紹介します。プログラムからエクセルファイルを開きたいけど、画面に表示させないでシート上のデータだけを取得したいという場合に役に立つ技です。Visibleプロパティを使うことでファイルを非表示にすることができます記事を読むエクセルVBAで集計や並び替えを使わず1行おきに空白行を一括で挿入する方法エクセルシート上に入力されたデータの見栄えを整えたりする時などに、1行おきに空白行を入れたいケースがあると思います。Ctrlキーでを使う方法、並び替えを行う方法などがありますが、大量のデータでは非常に時間がかかります。そこでエクセルVBAで一括で空白行を入れる方法を紹介します。コメントをキャンセルメールアドレスが公開されることはありません。*サイトプロフィールはじめまして!あつもりです。当ブログをご覧いただきありがとうございます!僕は埼玉県でSEブロガーをしています。結婚してから、1か月後に会社が倒産するなど、山あり谷ありの人生を歩んできました。転職は過去に3回経験しており、2017年に、某プリンタ会社から完全リモートワークのシステム開発会社へ転職しました。今は、ずっとやりたかったリモートワークという自由な働き方を満喫しています。echoを中心に情報を発信しています。