日曜日を含まない経過日計算
ある日からその日を含んでX日を経過した日をExcelで求めるには「始期となる日+X-1」とすればOKです。
では日曜日を含まないで計算するにはどうしたらよいでしょうか。
たとえば2011年12月8日(木)の7日経過した日は単純に計算すると14日(水)になります。
しかし日曜日を含まない場合、8日(木)の7日経過した日は15日(木)になります。
「木、金、土、月、火、水、木」と日曜日をとばすからです。
この日曜日をとばすという処理が面倒です。 続きを読む…
ある日からその日を含んでX日を経過した日をExcelで求めるには「始期となる日+X-1」とすればOKです。
では日曜日を含まないで計算するにはどうしたらよいでしょうか。
たとえば2011年12月8日(木)の7日経過した日は単純に計算すると14日(水)になります。
しかし日曜日を含まない場合、8日(木)の7日経過した日は15日(木)になります。
「木、金、土、月、火、水、木」と日曜日をとばすからです。
この日曜日をとばすという処理が面倒です。 続きを読む…
Excelで罫線を使って表を作る場合は多いです。
一つのシートに複数の表を縦に作っていく場合、表の途中で改ページされると困ることがあります。
そこであらかじめ、それぞれの表の下端で改ページしておく、という方法が考えられます。
これを自動的に実行するマクロを作りました。 続きを読む…
Wordのマクロでワイルドカードを使って検索、置換をしようとしたところエラーが出ました。
エラーメッセージは次の通り。
MatchPhrase、MatchWildcards、MatchSoundsLike、MatchAllWordForms、MatchFuzzyパラメータは、同時にTrueに設定することができません。
Wordで検索、置換をするときはいろいろなオプションがあります。
文書を直に検索、置換するときは矛盾するオプションは選べないようになっていますが、マクロで使うときには正しく設定しないとエラーになります。
例えば、ワイルドカード検索とあいまい検索はどちらが優先するのか、はっきりしないのでエラーになるようです。
ところで、ここで登場した5個のオプションの意味は次の通りです。どれもTrueかFalseを設定します。
| MatchPhrase | 単語間のすべての空白文字および制御文字が無視されます。 |
| MatchWildcards | 検索する文字列にワイルドカードが含まれている場合、このプロパティの値は True です。 |
| MatchSoundsLike | True に設定すると、検索文字列に類似した単語が検索対象となります。 |
| MatchAllWordForms | True に設定すると、検索文字列のすべての活用形が検索対象となります。 |
| MatchFuzzy | True に設定すると、検索時に日本語の文字列のあいまい検索オプションが使用されます。 |
そこで、MatchWildcardsだけにTrueをセットし、その他はFalseをセットしました。
しかしこれでも同じエラーが出ます。
セットする順序が影響するようです。
順序を変えてMatchWildcardsを最後にしてみたところ正しく動作しました。
VBAのユーザー定義関数で引数の数が一定でない場合があります。
このケースでは、a、b、cが引数です。引数の数は3個です。
このケースでは、a、b、c、dが引数です。引数の数は4個です。
このように、場合によって引数の数が違う場合のユーザー定義関数の作り方を示します。 続きを読む…
Word文書を開いたときに自動的にマクロを実行する方法です。
ここでは文書を開いたときに「Hello!」というメッセージボックスを表示させます。 続きを読む…
VBAでメッセージボックスを表示するには次のようにします。
この場合、OKボタンとキャンセルボタンがあるダイアログが表示されます。
OKをクリックした場合、「1」(定数だと「vbOK」)が返ります。
キャンセルをクリックした場合、「2」(定数だと「vbCancel」)が返ります。
一方、ユーザーに入力を促すインプットボックスを表示するには次のようにします。
この場合、テキストボックスとOKボタンとキャンセルボタンがあるダイアログが表示されます。
OKをクリックした場合、テキストボックスの内容が返ります。
次が注意です。
キャンセルをクリックした場合、長さ0の文字列(“”)を返します。
ここをMsgBoxと混同して、「キャンセルボタンを押すと返り値がvbCancelだから処理終了」というつもりで次のように書くと失敗します。
定数「vbCancel」は「2」と同じですので、インプットボックスで「2」を入力した場合、処理が終了してしまいます。
次のように書くとよいです。
以前、Wordで文字列リストを元に連続して置換するマクロについて書いたのですが、今度はExcel版です。
まず「文字列リスト」というシートと「作業」というシートを作成します。
| A | B | |
|---|---|---|
| 1 | 検索文字列 | 置換文字列 |
| 2 | エディター | エディタ |
| 3 | プリンター | プリンタ |
| 4 | サーバー | サーバ |
文字列リストにはこのような置換用の表をセットしておきます。
マクロ(VBA)をこのように書きます。
「文字列リスト」シートに上のような置換用の表をセットします。
「作業」シートに置換を施したい元の内容をセットしておきます。
マクロ「文字列リストに基づき連続して置換する」を実行します。
置換すると元には戻せませんので注意してください。
Wordには変更履歴を記録する機能があります。
文字を削除すると自動的に取消線を施すように設定できます。
最終版ができた際は自動的に取消線を消して該当する文字を削除することができます。
Word2007ならばメニューの校閲-変更箇所-承諾-ドキュメント内のすべての変更を反映を選択します。
Excelの場合はどうでしょうか。
Excelでも取消線を施すことができます。セル全体だけでなく文字単位で取消線をセットできます。
しかし変更履歴を記録しているわけではないので、単に文字に取消線が付いているだけの飾りです。
そこで選択範囲の取消線の付いた文字を一気に削除するマクロを考えました。
該当する文字を含むセルを選択し、このマクロを実行します。
セル全体に取消線が付いている場合は全体が削除されますし、文字単位で取消線が付いている場合はその文字だけが削除されます。
ただし部分的に色を付けたりサイズを変えたりしている場合は、その効果が消えてしまいますので、注意してください。
選択したセル範囲を囲むように楕円を描くマクロです。
セルを選択して右クリックをするとセル範囲の内側に合わせて楕円が描かれます。
楕円をもう少し大きくしたければ、次のようにします。5ピクセルずつ上下左右に大きくなります。
「Target」はここではセル範囲を表します。順に左端、上端、幅、高さを表します。
色を指定したい場合は、次のようにします。赤い線になります。
Excelファイルを他人に渡すときなどに、アクティブセル(カーソル)がホーム(A1セル)にあると整った印象を与えます。
しかしシートがたくさんあると面倒です。
そこで考えたのが、編集中のExcelファイルのすべてのワークシートのアクティブセルをホームに移動するマクロです。
最近のコメント