企業研修講師派遣のBESTグループ
出張パソコン教室ITスクール
webコンサルティングスクール
パソコンの家庭教師BEST
Q.Excelでスケジュール管理などを行っていて、日程が休日かどうかを判定するのにWEEKDAY関数を使っていますが、これだと祝日や会社の創立記念日などの休日が判定できません。何か良い方法はありませんか?
A.ユーザー定義関数で、休日かどうかを判定する関数を作成しましょう。
Excelでは、VBAのFunctionを、Excelのワークシートで使うことができます。これをワークシート関数に対して、「ユーザー定義関数」と呼んだりします。まずは下記のコードを「標準モジュール」の関数(Function)として作成して下さい。
Function IsNonWorkDay(d As Date)
IsNonWorkDay = False
If WorksheetFunction.Weekday(d) = 1 _
Or WorksheetFunction.Weekday(d) = 7 Then ‘★土日の判定
IsNonWorkDay = True
Else
If Month(d) = 4 And Day(d) = 1 Then ‘★創立記念日
IsNonWorkDay = True
End If
End If
End Function
これでユーザー定義関数「IsNonWorkDay」ができました。先にこの関数のコードを説明しましょう。まず、この関数は何もなければFALSEつまり休日でないとの結果を返します。この後のIF分では、休日となる条件を判定し、その場合にこの関数の戻り値をTRUEすなわち休日として返すような作りになっています。ひとつめの★部分で、ワークシート関数のWeekdayを使用して、この値が1(日曜日)または7(土曜日)の場合にTrue(つまり休日と判定する)を返します。もしここで休日でなければ、次の★の部分の処理で、土日以外の休日判定をします。この例では、4月1日が会社の創立記念日で休日と判定されるようになっています。この後に、例えば国民の休日の日付などを追加することで、IsNonWorkDay関数で全ての休日を判定できるように処理することができます。
さてこのIsNonWorkDay関数は、ワークシートのセル上で、普通のワークシート関数と同じように使用できます。試しにA1セルに任意の日付を入力し、A2セルに =IsNonWorkDay(A1) を入力してみましょう。TRUEと表示されれば休日、FALSEと表示されれば休日ではありませんが、期待した結果になっていたことと思います。
このように、ユーザー定義関数を使うことで、セルの式がすっきりするというメリットがあります。ただし、逆のデメリットとしては、自分で作ったユーザー定義関数の入ったシートは、きちんと説明しないと、別の人が使う場合にかえってわかりにくかったりします。
その点を踏まえて、状況に応じて便利に使っていきましょう。
Q.Excelのマクロ付きブックで、商品管理を行っているのですが、商品毎にECサイトの価格をチェックする業務があります。その際、商品にあったECサイトを表示するボタンを設けたいと思うのですが、VBAからインターネットエクスプローラーを起動し、サイトを表示することはできるのでしょうか。
A.Excelマクロでは、InternetExplorer.Applicationというオブジェクトを使用すれば簡単に実現できます。
まずは簡単なやり方でインターネットエクスプローラーの表示方法を確認しましょう。
下記は、マクロの中で書いたアマゾンのサイトを表示させるコードとなります。
Sub ExecIE()
Dim ie As Object
Set ie = CreateObject(“InternetExplorer.Application”)
ie.Navigate “http://www.amazon.co.jp” ‘★
ie.Visible = True
End Sub
Excel画面の「開発」リボンの「マクロを表示」から上記関数を選択し直接実行して動作に問題がないか確認して下さい。
それができたら、後は簡単ですね。コード中の★の部分を、商品にあったECサイトのアドレスが代入されるようにプログラムを変更すれば良いのです。
このようにして、単純なホームページの表示は実現できます。
ここからは、さらに発展した使い方です。
ECサイトでは、多くのサイトで、サイトのアドレス(URL)にパラメーター(商品名や、ISBNなど)を付けることで、商品ページをダイレクトに表示できるような仕掛けがあります。
例えば、Amazonでは、”http://www.amazon.co.jp/gp/search?field-keywords=” の後ろに、検索キーワードを入れたURLで、検索結果のページがすぐに開きます。
※ただし、ここで指定できるのは英語のみ。日本語は、「エンコード」という処理をしないと正常に処理されません。これについては、興味ある方は調べてみて下さい。
この方式が分かれば、Excel上に記入した、ある商品の名前をamazonで検索した状態でインターネットエクスプローラーを開く、という処理が自動化できるということになります。
アイデア次第でいろいろ活用できそうですね。是非、ご活用下さい。
Q.マクロを使って、あるフォルダに集められた週報のファイルを一覧にして作業をすることになりました。フォルダのファイルを一覧して表示するようなVBAのコマンドはあるのでしょうか。
A.Excelマクロの関数「Dir」を使用すれば、比較的簡単にファイルの一覧を取得できます。
週報が格納されているフォルダを c:\週報 とした場合の、まずはコードを先に示します。
Excelのマクロ付きブックを新規で作成し、「開発」リボンからVisual Basic Editorを起動して下さい。
ファイルの一覧の出力対象とするシートをVisual Basic Editorの左ペインから選択し、コードエディタから下記を記述します。
Sub ファイル一覧
Dim row as Integer
Dim fileName as string
fileName = Dir(“c:\週報\*.*”) ‘★(1)
row=1
Do Until fileName = “”
Cells(row,1).Value = fileName ‘★(2)
fileName = Dir()
row = row + 1
Loop
End Sub
これを実行すると(Excel画面に戻って、「開発」リボンの「マクロを表示」から上記関数を選択し実行する)、選択しているシート上のA1から下にファイルの一覧が表示されたと思います。
まず、★(1)の部分で、Dir関数の引数に、対象のフォルダを指定します。このとき、「*.*」を指定することで存在する全てのファイルを指定しています。
※このような指定の方法を「ワイルド・カード」と言います。*は文字は任意の文字の任意の回数の繰返しを示します。
従って、「*.*」は、拡張子(Excelならxlsx)付きのファイル名なら何でも、ということですね。
その後、★(2)では、Dir関数の引数をなしにすることで、前回Dir関数を行った対象のフォルダを続けて検索する、と言う意味になります。
(★(2)で★(1)と同じ対象フォルダを指定すると、都度新たに検索をはじめからやり直すことになるので、ずっと1個目のファイルが表示され続け止まらなくなるので注意してください!)
そして対象のフォルダからファイルが見つからなくなると、Dir関数が空文字を返すので、はじめのDoループを脱出して、処理終了となります。
こちらの処理もいろんな業務効率化のマクロで使えそうなので、是非マスターして下さい。
Q.Excelの数式を使ってある集計処理を行っているのですが、上司から、その集計結果表をホームページ業者にHTMLファイルとしてお渡しして、ホームページに掲載してもらうように指示されました。今のExcelブックを簡単にHTMLに変換する方法はあるでしょうか。
A.ExcelマクロのPublishObjectsというオブジェクトを使用すれば簡単に実現できます。
最も単純なケースは、集計結果表のExcelファイルにマクロを追加して対応して実現することが可能です。
集計結果表のExcelファイルをマクロ付きブックとして保存し、マクロを使える状態にします。それから「開発」リボンからVisual Basic Editorを起動して下さい。
ファイルの一覧の出力対象とするシートをVisual Basic Editorの左ペインから選択し、コードエディタから下記のようなマクロのコードを記述し、
実行することで、ExcelファイルをHTMLファイルとして出力することができます。
ここでは、「集計」シートの内容を、cドライブ直下に、result.htmlとして出力しています。
Sub HTML出力
With ActiveWorkbook.PublishObjects.Add(xlSourceSheet, “c:\result.html”, “集計”)
.Publish True
End With
End Sub
これを実行する際には、Excel画面の「開発」リボンの「マクロを表示」から上記関数を選択し実行するようにして下さい。
(Excel画面上にボタンなどを貼り付け、そのボタンから上記の関数を実行するとエラーとなるようです。)
このやり方を覚えると今まで作った資料なども簡単にWebにアップすることができますね。
Excelファイルだと、Excelで開かないと基本的に中身を見ることができません。
ですがこの方法でHTMLファイルにすれば、このケースのようにホームページに組み込んだり、HTMLファイルをテキストエディターで開き、中身のHTMLテキストをブログに貼り付けたりすることでブログ記事に組み込むようなことが可能となります。
是非、ご活用下さい。
Q.商品リストなどをExcelで扱う際に、商品の種類だけを知りたいなどで、2行以上ある同じ商品のリストを1行にまとめることはVBAで可能でしょうか。
A.VBAを使えばとても簡単に実現可能です。
重複行の削除は、VBAのプログラムでひとつひとつ地道にリストを辿れば可能ですが、実はVBAに便利なコマンドがあります。
今回はそれを紹介します。
まずはシート上に以下のようなリストを作成して下さい。これは1日の商品の売り上げリストをイメージしました。
(A列) (B列)
番号 販売商品
1 A5ノート
2 鉛筆10本入り
3 A4ノート
4 A4ノート
5 クリアファイル
6 消えるボールペン
7 クリアファイル
8 A4ノート
さて、VBAの画面を開き、下記のコードを入力します。
Sub 重複データ削除
Range(“A1″).CurrentRegion.RemoveDuplicates Columns:=2, Header:=xlYes
End Sub
たったこれだけです。RangeオブジェクトでA1セルを含む表を指定し、そのRemoveDuplicatesメソッドで重複を除去します。
重複を判定する列は、2列目すなわちB列(販売商品)ですね。最後の Header:=xlYes は、1行目がヘッダー(「番号」「販売商品」)なので、データではないことを示しています。
プログラムが完成したら、「デバッグ」メニューの「VBAProjectのコンパイル」をして、エラーが出ないことを確認します。
シートの画面に戻り、「開発」リボン※の「マクロ」で、上記のプログラムの名称「重複データ削除」を実行すると、シート上にテキストファイルの内容が出力されます。
いろんな場面で使用できそうなコマンドですので是非覚えてみて下さい。
※「開発」リボンが見えない場合は、下記の記事を参考にしてください。
http://www.office-kaiketsu.com/excel%ef%bc%88%e3%82%a8%e3%82%af%e3%82%bb%e3%83%ab%ef%bc%89%e3%83%9e%e3%82%af%e3%83%ad%e3%83%bbvba/%e3%83%9e%e3%82%af%e3%83%ad%e9%96%8b%e7%99%ba%e3%82%bf%e3%83%96%e8%a1%a8%e7%a4%ba%ef%bd%9c%e3%82%a8%e3%82%af%e3%82%bb%e3%83%ab2007/
前の記事を見る1...678...25次の記事を見る Page 7 of 25