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

Word VBAでワイルドカードを使ってパターンで超便利な置換をする方法

$
0
0
pattern

photo credit: Nicholas Erwin America’s Grandstand via photopin (license)

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

Word VBAでいろいろな検索や置換をする方法についてシリーズでお伝えしています。

前回記事はコチラ。

Word VBAでワイルドカードを使ったパターン検索をする方法
Word VBAでいろいろな検索と置換をする方法についてお伝えしています。今回はWord VBAでワイルドカードを使ってパターン検索をする方法についてです。ワイルドカード一覧もありますのでご活用ください。

Word VBAでワイルドカードを使ってパターンで検索をする方法についてお伝えしました。

ん?検索がもうできているんだから、置換なんてすぐできるでしょ。

…とお思いかも知れませんが、Wordの検索&置換機能を侮ることなかれ。

ワイルドカードを使ったパターンでの置換の場合は、さらに便利な能力を発揮できるのであります。

ということで、Word VBAでワイルドカードを使ってパターンで超便利な置換をする方法、行ってみましょう!

前回のおさらい

では、まずワイルドカードを使ったパターン検索を復習していきましょう。

前回の記事で作成したプロシージャはこちらです。

Sub findPattern()

With Selection.Find
    .Text = "第?位"
    .MatchFuzzy = False
    .MatchWildcards = True
    Do While .Execute
        Stop
    Loop
End With

End Sub

MatchWildcardsプロパティでTrueにすればワイルドカードを使った検索ができるようになります。ただし、MatchFuzzyプロパティと同時にTrueにはできないので、こちらはオフにしましたね。

そして、「第〇位」というワードを検索するという処理になりますね。

パターンで検索した文字列を置換する

このプロシージャを置換するように変更していけばよいわけですね。

こちらの記事が参考になります。

Word VBAで文字列を置換する方法!いくつかの基本パターンを徹底解説
Word VBAでいろいろな検索や置換をする方法についてお伝えしています。Word VBAで置換をする方法は、いくつかのパターンがありますので、それぞれの組み方と特徴を徹底解説をしていきます。

記事にある通り、置換をするためには以下二点を変更すればOK。

  • FindオブジェクトのReplacement.Textに置換後の文字列を設定する
  • Executeメソッドの際に、名前付き引数ReplaceにwdReplaceAllを設定する

ということで、プロシージャとしてはこのようになりました。

Sub replaceText()

With Selection.Find
    .Text = "第?位"
    .MatchFuzzy = False
    .MatchWildcards = True
    .Replacement.Text = "ランク1"
    .Execute Replace:=wdReplaceAll
End With

End Sub

元のWord文書がこちら。

置換対象のWord文書

この文書に対して先ほどのプロシージャを実行してみると…

Word VBAでパターン検索して置換

全部「ランク1」になってしまいました。

検索する文字列が「パターン」なわけですから、置換する文字列も「パターン」つまりランク1,ランク2、ランク3としたいのです。

そんなことできるんでしょうか…?

Wordの置換機能にワイルドカードを使う

それができるんですね。

しかも、Wordのデフォルトの検索機能で実現できるのを知っていましたか?

まず、Wordの検索オプションで「ワイルドカードを使用する」にチェックを入れたうえで、検索する文字列に

第(?)位

置換後の文字列に

ランク\1

として、「すべて置換」をします。すると

Wordでパターンで置換する

このようにパターンで検索されました。

VBA使わずとも、Wordの基本機能でできるんですよ。

置換後のパターンを作る方法

ポイントは検索文字列と置換後の文字列に設定したワイルドカードです。

まず、検索文字列ではワイルドカード「( )」が使われていますね。この括弧で囲った部分はグループ化され式が生成されます。

(式)

そして、式はその登場順に、1から番号が付与されます。

つまり今回の例では「?」が式として生成され、番号1が付与されます。

そして、ワイルドカード「\」と番号の組み合わせで、式を呼び出すことができます。

\式番号

今回の例では、「ランク」という文字列に続けて、番号1の式を連結したものを、置換後の文字列としなさいという意味なわけです。

グループ化で式を生成し、それを「\」+番号で呼び出すことで、置換後の文字列もパターンで設定することができるというわけですね。

Word VBAでパターンによる置換を実現する

この置換の方法は、そのままWord VBAでも実現することができます。

プロシージャとしてはこのようになります。

Sub replaceText()

With Selection.Find
    .Text = "第(?)位"
    .MatchFuzzy = False
    .MatchWildcards = True
    .Replacement.Text = "ランク\1"
    .Execute Replace:=wdReplaceAll
End With

End Sub

このプロシージャを実行すると、「第〇位」という文字列が「ランク〇」という形に、パターンで置換されます。

ページ数を表すパターン

では、ほかの例も見てみましょう。

任意の1から3桁までの数字による「〇ページ」という文字列を組み合わせたパターンで検索し、「P.〇」というパターンに置換する場合、検索文字列は

([0-9]{1,3})ページ

置換後の文字列は

P.\1

と設定します。実行をすると以下のようになります。

Word VBAでページ数をパターンで置換

カンマ入りの金額を表すパターン

次にカンマ区切りの金額をパターンで検索し、置換する方法を見てみましょう。

検索文字列は

([0-9,]{1,})円

置換文字列は

^92\1

とします。実行をすると…

Word VBAでカンマ区切り金額をパターンで置換

このように置換されます。

置換後の文字列について補足ですが、「\」はそのまま記述するとワイルドカードと判別されてしまいます。ですから、特殊記号を表現する「^」(キャレット)を使い、「\」記号を表す「^92」を使用しているのです。

まとめ

Word VBAでワイルドカードを使ってパターンで置換する方法をお伝えしました。

Wordの基本機能でもワイルドカードを使ってパターン検索&置換ができますので、VBAとともにぜひご活用くださいね。

VBAを学んでいくと、おのずとWordの構造がわかってきて、一石二鳥な感じがしますよね。

さて、本シリーズはこれにて終了ですが、また便利なWord VBAのテクニックをお伝えしていきますので、どうぞお楽しみに!


Word VBAでカーソル移動をする基本中の基本!Moveメソッドの使い方

$
0
0
move

photo credit: thelearningcurvedotca CHIN Picnic Bike Races (22) via photopin (license)

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

カーソル移動…それ自体は全く生産性がないくせに、うっかりしていると何気に手間がかかってしまいます。

そんな悩めるユーザーのために、Wordにはたくさんのカーソル移動に関するショートカットキーがあります。

文書の先頭や末尾、ページ単位、段落単位、単語単位…

ただ、もうちょっとその「間」が欲しいなぁと思うことありませんか?

例えば、句読点の単位でサクサク移動したり、見出しから見出しへピョンピョン移動したり。

欲しい機能は、Word VBAで作ってしまえば良いのでは?

ということで、本記事から何度かにわたって、便利なショートカットキーの作り方をお伝えしていきます。

まず、今回はWord VBAのカーソル移動の基本中の基本、Moveメソッドの使い方についてお伝えします。

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

Wordのカーソル移動に関するショートカットキー

Wordには便利なカーソル移動に関するショートカットキーがたくさん用意されています。

操作 ショートカットキー
単語単位で移動 Ctrl + /
行の先頭・末尾へ移動 End / Home
段落単位で移動 Ctrl + /
ページ単位で移動 Ctrl + PageDown / PageUp
ドキュメントの先頭・末尾へ移動 Ctrl + End / Home

どうですか?ちゃんと使いこなせていらっしゃいますか?

これらを使いこなしたとしても、Wordの場合、もうちょっと欲しくなるんですよね。

例えば

  • 句読点単位
  • 見出し単位

とかですね。単語と行の間、ページとドキュメントの間、それらにちょうどいい感じの移動ショートカットキーがあれば素敵ですよね。

Moveメソッドはカーソル移動の基本

では、それらのショートカットキーの自作を目指すべく、まずその一歩としてWord VBAのカーソル移動の基本中の基本であるMoveメソッドを紹介します。

今回は、カーソル移動なので、Selectionオブジェクトに対するメソッドになります。

書き方は

Selection.Move Unit, Count

となります。

Unitは移動の単位を指定しますが、以下WdUnits定数のいずれかを指定します。

定数 単位
wdCharacter 文字
wdWord 単語
wdSentence
wdParagraph 段落
wdLine
wdStory 文書の先頭または末尾
wdSection セクション

また、CountはUnitで指定した単位で移動する量を表します。プラスの数で指定したら、文書の末尾方向(順方向)へ、マイナスの数で指定したら文書の先頭方向(逆方向)への移動となります。

文単位で順方向へカーソル移動する

例として、文単位でカーソル移動をするプロシージャを作っていきましょう。

文単位でカーソル移動をする場合、Unitに指定する定数はwdSentence、Countは順方向に1、ということで以下のようなプロシージャを作ればOKです。

Sub moveForward()

Selection.Move wdSentence, 1

End Sub

このプロシージャを数回実行していくと、以下のようなカーソル移動となります。

Word VBAで順方向に文単位でカーソル移動

ちゃんと移動していますね。

逆方向に移動させる場合は、Countの値にマイナスを指定しますので

Sub moveForward()

Selection.Move wdSentence, -1

End Sub

とすればよいですね。

こちらの実行の様子は以下のようになります。

Word VBAで逆方向に文単位でカーソル移動

Unitに指定する単位を変更したり、移動量を変更したりすることで、色々なカーソル移動を実現できますよね。

Selectionが範囲になっている場合にMoveメソッドを使うとどうなるか

さて、Moveメソッドでカーソル移動できるのは良いのですが、Selectionが「範囲」だったときはどうなるでしょうか。

例えば、このような場合ですよね。

WordのSelectionが範囲になっている

Selectionの範囲つまりRangeは

  • Start:0
  • End:10

となっています。

これについて、以下プロシージャを実行してみましょうか。

Sub moveForward()

Selection.Move wdCharacter, 5

End Sub

つまり、文字単位で5つ、文末方向に移動をするのです。範囲がそのまま移動すると思いますか?どうでしょうね?

なんと、実行しますと

Word VBAで選択範囲をMove

こうなります。

つまり、SelectionのRangeは

  • Start:14
  • End:14

となります。つまり、範囲の選択は解除され、終了位置を起点として移動した位置がカーソル位置となります。

同様に、逆方向の移動でも範囲の選択は解除され、開始位置を起点として移動した位置がカーソル位置となります。

Selectionが範囲であったとしても、Moveメソッドで移動した時点で選択は解除されますので、覚えておいて下さいね。

まとめ

Word VBAでカーソル移動をする基本中の基本であるMoveメソッドについてお伝えしました。

UnitとCountの設定を変えていけば、Moveメソッド一つで多様なカーソル移動が実現できます。

ですが…欲しいのは「句読点単位」なんですよね~。

今回のwdSentence単位の移動は、正直、行単位や段落単位とあんまり変わらないですものね。

ということで、次回は句読点単位のカーソル移動を実現すべく、別の方法を模索していきます。

どうぞお楽しみに!

Word VBAでMoveUntilメソッドを使って句読点単位でカーソル移動をする方法

$
0
0
move-until

photo credit: flyingkiwigirl Gypsy Day in NZ via photopin (license)

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

Word VBAで便利なカーソル移動のショートカットキーを作る方法をシリーズでお伝えしています。

前回はコチラ。

Word VBAでカーソル移動をする基本中の基本!Moveメソッドの使い方
カーソル移動は全く生産性がないくせに、うっかりしていると何気に手間がかかってしまいます。まず今回は、Word VBAのカーソル移動の基本中の基本、Moveメソッドの使い方についてお伝えします。

カーソル移動の基本、Moveメソッドについてお伝えしました。

さて、今回目指したいのは、句読点単位のカーソル移動です。

つまり、ちょうどデフォルトのショートカットキーでいう、単語単位と段落単位の間くらいの距離感の移動をしたいのです。

その目的を果たすために、特定の文字が登場するまでカーソル移動をするMoveUntilメソッドという便利なものがあるんですね。

ということで、今回はWord VBAでMoveUntilメソッドを使って句読点単位でカーソル移動をする方法です。

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

特定の文字が登場するまでカーソル移動をするMoveUntilメソッド

では、さっそくMoveUntilメソッドの使い方についてお伝えしましょう。

SelectionオブジェクトのMoveUntilメソッドは、特定の文字が登場するまで指定した方向にカーソルを移動します。

書き方はこうです。

Selection.MoveUntil Cset, Count

Csetは文字列を指定しますが、MoveUntilメソッドはCsetに含まれたいずれかの文字が登場するまで移動をします。

今回の場合は、句読点つまり「。」と「、」単位で移動したいので、

Selection.MoveUntil "。、", Count

と指定したいと思います。ちなみに、Csetは大文字・小文字の区別がありますよ。

また、Countは移動する方向と、何文字先まで特定の文字を探すかを表す整数を指定します。プラスの値であれば文書の末尾の方向(順方向)へ、マイナスの値であれば文書の先頭の方向(逆方向)へ移動します。

例えば数値10を指定した場合は、現在のカーソルから文末に向かって10文字先までの間に指定した文字があれば、そこに移動します。もし、指定した文字がその範囲になければ、移動はしません。

一般的には、範囲を絞る必要性はあまりありませんので、以下のどちらかの値を指定することが多いでしょう。なお、既定値はwdForwardとなります。

定数
wdForward 1073741823
wdBackward -1073741823

ちなみに、Moveメソッドと同様、Selectionが範囲だったときには選択範囲は解除され、指定した文字を見つけた位置がカーソル位置となります。

句読点単位で順方向にカーソル移動をする

では、MoveUntilメソッドを実際に試して、句読点単位で順方向にカーソル移動をさせてみましょう。

例えば、以下のような文書があるとします。

カーソル移動のためのWord文書

カーソルが文書の先頭にある状態で、以下のプロシージャを連続して実行してみます。

Sub moveForward()

Const STR_CSET As String = "。、"
Selection.MoveUntil STR_CSET, wdForward

End Sub

Csetは「。」と「、」つまり句読点。wdForwardですから、順方向にそれらの文字までカーソル移動をする処理になりますよね。

1回目の実行では、次の読点「、」の位置にカーソル移動しますが、2回目以降はそこから動かず…となります。

Word VBAでカーソル移動したが2回目以降動かない

MoveUntilメソッドで順方向に移動をした場合は、目的の文字(今回でいうと「、」)の「手前」にカーソルが移動するんですね。ですから、その「、」を越えさせてあげないと、次の「、」を探しにいくことはできません。

1文字分だけ順方向にカーソルを移動する

ということで、1文字だけ順方向に移動して、対象の文字を乗り越えさせてあげればOKですよね。

そんなときは、前回記事で解説をしました、Moveメソッドが使えます。

Selection.Move Unit, Count

Unitに文字単位を表すwdCharacter、Countは順方向に1文字ですからプラスの1を指定すればよいですよね。

つまり、このようなプロシージャを作ればよいとなります。

Sub moveForward()

Const STR_CSET As String = "。、"

With Selection
    .MoveUntil STR_CSET, wdForward
    .Move wdCharacter, 1
End With

End Sub

このプロシージャを先ほどの文書に連続して実行をすると

Word VBAで順方向に句読点単位でカーソル移動

このように、次から次へと句読点の位置にカーソル移動しますね!

句読点単位で逆方向にカーソル移動をする

では、今度は句読点単位で逆方向にカーソル移動をするプロシージャを作ってみましょう。

方向がwdBackWardに、1文字の乗り越えさせMoveメソッドも逆方向ですから-1を指定します。

Sub moveBackward()

Const STR_CSET As String = "。、"

With Selection
    .MoveUntil STR_CSET, wdBackward
    .Move wdCharacter, -1
End With

End Sub

これを連続して実行してみます。

Word VBAで逆方向に句読点単位でカーソル移動

逆方向に句読点単位の移動ができていますね。

まとめ

Word VBAで句読点単位でカーソル移動をするプロシージャの作り方についてお伝えしました。

MoveUntilメソッドで指定した文字までぴゅーっと移動することができます。Csetの文字列に好みの文字を追加していけば、好みに合わせてカスタマイズできますね。

さて、今回のプロシージャですが、文書の先頭または末尾でちょっといまいちな挙動をしますので、次回その点を解決していきます。

MoveUntilメソッドの戻り値を活用します。

どうぞお楽しみに!

連載目次:Word VBAでカーソル移動の便利ショートカットキーを作る

Wordには便利なカーソル移動に関するショートカットキーがデフォルトでたくさん用意されていますが、マクロを使えば好みのカーソル移動に関するショートカットキーを自作することができます!本シリーズでは、その作り方を丁寧に解説していきます。
  1. Word VBAでカーソル移動をする基本中の基本!Moveメソッドの使い方
  2. Word VBAでMoveUntilメソッドを使って句読点単位でカーソル移動をする方法

Word VBAで句読点単位のカーソル移動をショートカットキー化する方法

$
0
0

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

Word VBAで便利なカーソル移動のショートカットキーを作る方法をお伝えしています。

前回の記事はこちらです。

Word VBAでMoveUntilメソッドを使って句読点単位でカーソル移動をする方法
Word VBAで便利なカーソル移動のショートカットキーを作る方法をお伝えしています。今回はWord VBAでMoveUntilメソッドを使って句読点単位でカーソル移動をする方法です。

MoveUntilメソッドを使って、句読点単位で移動をするプロシージャを作りました。

ただ、このプロシージャ、ちょっと挙動がおかしいところがあるんですよね。

今回は、その欠点を直しつつ、句読点単位のカーソル移動をショートカットキー化していきます。

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

前回のおさらいと課題

まずは前回のおさらいなのですが、以下プロシージャは句読点単位で文書の末尾方向(順方向)にカーソル移動をするものです。

Sub moveForward()

Const STR_CSET As String = "。、"

With Selection
    .MoveUntil STR_CSET, wdForward
    .Move wdCharacter, 1
End With

End Sub

「。」か「、」が見つかる位置までカーソルを移動するという処理ですね。

しかし、実はちょっと欠点がありまして…、連続して実行して、文書の末尾に近くなると…

Word VBAマクロで順方向に句読点単位でカーソル移動

最後のほうの挙動、微妙ですよね。

MoveUntilで「。」と「、」がもう見つからない状態になるとMoveUntilは実行されないのですが、1文字移動するMoveメソッドだけ実行されちゃうんですね。

んー、ちょっとカッコ悪い。

逆方向に句読点単位でカーソル移動するプロシージャ

Sub moveBackward()

Const STR_CSET As String = "。、"

With Selection
    .MoveUntil STR_CSET, wdBackward
    .Move wdCharacter, -1
End With

End Sub

こちらも同様で、文書の先頭のほうになると…

Word VBAマクロで逆方向に句読点単位でカーソル移動

1文字ずつの移動になっちゃいますね。

やっぱりカッコ悪い…

MoveUntilメソッドで移動できたかどうかを判定する

これをカッコよくするためには、MoveUntilメソッドで移動があったときとなかったときで処理をわけていけばよいです。

文書の末尾または先頭に近づいて、もう目的の文字が存在していないときには、実行時に末尾または先頭にカーソル移動をするようにしちゃいましょう。

つまり、以下のような処理を入れるのです。

  • もしMoveUntilメソッドで目的の文字が見つかってカーソル移動できたら
    • 1文字だけその方向にカーソル移動する
  • さもなくば
    • 文書の末尾(または先頭)にカーソル移動する

MoveUntilメソッドの移動文字数を取得する

さて、その判断のための心強い味方なのですが、MoveUntilメソッドは実行後にその移動数を戻り値として返します。

変数 = Selection.MoveUntil(Cset, Count)

この変数の値が0でなければ、MoveUntilメソッドでカーソル移動があったということですよね。

If~Then文で条件分岐を作る

条件によって処理を分岐するときには、If~Then文を使いますよね。今回は、条件が満たされなかったときの処理も必要なので、Else文も使います。

If 条件式 Then
 ’処理1
Else
 ’処理2
End If

条件式が満たされている(条件式がTrue)のであれば処理1が実行され、そうでなければ(条件式がFalse)であれば処理2が実行されます。

Word VBAでは条件分岐はあまり使わないかも知れませんが、重要な構文なのでしっかり使えるようにしておきたいですね。

カーソル位置を文書の末尾または先頭に移動する

さて、MoveUntilメソッドの移動数がゼロだった場合は、カーソル位置を文書の末尾(または先頭)に移動したいのです。

その方法はどうしましょうか?

これは、これまでちょこちょこお世話になっている、Moveメソッドを活用できます。

Selection.Move Unit, Count

UnitにwdStoryを設定して、Countは順方向であればプラスの値(例えば1またはwdForward)、逆方向であればマイナスの値(例えば-1またはwdBackward)を指定すればOKです。

句読点単位でカーソル移動をするプロシージャ

以上を踏まえて、MoveUntilで移動があったかどうかを条件として、処理を分岐するようにしてみましょう。

順方向への句読点単位カーソル移動をショートカットキーに登録する

句読点単位で順方向へカーソル移動するプロシージャはこちらです。

Sub moveForward()

Const STR_CSET As String = "。、"

Dim lenMove As Long
With Selection
    lenMove = .MoveUntil(STR_CSET, wdForward)
    If lenMove <> 0 Then
        .Move wdCharacter, 1
    Else
        .Move wdStory, wdForward
    End If
End With

実行をしてみましょう。

Word VBAで順方向に句読点単位でカーソル移動する

末尾に近づき句読点がもうないときには、文書の末尾にカーソルが移動しましたね。

このプロシージャはショートカットキー Alt + . に設定をしました。なんとなくそれっぽいでしょ?

Wordマクロのショートカットキーの登録方法はこちらの記事をご覧ください。

Word VBAで作成したマクロをショートカットキーに登録する方法
初心者向けにWord VBAで便利な文字入力をするマクロの作り方シリーズ。今回は文書入力しながらサクサク使うために、Word VBAで作ったマクロをショートカットキーに登録する方法をお伝えします!

逆方向への句読点単位カーソル移動をショートカットキーに登録する

今度は、句読点単位で逆方向にカーソル移動するプロシージャです。

Sub moveBackward()

Const STR_CSET As String = "。、"

Dim lenMove As Long
With Selection
    lenMove = .MoveUntil(STR_CSET, wdBackward)
    If lenMove <> 0 Then
        .Move wdCharacter, -1
    Else
        .Move wdStory, wdBackward
    End If
End With

End Sub

これを連続実行します。

Word VBAで逆方向に句読点単位でカーソル移動する

先頭に近くなり、句読点が見つからないならカーソルは先頭に移動しますね。

こちらのプロシージャは、ショートカットキー Alt + , に設定しました。

まとめ

Word VBAで句読点単位のカーソル移動をショートカットキー化する方法をお伝えしました。

これで、Word文書の同じページ内などは縦横無尽にカーソル移動できますね。

さて、次回ですが、別のショートカットキー「見出し単位で移動」を作っていきたいと思います。

どうぞお楽しみに!

連載目次:Word VBAでカーソル移動の便利ショートカットキーを作る

Wordには便利なカーソル移動に関するショートカットキーがデフォルトでたくさん用意されていますが、マクロを使えば好みのカーソル移動に関するショートカットキーを自作することができます!本シリーズでは、その作り方を丁寧に解説していきます。
  1. Word VBAでカーソル移動をする基本中の基本!Moveメソッドの使い方
  2. Word VBAでMoveUntilメソッドを使って句読点単位でカーソル移動をする方法
  3. Word VBAで句読点単位のカーソル移動のショートカットキー化する方法

【保存版】Word VBAリファレンス~キーワード別インデックス

$
0
0
word vba

photo credit: davidmulder61 Day 316. Christmas is coming. via photopin (license)


Word VBAのリファレンスページです。

Word VBAのステートメント・関数・オブジェクト・メソッド・プロパティなどについてキーワード別にリストアップしていまして随時追加していきます。

皆さんが、Word VBAを身に着けるための参考としてご活用頂ければと思います。

基本構文

Selectionオブジェクト

Documentオブジェクト

Paragraphsコレクション/Paragraphオブジェクト

■ Paragraphsコレクション

■ Paragraphオブジェクト

Rangeオブジェクト

Findオブジェクト

■ Replacementオブジェクト

Fontオブジェクト

Formオブジェクト

【保存版】実務でWord VBAを使いこなすための初心者向け完全マニュアル

$
0
0
word

photo credit: Mr Moss TOMENAE – 162/365 via photopin (license)

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

Microsoftの超定番文書作成ソフトであるWord。契約書、企画書、マニュアル、議事録…様々な文書がWordで作られています。

そんなWordですが、実はVBAでマクロを作れるのです。知ってましたか?

ということは

  • ショートカットキーで指定のものを挿入する
  • 自前の凝った検索・置換機能を作成する
  • 好みのカーソル移動するショートカットキーを作る
  • フォルダ内の文書のページ数、文字数などをリストする

などなど、様々な処理をちょっとしたプログラムをすることで仕込むことができます。

このページは「これを見れば初心者でもWord VBAを実務で使えるようになる」ためのまとめページです。上から順にチュートリアル的に使用してWord VBAをマスターいただくのも良いですし、欲しい機能から順にチョイスして実装しても良いと思います。

ぜひ皆さんのWord作業をWordマクロで快適にしていくお供として、マニュアル的にご活用くださいませ。


連載目次:初心者向けWord VBAで文字入力をしてみよう

お仕事でよく使う文書作成ソフトWord。実は、WordでもVBAでプログラミングができるんです。本シリーズでは、初心者向けとしてWord VBAで文字入力をする方法をお伝えしていきます。
  1. Word VBA入門の最初の一歩!マクロ作成準備の6つのステップ
  2. Word VBAでカーソル位置に文字を入力するとっても簡単なプログラム
  3. Word VBA初心者がまず押さえておくべき段落記号の入力方法
  4. Word VBAで選択範囲の前後に文字列で挿入するマクロを作る方法
  5. Word VBAで作成したマクロをショートカットキーに登録する方法
  6. Word VBAを使うなら知っておくべき「段落」の話とその操作方法
  7. Word VBAで選択範囲の最初の段落&最後の段落を取得する方法
  8. Word VBA初心者にちゃんと理解して欲しいスタイルとその設定をする方法
  9. Word VBAでWithステートメントを使って同一オブジェクトの表記をスッキリ書く方法
  10. Word VBAでフォームを表示&コマンドボタンでマクロを実行する方法


連載目次:Word VBAで色々な検索&置換をする方法

Word VBAのFindオブジェクトを使えば色々な条件で目的を探し当てて置換、書式設定、その他、いろいろな処理を施すことができます。Word VBAの検索の最初の一歩から順番にお伝えしていきます!
  1. Word VBAで文字列を検索するFindオブジェクトを使った最も基本のプログラム
  2. Word VBAでカーソル位置から連続で検索をして蛍光ペンでハイライトをする
  3. Word VBAで選択範囲のフォント設定を変更する方法とそのプロパティまとめ
  4. Word VBAで文字列を置換する方法!いくつかの基本パターンを徹底解説
  5. Word VBAで検索オプションを設定して検索をする方法とそのプロパティ一覧
  6. Word VBAで検索の方向を変更する方向と文書全体を検索する方法
  7. Word VBAでワイルドカードを使ったパターン検索をする方法
  8. Word VBAでワイルドカードを使ってパターンで超便利な置換をする方法


連載目次:Word VBAでカーソル移動の便利ショートカットキーを作る

Wordには便利なカーソル移動に関するショートカットキーがデフォルトでたくさん用意されていますが、マクロを使えば好みのカーソル移動に関するショートカットキーを自作することができます!本シリーズでは、その作り方を丁寧に解説していきます。
  1. Word VBAでカーソル移動をする基本中の基本!Moveメソッドの使い方
  2. Word VBAでMoveUntilメソッドを使って句読点単位でカーソル移動をする方法
  3. Word VBAで句読点単位のカーソル移動のショートカットキー化する方法

Word VBAのGoToメソッドで見出し単位のカーソル移動をする方法

$
0
0
goto

photo credit: WRI Brasil Cidades Sustentáveis Belo Horizonte – Mobilidade Urbana e sistema BRT MOVE via photopin (license)

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

Word VBAで便利なカーソル移動のショートカットーを作る方法をお伝えしています。

前回はコチラの記事。

Word VBAで句読点単位のカーソル移動をショートカットキー化する方法
Word VBAで便利なカーソル移動のショートカットキーを作る方法です。今回は、If~Then文やMoveUntilメソッドを駆使しつつ、句読点単位のカーソル移動をショートカットキー化していきます。

句読点単位のカーソル移動をショートカットキー化しました。

今回は別のカーソル移動を目指します。ねらい目は「ページ単位」と「文書の先頭・末尾」との間、つまり「見出し単位」です。

ナビゲーションウィンドウを出して見出しをクリックすれば、見出し単位で移動ができるんですが、もっとすぐにサクサク行きたいんですよ。わかりますか?

ということで、Word VBAで見出し単位のカーソル移動をする方法です。

ちなみに、Wordのデフォルトは以下記事にまとめている通りですので、ここで再度チェックしておきましょう。

Word VBAでカーソル移動をする基本中の基本!Moveメソッドの使い方
カーソル移動は全く生産性がないくせに、うっかりしていると何気に手間がかかってしまいます。まず今回は、Word VBAのカーソル移動の基本中の基本、Moveメソッドの使い方についてお伝えします。

GoToメソッドで見出し単位の移動をする

カーソル移動というとMoveメソッドなのですが、指定できる単位に「見出し」というのはないんですね。

そこで、別のメソッドを紹介します。カーソル移動をするGoToメソッドです。

書式はコチラです。

Selection.GoTo What, Which, Count

Whatは移動先の項目で、以下WdGoToItem列挙型の定数のいずれかを指定します。

定数 移動先
wdGoToLine
wdGoToHeading 見出し
wdGoToPage ページ
wdGoToSection セクション
wdGoToTable
wdGoToObject オブジェクト
wdGoToBookmark ブックマーク
wdGoToComment コメント
wdGoToEndnote 文末脚注
wdGoToFootnote 脚注
wdGoToGrammaticalError 文法エラー
wdGoToProofreadingError 校正エラー
wdGoToSpellingError スペルエラー

MoveメソッドのWdUnitsは単語、文、行、段落など定番項目が多かったのですが、GoToメソッドのWdGoToItemは痒いところに手が届く系のラインナップですね。

Whichは移動方法について指定します。指定は以下WdGoToDirection列挙型の定数から選択します。

定数 移動方法
wdGoToAbsolute 絶対位置
wdGoToFirst 最初の要素
wdGoToLast 最後の要素
wdGoToNext 次の要素
wdGoToPrevious 前の要素

Countは番号または移動数を正の整数で指定しますが、省略可能で既定値は1です。Whichによってその役割が変わるものです。

Gotoメソッドの使用例

以下にいくつかの例を示しておきます。

Selection.GoTo wdGoToHeading, wdGoToFirst '最初の見出し
Selection.GoTo wdGoToLine, wdGoToAbsolute, 4 '文書の4行目
Selection.GoTo wdGoToLine, wdGoToPrevious, 2 '現在の位置から2行前
Selection.GoTo wdGoToTable, wdGoToNext '次のテーブル

Gotoメソッドでは、このようにかなり詳細なカーソル移動を実現できます。

Gotoメソッドで一つ前の見出し、一つ次の見出しに移動する

Gotoメソッドを使って、現在のカーソル位置から一つ次の見出しに移動するには

Selection.GoTo wdGoToHeading, wdGoToNext

また、同様に一つ前の見出しに移動するには

Selection.GoTo wdGoToHeading, wdGoToPrevious

とします。

それぞれイミディエイトウィンドウで入力して試してみてください。ちゃんと前後の見出しに移動しますよ。

ただし、GoToメソッドには一点、悩ましい点があります。

Whatの指定時に入力補完が効かないのです。列挙型の定数の種類がとてもたくさんあるのに…これでは不便です。

GoToNextメソッドで次の見出しに移動する

そんなときのために、実は別のメソッドを使うこともできます。

まずは、次の要素に移動するGoToNextメソッドを紹介しましょう。以下のように記述します。

Selection.GoToNext What

Whatには前述のGoToメソッドと同様、WdGoToItem列挙型の定数のいずれかを指定します。

WhichとCountの指定はありません、なぜならGoToNextメソッドを使う場合は一つ次の要素に移動する、ということが決まっているからです。

では、以下一つ次の見出しへカーソル移動するプロシージャを作ってみましょう。

Sub gotoForward()

Selection.GoToNext wdGoToHeading

End Sub

連続して実行すると以下のように見出しから見出しに移動してくれます。

Word VBAのGoToNextメソッドで次の見出しにカーソル移動

GoToPreviousメソッドで次の見出しに移動する

同様に、前の要素に移動するGoToPreviousメソッドがあります。

使い方はGoToNextメソッドと同様に、WdGoToItem列挙型の定数のいずれかを指定するWhatを用いて以下のように記述します。

Selection.GoToPrevious What

GoToPreviousメソッドを使って、一つ次の見出しへカーソル移動するプロシージャを作ります。

Sub gotoBackward()

Selection.GoToPrevious wdGoToHeading

End Sub

こちらのプロシージャを連続して実行すると、見出しをポンポンと前に移動していきます。

Word VBAのGoToPreviousメソッドで前の見出しにカーソル移動

まとめ

Word VBAで見出し単位でカーソル移動をする方法についてお伝えしました。

GoToメソッドを使うと、様々な項目に対して色々な移動の仕方を一つのメソッドで実現できるのですが、残念ながら入力補完が効かないという弱点があります。

その点、一つ前の要素や一つ次の要素と決まっているのであれば、GoToNextメソッドとGoToPreviousメソッドが入力補完も使えておすすめです。

なお、今回紹介したしたGoTo系メソッドはいずれも、Selectionが範囲選択であった場合には、範囲選択が解除された上でカーソル移動をします。これは、Move系のメソッドと同じですね。

さて、これで完成としても良いのですが、せっかくなので文書の末尾や先頭に到達したときの処理を追加しつつ、ショートカットキー化していきましょう。

どうぞお楽しみに!

連載目次:Word VBAでカーソル移動の便利ショートカットキーを作る

Wordには便利なカーソル移動に関するショートカットキーがデフォルトでたくさん用意されていますが、マクロを使えば好みのカーソル移動に関するショートカットキーを自作することができます!本シリーズでは、その作り方を丁寧に解説していきます。
  1. Word VBAでカーソル移動をする基本中の基本!Moveメソッドの使い方
  2. Word VBAでMoveUntilメソッドを使って句読点単位でカーソル移動をする方法
  3. Word VBAで句読点単位のカーソル移動のショートカットキー化する方法
  4. Word VBAのGoToメソッドで見出し単位のカーソル移動をする方法

Word VBAで見出し単位のカーソル移動をショートカットキー化する方法

$
0
0
goto

photo credit: Arthur Pontes _MG_0325 via photopin (license)

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

Word VBAで便利なカーソル移動のショートカットキーを作成する方法をお伝えしています。

前回の記事はコチラ。

Word VBAのGoToメソッドで見出し単位のカーソル移動をする方法
Word VBAで便利なカーソル移動のショートカットキーを作る方法をお伝えしています。Word VBAで見出し単位のカーソル移動をする方法をGoToメソッド、GoToNextメソッド、GoToPreviousメソッドを使って実現します。

見出し単位でカーソル移動をするプロシージャを作成しました。

こちら、文書の先頭または末尾に移動しきったときの挙動を追加しつつ、見出し単位のカーソル移動をショートカットキー化していきます。

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

前回のおさらいとお題

前回作成したプロシージャですが、おさらいをしましょう。

まず、文書の末尾方向(順方向)に次の見出しに移動するプロシージャがこちら。

Sub gotoForward()

Selection.GoToNext wdGoToHeading

End Sub

このプロシージャを何度か実行をすると、文書の最後の見出しである以下「見出し2」のところで止まって動かなくなります。

Word VBAで先頭の見出しからカーソル移動しない

一方で、文書の先頭方向(逆方向)に前の見出しに移動するプロシージャがこちらです。

Sub gotoBackward()

Selection.GoToPrevious wdGoToHeading

End Sub

こちらも何度か実行すると、文書の先頭の見出しから先はカーソル移動をしません。

Word VBAで末尾の見出しからカーソル移動しない

まあ、これはこれでよいのですが、普通に長い文書ですと、本当に最後(または最初)の見出しに到達したから動かないのかがちょっとわかりづらいです。

なので、この状態のときには、文書の末尾(または先頭)にカーソル移動をしてあげるほうが親切であることも多いかなと思いまして、その処理を追加していきたいと思います。

見出し単位のカーソル移動で文末の末尾・先頭での処理を追加する

アルゴリズムとしては以下のようになるかと思います。

  • GoToNextメソッド(またはGoToPrevious)を実行
  • 実行前と実行後でEnd(またはStart)の位置に変更がなければ
    • 文書の末尾(または先頭)にカーソルを移動

MoveUntilメソッドのときは、戻り値でカーソルの移動数が得られたので、それをもとに条件分岐できました。

Word VBAで句読点単位のカーソル移動をショートカットキー化する方法
Word VBAで便利なカーソル移動のショートカットキーを作る方法です。今回は、If~Then文やMoveUntilメソッドを駆使しつつ、句読点単位のカーソル移動をショートカットキー化していきます。

GoToNextメソッド、GoToPreviousメソッドの戻り値

ですが、GoToNextメソッド、GoToPreviousメソッドの場合は、ちょっぴり違います。

戻り値として移動先のカーソル位置をRangeオブジェクトで返します。

Set 変数 = Selection.GotoNext(What)
Set 変数 = Selection.GotoPrevious(What)

ですから、移動前のRangeオブジェクトを保管しておいて、移動後に上記のように取得したRangeオブジェクトのEnd(またはStart)と比較すればよいですね。

それを踏まえて、以下のようなプロシージャを作りました。

Sub gotoForward()

Dim rng As Range, rngNext As Range

With Selection
    Set rng = .Range
    Set rngNext = .GoToNext(wdGoToHeading)
    If rngNext.End = rng.End Then .Move wdStory, 1
End With

移動後のカーソル位置の別の取得方法

これでOKはOKなのですが、移動後のカーソル位置…わざわざ戻り値を使わなくても

Selection.Range

とすれば取得できますね。

こちらのほうが変数少ない分、若干シンプルですね。

見出し単位のカーソル移動のショートカットキーを作る

次の見出しにカーソル移動するショートカットキー

以上を踏まえて、一つ次の見出しにカーソル移動するプロシージャは以下のようになりますね。

Sub gotoForward()

Dim rng As Range

With Selection
  Set rng = .Range
  .GoToNext wdGoToHeading
  If .Range.End = rng.End Then .Move wdStory, 1
End With

End Sub

GoToNextの前後で範囲のEndに変更がなければ、Moveメソッドを実行して文書の末尾にカーソル移動をしちゃいます。

一応、動作確認しておきましょうか。

上記のプロシージャを実行してみると、以下のように文書の最後の見出しの位置から先は、文書の末尾にカーソル移動しますね。

Word VBAで次の見出しにカーソル移動をする

あとはこのプロシージャをショートカットキー登録すればOKですね。

以下記事を参考に Alt + ] に指定してみました。

Word VBAで作成したマクロをショートカットキーに登録する方法
初心者向けにWord VBAで便利な文字入力をするマクロの作り方シリーズ。今回は文書入力しながらサクサク使うために、Word VBAで作ったマクロをショートカットキーに登録する方法をお伝えします!

前の見出しにカーソル移動するショートカットキー

同様に、一つ前の見出しにカーソル移動するプロシージャはこちらです。

Sub gotoBackward()

Dim rng As Range

With Selection
    Set rng = .Range
    .GoToPrevious wdGoToHeading
    If .Range.Start = rng.Start Then .Move wdStory, -1
End With

End Sub

実行結果はこちらです。

Word VBAで前の見出しにカーソル移動をする

こちらはショートカットキー Alt + [ に設定しました。

まとめ

Word VBAで見出し単位のカーソル移動をショートカットキー化する方法をお伝えしました。

これで見出し単位でビュンビュン移動できるようになりました。

本シリーズのテクニックをちょっと使えば、好みのカーソル移動のショートカットキーが作れると思いますので、ぜひトライしてみてください。

次回、また別のWord VBAのテクニックをお伝えしますね。

どうぞお楽しみに!

連載目次:Word VBAでカーソル移動の便利ショートカットキーを作る

Wordには便利なカーソル移動に関するショートカットキーがデフォルトでたくさん用意されていますが、マクロを使えば好みのカーソル移動に関するショートカットキーを自作することができます!本シリーズでは、その作り方を丁寧に解説していきます。
  1. Word VBAでカーソル移動をする基本中の基本!Moveメソッドの使い方
  2. Word VBAでMoveUntilメソッドを使って句読点単位でカーソル移動をする方法
  3. Word VBAで句読点単位のカーソル移動のショートカットキー化する方法
  4. Word VBAのGoToメソッドで見出し単位のカーソル移動をする方法
  5. Word VBAで見出し単位のカーソル移動をショートカットキー化する方法

Word VBAによるドキュメント一括処理の第一歩!文書ファイルを開く方法と閉じる方法

$
0
0
open-close

photo credit: Theen … Close Open via photopin (license)

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

Word文書ですが、複数のドキュメントファイルに一気に同じ処理を加えたいときありますよね。

例えば以下のようなニーズがあります。

  • 文書全体のフォント種類を変更したい
  • 全角スペースを取り除きたい
  • 特定の文字列を別の文字列に置換したい
  • 文書のページ数や文字数を調べたい

このような要望が出てきたときは、VBAの出番ですよね。

ドキュメントファイルがどんなにたくさんあったとしても、マクロさえ仕込んでおけば、あとはPCが自動で勝手に、そして正確に処理をしてくれます。

ということで、今回から何回かにわけて複数のWordドキュメントについて一括で処理をするWordマクロの作り方についてお伝えしますね。

今回は一回目ということで、ドキュメント一括処理の基本中の基本、最初の一歩です。Word VBAでドキュメントファイルを開く方法、そして閉じる方法についてお伝えします。

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

OpenメソッドでWordドキュメントを開く

Word VBAでドキュメントを開く場合は、Documentsコレクションに対するOpenメソッドを使います。

Documents.Open ファイル名

Documentオブジェクトではなくて、Documentsコレクションが対象ということに注意くださいね。コレクションに開いたドキュメントを追加するイメージです。

また、ファイル名はパスを指定しないと「既定のローカルフォルダの保存場所」(「ファイル」→「オプション」→「保存」で確認できます)に存在するファイルを開きます。

ですが、多くの場合は別のフォルダであることが多いと思いますのでフルパスを指定します。

以下画像のようにフォルダ「C:\Users\ntaka\Dropbox\desktop\word-document」内の「原稿(1章).docx」を開きたいとします。

Word VBAで開きたいフォルダ

その場合は、以下のようなプロシージャを実行すれば、開くことができます。

Sub openDoc()

Documents.Open "C:\Users\ntaka\Dropbox\desktop\word-document\原稿(1章).docx"

End Sub

こちら実行をしますと、以下のように「原稿(1章).docx」が開きます。

Word VBAで開いたドキュメント

なつかしい原稿が開きました。

Pathプロパティでドキュメントのパスを取得する

ファイル名フルパスの指定、長すぎてちょっと面倒ですね。

今回の場合は、Pathプロパティを活用するのがおすすめです。

Documentオブジェクト.Path

これで、指定したDocumentオブジェクトが格納されているフォルダパスを取得できます。

マクロを記述しているドキュメントはThisDocumentと表すことができますから、上記のプロシージャは

Sub openDoc()

Documents.Open ThisDocument.Path & "\原稿(1章).docx"

End Sub

と書き直すことができます。

開いたドキュメントを取り扱う方法

ただ、これでは開いただけで何の操作もできません。

ほとんどの場合は開いた後に、そのドキュメントに何かしらかの操作をしたいわけですから、その方法を知る必要がありますよね。

開いたドキュメントをオブジェクト変数にセットする

一つの方法としては、開いたドキュメントをオブジェクト変数にセットする方法です。

このように書きますね。

Set 変数 = Documents.Open(ファイル名)

Openメソッドは戻り値で開いたDocumentオブジェクトを返しますから、それをすぐさまオブジェクト変数にセットしてしまうのです。

ところで、今回は引数の指定が括弧内になっていますね。戻り値がある場合は、引数の指定は括弧内になりますからね。覚えておくと良いです。

例えば、このようなプロシージャですね。

Sub openDoc()

Dim doc As Document
Set doc = Documents.Open(ThisDocument.Path & "\原稿(1章).docx")

Debug.Print doc.Name

End Sub

実行しますと、指定したドキュメントが先ほどと同様開くとともに、イミディエイトウィンドウにファイル名が出力されます。

DocumentオブジェクトのNameプロパティは、ドキュメントのファイル名を表します。

Documentオブジェクト.Name

開くドキュメントとWithステートメント

別の方法として、Openメソッドで開いたドキュメントをWithステートメントでくくるという方法があります。

With Documents.Open(ファイル名)
 ’処理
End With

こちらも引数の指定がカッコつきになりますので、ご注意くださいね。

プロシージャとしては以下のようなパターンです。

Sub openDoc()

With Documents.Open(ThisDocument.Path & "\原稿(1章).docx")

    Debug.Print .Name

End With

End Sub

これでWithブロック内は開いたオブジェクトを対象として処理を書くことができます。

オブジェクト変数を使わなくていいのなら、こちらのほうが行数が少なくて済みそうですね。

Closeメソッドでドキュメントを閉じる

開いているドキュメントを閉じる場合はCloseメソッドを使います。

Documentオブジェクト.Close

OpenメソッドはDocumentsコレクションが対象でしたが、CloseメソッドはDocumentオブジェクトが対象になります。

例えば、開いたドキュメントをオブジェクト変数にセットした場合は以下のようなプロシージャになります。

Sub openDoc()

Dim doc As Document
Set doc = Documents.Open("C:\Users\ntaka\Dropbox\desktop\word-document\原稿(1章).docx")

Debug.Print doc.Name

doc.Close

End Sub

Withステートメントを使ったパターンのほうは

Sub openDoc()

With Documents.Open(ThisDocument.Path & "\原稿(1章).docx")

    Debug.Print .Name
    .Close

End With

End Sub

とすればOKです。

まとめ

Word VBAでドキュメントを開く方法と閉じる方法についてお伝えしました。

  • DocumentsコレクションのOpenメソッドでドキュメントファイルを開く
  • 開いたドキュメントをオブジェクト変数にセットする
  • 開いたドキュメントをWithステートメント内で使用する
  • DocumentオブジェクトのPathプロパティでドキュメントのフォルダパスを取得する
  • CloseメソッドでDocumentオブジェクトを閉じる

といったテクニックをお伝えしました。

いずれも、Word VBAで複数ドキュメントを一括処理するときには必須となりますのでバッチリ押さえておいてくださいね。

次回は、FileSystemオブジェクトとFor Each文を使ってフォルダ内の全てのドキュメントについて操作をする方法です。

どうぞお楽しみに!

Googleサイトで超シンプルな社内ポータルサイトを10分で作る方法

$
0
0

こんにちは!とくP(@toku_jpn)です!

前回は社内ポータルサイトを作成する連載第一回目ということで、Webサイトを基本無料で作成することができるサービスGoogleサイトとは何かその概要についてまとめました。

簡単に本格的な社内ポータルサイトを作成できるGoogleサイトとは?
仕事で便利な社内ポータルサイトを作る方法をご紹介していく連載。第一回目はWebサイトを簡単に作成できるサービスであるGoogleサイトをご紹介します!社内ポータルサイト作成に限らず告知サイト作成などにも使える便利ツールです!他にも便利な理由が盛り沢山です!

今回はGoogleサイトの使い方について触れていきます!

今回の記事内ですべての操作について細かく説明するわけにもいかないので、超シンプルな社内ポータルサイトを10分で作成する方法をお伝えしながら基本的な機能のみご紹介していきます!

今回作成する社内ポータルサイト

今回作成する簡単な社内ポータルサイトは以下の画像の通りです。社内に向けたお知らせと社内カレンダーがメインの社内ポータルサイトです。

お知らせでは気になる内容があればクリックして詳細情報が書かれたページに飛ぶことができるようになっています。

カレンダーは会社の予定や会議室の空きがわかるという設定です。

このようなサイトがたった10分で作成できちゃいます!以下より、ファイルの新規作成からサイト公開までご説明していきますね!

新規Googleサイトファイルを作成する

まずはじめに新規Googleサイトファイルを作成します。

Googleサイトで作成するサイトはドキュメントやスプレッドシートなどと同じく、1つのデータファイルとしてGoogleドライブ上で保存されます。

Googleサイトから作成する

Googleサイトのページから直接データファイルを作成する方法です。

Googleサイトは以下のURLよりアクセスできます!

Thinking of creating a website? Google Sites is a free and easy way to create and share webpages.

右下の赤いプラスボタンをクリックすることで新規データファイルが作成されます。

このような画面に移れば新規ファイル作成成功です。

作成された新規ファイルはGoogleドライブのルートフォルダに保存されます。

Googleドライブから作成する

GoogleドライブからGoogleサイトファイルを作成する方法です。

Googleドライブは以下のURLよりアクセスできます!

Get access to files anywhere through secure cloud storage and file backup for your photos, videos, files and more with Google Drive.

まず新規ボタンをクリックして作成する新規ファイルの種類一覧メニューを開きます。

その他の表示にマウスカーソルを合わせるとGoogleサイトを指定するボタンが現れますのでクリックして作成します。

ファイルを作成後、Googleドライブ上にデータが作成されます。

新規データファイルがちゃんと作成されているか確認してみてください。

サイトタイトルを決定する

では、実際にサイトの中身を編集していきましょう!

まずはサイトタイトルを決めましょう。”ページのタイトル”と書いてある箇所にお好みのタイトル名を記入できます。

今回は””Office Portal””という名前で登録しますね。

今回は特に変更はしませんが、タイトル文字の大きさや配置も変更することができます。

ちなみに、厳密には”ページのタイトル”と書かれている箇所はページ名の編集箇所となっており、サイト名に当たる編集箇所は左上にある”サイト名を入力”というところです。この秘密はまた別記事にてご紹介できればと思います。

テキストを挿入する

ここからは、多くの作業が右側のメニューを起点として行われるようになります!

テキストボックスを挿入することで作成しているサイトに文章を記入することができます。

テキストボックスは右側メニューのテキストボックスをクリックするとサイト上に挿入されます。

作成されたテキストボックスをクリックして選択するとそのボックス内にテキストを入力することができるようになります。

また、テキストボックスの選択中は文字の大きさや太さなどの設定変更もできます。

では、実際に入力してみましょう。文字のサイズは設定項目の一番左側の”標準テキスト”と書かれたところをクリックし、表示される4つの中からサイズを選択して変更することができます。

“見出し”のサイズでテキスト入力するとこのような大きさ、色になります。

今回はお知らせ板を作成したいので以下のように入力してみました。

文字の設定はテキストボックス内の文章の途中にでも変更可能なので、以下のように行ごとに文字サイズを変えることができます。

ボックス枠の大きさは変更することが可能です。

今回、お知らせ板はページ半分に配置したいので、テキストボックス枠の右側にある丸印をドラッグしてボックスの大きさを半分にします。(GIF参照)

 

リンクを挿入する

文章や画像などには他ページへのリンクを設定することができます。

今回は各お知らせのタイトルに内容の詳細が書かれたページへのリンクを挿入します。

詳細ページはGoogleドキュメントで社内向け文書っぽく作成したものを使用します。

今回は説明を割愛いたしますが、Googleドキュメントでは閲覧のみで編集を許可しない共有設定ができるので案内文などを作成するのにオススメのツールです。ペーパーレスへの取り組みにも使えますよ!

まずはリンクを挿入する文章をドラッグ(マウス長押し)して範囲指定します。

範囲を指定すると編集メニューが現れますので、リンクを挿入(クリップのようなマーク)をクリックします。

そこで、リンク先のアドレス入力が求められますのでアドレスを記入して適用をクリックして完了します。

必要な箇所全てにリンクを設定すると以下のようになります。

お知らせ板っぽい雰囲気が出てきましたね。

社内カレンダーを挿入する

Googleサイトでは他のGoogleサービスで利用しているツール、作成したデータを挿入することができます。

今回はカレンダーを挿入しますが、スプレッドシートやフォームなど他のデータを挿入する場合においても基本的にやり方は同じです。

右側のメニューでカレンダーをクリックすると、現在Googleカレンダーで利用しているカレンダーの選択画面が表示されます。メイン以外のカレンダーの作成方法については今回割愛させていただきます。

挿入したいカレンダーを選択し挿入をクリックするとページ内にカレンダーが挿入されます。

※同時に複数のカレンダーを選択して挿入することができますが、実際には1つのカレンダーしか挿入されませんので1つ1つ挿入作業を繰り返してください。

カレンダーの表示方法も設定で調整可能です。今回はひと目で予定が確認しやすいように週ごとに表示するように設定します。カレンダーを選択すると歯車のようなマークが現れますのでそちらをクリックして設定画面に移動してください。

設定画面で表示モードという項目がありますので”週”に変更してから”完了”をクリックしてください。

その他の設定項目についての説明は割愛いたしますが、カレンダーだけでもこれだけ多くの設定項目がありますので、いろんな設定を試してみてお気に入りの設定を探してみてください。

さて、カレンダーはページの右側に2つ並べたかったのですが、困ったことにお知らせ一覧の下に配置されてしまいました…その場合はカレンダーを配置したい場所までドラッグして移動させましょう。(GIF参照)

このように、Googleページに挿入したデータ等は自由自在に配置することができます。ブロック遊びの感覚でひとつひとつのデータ(ブロック)を配置させることができます。

社内ポータルサイトを公開する

では、作成した社内ポータルサイトを公開してみましょう。

右上に公開ボタンがありますのでクリックしてください。

すると、公開する社内ポータルサイトのURLを設定するよう求められます。アルファベットで好きな文字を入力してください。

他のユーザーがGoogleサイトで公開したサイトと同じURLでは設定できませんので注意が必要です。

ちなみに、有料版であるG Suiteユーザーが作成したサイトには必然的にドメイン名が含まれたアドレスが設定されますので、社外ユーザーが作成したサイトとアドレスが被ることがないようになっています。

また、G Suiteユーザーはサイトにアクセスできるユーザーの範囲を、社内の人間のみかWeb上の全員(誰でもアクセスできるということ)かを設定することもできます。

公開したページへは設定したURLにアクセスするだけでなく、公開メニューの中の”公開したサイトを表示”をクリックすることでもアクセスすることができます。

作成したページがうまく機能するか実際にアクセスして確認してみてください!

おわりに

いかがでしたか?

今回はGoogleサイトで必要最低限の機能を持った社内ポータルサイトを作成することを通じて、Webサイト作成の簡単な流れをご紹介しました。

他にもYouTube動画やGoogleフォームなど様々なものを挿入することができますので、カレンダー以外のデータの挿入もぜひ試していただき、オリジナルの社内ポータルサイトを作成してみてください。

次回は、Googleサイトにスプレッドシートのグラフやドライブの特定のフォルダを挿入する方法、活用提案をご紹介します。

それでは!

連載目次:新Googleサイトで超簡単に社内ポータルサイトを作る

Googleサイトを使えば本格的な社内ポータルサイトもドラッグ&ドロップなどの簡単操作で作成することができます。本シリーズではGoogleサイトとは何か、そしてその使い方を紹介していきます!
  1. 簡単に本格的な社内ポータルサイトを作成できるGoogleサイトとは?
  2. Googleサイトで超シンプルな社内ポータルサイトを10分で作る方法

Word VBAでFor Each~Next文を使ってフォルダ内のドキュメント全てを操作をする方法

$
0
0

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

複数のWordドキュメントについて一括で処理をするWordマクロの作り方についてのシリーズ、第二回目です。

前回の記事はコチラ。

Word VBAによるドキュメント一括処理の第一歩!文書ファイルを開く方法と閉じる方法
Wordドキュメントについて一括で処理をするWordマクロを作る場合に必須となるテクニックとして、Word VBAでドキュメントを開くOpenメソッドの使い方、閉じるCloseメソッドの使い方についてお伝えします。

ドキュメントファイルを開く方法と閉じる方法についてお伝えしました。

今回ですが、もう一括処理、進めちゃいます。

Word VBAでフォルダ内のドキュメント全てを順番に開いて操作をする方法です。

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

FileSystemオブジェクトとは

さて、今回は「フォルダ内にある全てのドキュメント」を操作していきたいわけですから、フォルダの操作が必要になります。

そして、VBAでフォルダやファイル、またはドライブなどを操作するときには、FileSystemオブジェクトと呼ばれるオブジェクトを使います。

FileSystemオブジェクトの生成と破棄

まず、FileSystemオブジェクトを使う場合は以下命令によってFileSystemオブジェクトを生成してオブジェクト変数にセットする必要があります。

Set 変数 = CreateObject(“Scripting.FileSystemObject”)

また、FileSystemオブジェクトを使い終わった際には、以下のようにして、生成したオブジェクトを破棄します。

Set 変数 = Nothing

ですから、一般的にFileSystemオブジェクトを使うプロシージャは以下のような構成になります。

Sub openDocs()

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

'処理

Set objFso = Nothing

End Sub

これで、objFsoという名称でFileSystemオブジェクトを生成し、何らかの操作をした上で破棄するという流れができました。

指定したフォルダ内のファイルを参照する

では、FileSystemオブジェクトを使って、フォルダ内のファイルを参照する方法を見ていきましょう。

getFolderメソッドでフォルダを取得する

フォルダを取得するにはgetFolderメソッドを使います。

フォルダを取得する場合は、フォルダのフルパスを指定して、以下のように書きます。

FileSystemオブジェクト.getFolder(フォルダパス)

例えば、以下のプロシージャを実行してみますと、現在マクロを記述しているドキュメントが保存されているフォルダのフォルダ名が表示されます。

Sub openDocs()

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

Debug.Print objFso.getFolder(ThisDocument.Path).Name

Set objFso = Nothing

End Sub

Nameプロパティですが、フォルダ名を知ることができます。

Folderオブジェクト.Name

Filesプロパティでファイルをコレクションとして取得する

続いて、Filesプロパティを使ってフォルダ内のファイルをコレクションとして取得します。

Folderオブジェクト.Files

これで、指定したFolderオブジェクトのFilesコレクションを取得できます。

For Each~Next文でフォルダ内のファイルを一つ一つ操作する

こうして取得したFilesコレクションの要素であるFileオブジェクト一つ一つに対して処理を行っていきたいのですが、そのようなときに便利な繰り返し構文、For Each~Next文があります。

以下のように書きます。

For Each 変数 In コレクション
 ’処理
Next 変数

毎回の繰り返しでコレクションの要素一つ一つを取り出して変数に格納した上でブロック内の処理を行います。そして、コレクション内のすべての要素に対して処理を終えると、繰り返しから抜けるというものです。

これ、すごく便利なので、ぜひ覚えておいてくださいね。

フォルダ内のドキュメント名を出力する

マクロが存在しているフォルダ内に「原稿」というフォルダがありまして、その中身は以下のようになっています。

Word VBAで操作するフォルダ

テストとして、このフォルダ内のドキュメントを開いて、ドキュメント名を出力して、閉じるというプロシージャを作ってみましょう。

Sub openDocs()

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

Dim doc As Document
Dim strPath As String
strPath = ThisDocument.Path & "\原稿\"

Dim obj As Object
For Each obj In objFso.getfolder(strPath).Files

    Set doc = Documents.Open(strPath & "\" & obj.Name)
    Debug.Print doc.Name
    doc.Close

Next obj

Set objFso = Nothing

End Sub

これを実行すると、以下のようにドキュメント名がイミディエイトウィンドウに出力されます。

Word VBAでフォルダ内のドキュメント名を出力

Nameプロパティでファイル名を取得する

Openメソッドでドキュメントを開く際にファイル名が必要になりますが、ファイル名はFileオブジェクトのNameプロパティで取得できます。

Fileオブジェクト.Name

ドキュメント名=ファイル名を取得するだけなら、わざわざOpenメソッドで開く必要はないのですが、何かWordマクロならではの処理を加えるのであれば、開く必要が出てきますね。

まとめ

Word VBAでフォルダ内の全てのドキュメントを順番に操作する方法についてお伝えしました。

  • FileSystemオブジェクトでフォルダとそのFilesコレクションをつかむ
  • For Each~Next文でその要素であるファイル一つ一つについて繰り返し処理をする

この二つが、今後ずーっとお世話になる重要なテクニックになりますので、ぜひマスター下さいませ。

では次回、実際に開いたファイルについて色々な処理をしていきたいと思います。

連載目次:Word VBAでフォルダ内のドキュメントを一括操作する

Wordで複数ドキュメントファイルに一括で同じ操作をしたいときがあります。そんな時は、VBAを使えば便利!マクロさえ仕込んでおけば、フォルダの中のドキュメントについてPCが自動で勝手に処理をしてくれます。そんなWord文書の一括操作のテクニックについてお伝えしていきます。
  1. Word VBAによるドキュメント一括処理の第一歩!文書ファイルを開く方法と閉じる方法
  2. Word VBAでFor Each~Next文を使ってフォルダ内のドキュメント全てを操作をする方法

Word VBAでフォルダ内の全てのドキュメントのフォントの種類を変更する

$
0
0

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

Word VBAで複数のドキュメントに一括処理をする方法についてのシリーズです。

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

Word VBAでFor Each~Next文を使ってフォルダ内のドキュメント全てを操作をする方法
複数のWordドキュメントについて一括で処理をするWordマクロの作り方についてお伝えしています。今回はWord VBAでFor Each文を使ってフォルダ内のドキュメント全てを順番に開いて操作をする方法です。

For Each文とFileSystemオブジェクトを使って、フォルダ内のドキュメントを操作する方法でしたね。

さて、いよいよその応用として、実際にいろいろな一括処理をしていきたいと思います。

今回は手始めとして、Word VBAでフォルダ内の全てのドキュメントのフォントを変更する方法です。

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

前回のおさらい

前回作成したプロシージャはこちらです。

Sub openDocs()

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

Dim doc As Document
Dim strPath As String
strPath = ThisDocument.Path & "\原稿\"

Dim obj As Object
For Each obj In objFso.getfolder(strPath).Files

    Set doc = Documents.Open(strPath & "\" & obj.Name)
    Debug.Print doc.Name
    doc.Close

Next obj

Set objFso = Nothing

End Sub

FileSystemオブジェクトを使って、現在マクロを記述しているドキュメントファイルと同階層にある「原稿」というフォルダ内にアクセスしています。

11~17行目のFor Each文で、そのフォルダ内のドキュメントファイル一つ一つについて繰り返しを行っています。

For Each文内の14行目の「Debug.Print」の位置の処理を変更することで、様々な一括操作ができるようになるという寸法ですね。

文書全体のフォント種類を変更する方法

今回は、ドキュメント全体のフォントの種類を変更していきたいと思います。

まずは、ドキュメント単体についてやってみましょう。

オブジェクトブラウザーでFontプロパティを持つクラスを調べる

さて、フォントを変更するのであれば、Fontオブジェクトを使うよということをお伝えしていました。

Word VBAで選択範囲のフォント設定を変更する方法とそのプロパティまとめ
Word VBAで色々な検索&置換をする方法についてお伝えしています。今回はWord VBAでFontオブジェクトを使ってフォントの設定を変更する方法と、そのプロパティを一覧で一挙にまとめました。

ただ、こちらの記事ではSelectionオブジェクトつまり選択範囲についてのFontオブジェクトだったんですよね。今回は、ドキュメント全体を対象としたいので、どうすればよいと思いますか?

VBEで F2 キーを押してオブジェクトブラウザーを開きましょう。そこで「font」と入力して Enter すると、「Font」をメンバーに持つクラスがバババって出てきます。

VBEのオブジェクトブラウザー

いっぱいありますね~。

答えを言っちゃいますと、今回はRangeオブジェクトを使います!

Fontプロパティで…

Rangeオブジェクト.Font

とすることで、指定した範囲のFontオブジェクトを取得することができます。

Contentプロパティでドキュメント全体の範囲を取得

Documentオブジェクトに対するContentプロパティで、ドキュメント全体の範囲を取得することができるんです。

Documentオブジェクト.Content

プロパティ名はContentなのですが、これで指定したDocumentオブジェクト全体の範囲をRangeオブジェクトとして取得することができます。

ドキュメント全体のフォント種類を変更する

例えば、以下のような文書があるとします。

Wordのフォント変更前のドキュメント

VBEを開いて、イミディエイトウィンドウに以下入力して Enter してみてください。

ThisDocument.Content.Font.Name = "Meiryo UI"

Name・・・?と思うかもしれませんが、これは「フォント名」です。フォント種類を変更するには、FontオブジェクトのNameプロパティを変更すればよいのです。

Fontオブジェクト.Name = フォント名

ですから、上記の命令を実行すると以下のように文書全体が「Meiryo UI」に変更されるわけです。

Word VBAで文書全体のフォント種類を変更する

フォルダ内のドキュメントすべてのフォント種類を変更する

以上を踏まえまして、フォルダ内の全てのドキュメントについてフォント種類を変更するプロシージャを作りました。

Sub openDocs()

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

Dim doc As Document
Dim strPath As String
strPath = ThisDocument.Path & "\原稿\"

Dim obj As Object
For Each obj In objFso.getfolder(strPath).Files

    Set doc = Documents.Open(strPath & "\" & obj.Name)
    doc.Content.Font.Name = "Meiryo UI"

Next obj

Set objFso = Nothing

End Sub

14行目に、今回登場したContentプロパティ、そしてそれに対するFontオブジェクトの操作を入れてみました。

実行してみると

Word VBAでフォルダ内の全てのドキュメントについてフォント種類を変更

はい、全部開いて、フォント種類も「Meiryo UI」に変更されましたね。

ただ、全部開きっぱなしではありますが…

まとめ

Word VBAでフォルダ内のドキュメントファイル全てについてフォントの種類を変更する方法についてお伝えしました。

  • Contentプロパティでドキュメント全体の範囲を取得する
  • 範囲つまりRangeオブジェクトに対してフォント設定を変更する

このあたりがポイントでした。

さて、全部のドキュメントが開きっぱなし…だって、変更を保存しないと閉じられないじゃないですか。

ということで、次回はWordドキュメントを保存する方法です。

お楽しみに!

連載目次:Word VBAでフォルダ内のドキュメントを一括操作する

Wordで複数ドキュメントファイルに一括で同じ操作をしたいときがあります。そんな時は、VBAを使えば便利!マクロさえ仕込んでおけば、フォルダの中のドキュメントについてPCが自動で勝手に処理をしてくれます。そんなWord文書の一括操作のテクニックについてお伝えしていきます。
  1. Word VBAによるドキュメント一括処理の第一歩!文書ファイルを開く方法と閉じる方法
  2. Word VBAでFor Each~Next文を使ってフォルダ内のドキュメント全てを操作をする方法
  3. Word VBAでフォルダ内の全てのドキュメントのフォントの種類を変更する

Word VBAでドキュメントファイルを上書き保存する2つの方法

$
0
0

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

Word VBAで複数のドキュメントを一括処理するマクロの作り方をお伝えしています。

前回の記事はこちら。

Word VBAでフォルダ内の全てのドキュメントのフォントの種類を変更する
Word VBAで複数のドキュメントに一括処理をする方法についてお伝えしています。今回はWord VBAでフォルダ内の全てのドキュメントについて、その全体範囲のフォントを変更する方法です。

フォルダ内の全てのドキュメントのフォントを変更する方法をお伝えしました。

ただ、全部のファイルのフォントが変更できたのはいいのですが、保存はできていないわ、全部開きっぱなしだわで中途半端でした。すみません。

ということで、今回はその点を解決すべく、Word VBAでドキュメントファイルを保存する方法です。

まずは上書き保存をする方法をお伝えしますよ。

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

前回のおさらい

前回作成したプロシージャはこちらです。

Sub openDocs()

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

Dim strPath As String
strPath = ThisDocument.Path & "\原稿\"

Dim obj As Object
For Each obj In objFso.getfolder(strPath).Files

    With Documents.Open(strPath & "\" & obj.Name)
        .Content.Font.Name = "Meiryo UI"
    End With

Next obj

Set objFso = Nothing

End Sub

フォルダの操作が必要となりますので、3,4行目でFileSystemオブジェクトの変数宣言と生成をしています。

10~16行目が指定したフォルダ内の全てのファイルについて繰り返しを回す部分になっていて、それぞれのファイルについて12行目のOpenメソッドで開き、13行目のFont.Nameプロパティでフォントを変更しています。

Contentプロパティはドキュメント全体の範囲を取得するプロパティです。

ただ、実行すると…

Word VBAでフォルダ内の全てのドキュメントについてフォント種類を変更

全部開きっ放しです…汗

だって、ドキュメントファイル、閉じてないですからね。そして、保存しないと閉じれないじゃないですか。

Saveメソッドで上書き保存をする

まず、シンプルにSaveメソッドを使って上書き保存をする方法です。

書き方はこちらです。

Documentオブジェクト.Save

試しに、以下プロシージャを実行してみましょう。

Sub openDoc()

Dim doc As Document
With Documents.Open("C:\Users\ntaka\Dropbox\desktop\word-document\原稿(1章).docx")

    .Content.Font.Name = "Meiryo UI"
    .Save
    .Close

End With

End Sub

一瞬、指定のドキュメントが開きますが、すぐに閉じますね。再度開いて確認をしてみますと

Word VBAで文書のフォントを変更して上書き保存

うまくいっていますね。上書き保存、簡単です。

Closeメソッドの引数SaveChangesを設定して上書き保存をする

実は、Closeメソッドの引数SaveChangesの設定を加えると、上書き保存が可能になります。

Documentオブジェクト.Close SaveChanges

SaveChangesには、以下WdSaveOptions列挙の定数を指定します。

定数 説明
wdDoNotSaveChanges 変更を保存しない
wdPromptToSaveChanges 変更を保存するかをユーザーに確認する
wdSaveChanges 変更を保存する

デフォルトでは、wdDoNotSaveChangesつまり変更を保存しない設定になっています。

上書き保存をするのであれば、wdSaveChangesを設定すればよいということですね。

Sub openDoc()

Dim doc As Document
With Documents.Open("C:\Users\ntaka\Dropbox\desktop\word-document\原稿(1章).docx")

    .Content.Font.Name = "Meiryo UI"
    .Close wdSaveChanges

End With

End Sub

これで、変更が保存された上で閉じる、つまり先ほどと同様の結果が得られます。

一方で、引数にwdPromptToSaveChangesを設定すると、以下のようなダイアログが表示されるようになりますよ。

Word VBAのCloseメソッドで保存をユーザーに確認する

SaveメソッドよりもCloseメソッドのほうが細かい動作の設定ができますね。

フォルダ内の全てのドキュメントのフォントを変更して保存する

以上を踏まえて、フォルダ内の全てのドキュメントについてフォント種類を変更するプロシージャは以下になります。

Sub openDocs()

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

Dim strPath As String
strPath = ThisDocument.Path & "\原稿\"

Dim obj As Object
For Each obj In objFso.getfolder(strPath).Files

    With Documents.Open(strPath & "\" & obj.Name)
        .Content.Font.Name = "Meiryo UI"
        .Close wdSaveChanges
    End With

Next obj

Set objFso = Nothing

End Sub

全部で11ファイルありましたが、ものの10秒程度で完了しました。大量に文書があるときはてきめんですね。

まとめ

Word VBAでドキュメントファイルを上書き保存する方法をお伝えしました。

Saveメソッドを使う方法と、Closeメソッドの引数wdSaveChangesを使う方法がありますが、私は後者のほうが好みです。行数減らせますしね。

今回のプロシージャは大量にドキュメントファイルを処理するときには、強力な武器になると思います。

さて、上書き保存についてお伝えしましたので、次回は名前をつけて保存についてお伝えしますね。

どうぞお楽しみに!

連載目次:Word VBAでフォルダ内のドキュメントを一括操作する

Wordで複数ドキュメントファイルに一括で同じ操作をしたいときがあります。そんな時は、VBAを使えば便利!マクロさえ仕込んでおけば、フォルダの中のドキュメントについてPCが自動で勝手に処理をしてくれます。そんなWord文書の一括操作のテクニックについてお伝えしていきます。
  1. Word VBAによるドキュメント一括処理の第一歩!文書ファイルを開く方法と閉じる方法
  2. Word VBAでFor Each~Next文を使ってフォルダ内のドキュメント全てを操作をする方法
  3. Word VBAでフォルダ内の全てのドキュメントのフォントの種類を変更する
  4. Word VBAでドキュメントファイルを上書き保存する2つの方法

Google フォームでスマートフォンからスプレッドシートへの入力を簡単にしてみた

$
0
0
google,フォーム,スマートフォン,フォーム,スプレッドシート
皆様こんにちは、ノグチです。

前回までは、Googleスプレッドシートでシンプルな収支表と収支報告書を、簡単に作成する方法をご紹介しました。

Googleスプレッドシートで関数を使って簡単に収支報告書を作ってみた
Googleスプレッドシートで作成した収支表から、関数を使って超シンプルな収支報告書を簡単に作成する方法をご紹介しています。関数をうまく使えば、収支表を入力するたびに収支報告書の金額を更新させることができますよ。関数を使えば、計算ミスともオサラバです!
Googleスプレッドシートで作成した収支報告書をメンバーと共有してみた
Googleスプレッドシートで作成したドキュメントを、スプレッドシートの共有機能を使って、自分以外のメンバーに展開する方法をご紹介しています。共有のほか、紙への印刷やPDFファイルへの変換やGmailでの自動送信などの展開方法も併せてご紹介しています。
今回は、Googleスプレッドシートの入力画面としてフォームを利用する方法をご紹介します!

Googleスプレッドシートはスマートフォンでの入力が面倒臭い

まず、私は趣味で所属しているサークルの収支管理に、前回までにご紹介したGoogleスプレッドシートで作成した収支表を半年ほど利用していました。

PCで使う分には非常に便利ですし、メンバーとも簡単に内容を共有できるので、紙に手書きで収支管理していたころよりははるかに楽になりました。

しかし問題が一つ。

サークルがあった日に、その場でスマートフォンから収支表に当日の収支を入力してしまうのですが、このスマートフォンからの入力がとっても面倒臭いのです。

Googleスプレッドシートをスマートフォンで起動すると、こんな感じになります。

google,フォーム,スマートフォン,スプレッドシート

「パソコンで起動したときと変わらないじゃない」とお思いかもしれません。

しかしスマートフォンのキーボードにはTabキーもエンターキーもないので、セルの移動は専ら指で入力したいセルをタップしなければいけません。(右方向と下方向に進むボタンはメニューに表示されますが、キーボードを閉じないと表示されません)

たかだか数項目を入力するだけなのに、セルをタップして入力して、隣のセルをタップして入力して、画面を右にスライドさせてまたセルをタップして…と、実際にやってみて頂くとわかると思うのですが、実に面倒臭い。

ではどうするか…と悩んでいたところに、タカハシさんからの天の声を頂きました。

「Googleフォームを入力画面に使えばいいじゃない。」

なんということでしょう。

フォームで入力した値をスプレッドシートに転記できることは知っていたのですが、入力画面としてフォームを利用することは全く思いついていませんでした。

そんなわけで、スプレッドシートの入力画面として使うべく、フォームを作成することにしたのでした。

フォームの項目を作る

まず、新しいフォームの作成方法や、スプレッドシートとの紐づけは下記記事でご紹介されていますので、併せてご覧ください。

無料で簡単!Googleフォームで「お問い合わせフォーム」を作成する
Googleフォームで、「お問い合わせフォーム」を簡単に作成する方法をお伝えします。「お問い合わせ」「資料請求」などの入力フォーム画面を作ることができます。自分で作成すれば無料ですし、カスタマイズも可能になります。
Googleフォームで作成する項目の入力形式は、テキスト型や日付、時刻やチェックボックス、プルダウンと、いくつか選択できるようになっています
google,フォーム,項目,入力形式
そして今回作成したい項目は、収支表にある下記の5項目です。
google,フォーム,項目,作成項目,収支表

「収支表サンプル」というタイトルでフォームを作成して、収支表の各項目は下記の形式でそれぞれ作成しました。

項目 フォームの形式
日付 日付
収入 記述式
支出 記述式
費目 プルダウン
備考 記述式

そして実際のフォームがこちら。

google,フォーム,項目,入力形式,完成

これでフォームの完成です!

スマートフォンから入力してみる

こちらが実際にスマートフォンで、Safariからフォームを開いたものです。

見た目は非常にシンプルです。

では実際に入力してみると…

google,フォーム,項目,スマートフォン

指でセルをタップしたり、画面をスライドさせる必要が無くなって、かなり入力の手間が減りました!

特に、キーボードの上部に表示されている、このキー。

google,フォーム,項目,スマートフォン,キー
項目を入力してこの下向きのキーを押せば、次の項目へカーソルが移ってくれるので、スプレッドシートへの入力と比べると格段に楽になりました!

スプレッドシートのデータを見てみる

では、スマートフォンから入力したデータが、フォームに紐づけたスプレッドシートに転記できているか見てみます。
google,フォーム,項目,スプレッドシート,転記

この通り、ちゃんとスプレッドシートに転記されています

今後、前述で作成したフォームから収支を入力していけば、このシートにデータが蓄積されていきますので、前回の記事でご紹介したように、関数を使ってこのシートのデータから収支報告書を作成することもできますね

既存シートのデータとフォームからの入力データを合体させる

さて、フォームで入力したデータをスプレッドシートに転記できるのはご紹介した通りです。

ただ、スクリプトを使わないでフォームからデータを転記する場合は、新しいスプレッドシートに対してデータが追加されるようになります。

ということは、すでにある収支表のデータと、フォームから入力したデータはシートが分かれてしまうことに。

しかしそれでは収支報告書を作成する際に、2つのシートを1つにまとめなければいけません。

なので、今の段階で一つにしてしまいましょう!

やり方は超単純。

フォームからデータが転記されるスプレッドシートに、既存の収支表のデータを追加するだけです。
google,フォーム,スプレッド,収支表,データ移行
これで、今後フォームからデータが転記されるたびに、スプレッドシートの一番下の行へデータが追加されていきます。

まとめ

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

今回は、スマートフォンからスプレッドシートにデータ入力する場合の入力画面としてフォームを利用する方法をご紹介しました

今回はシンプルにフォームを作成していますが、ここにGoogleスクリプトを追加すれば、さらに入力が簡単にできるかもしれませんので、今後ご紹介していけたらと思います。

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

連載目次:Googleスプレッドシートで超簡単!収支表を作成しよう

スプレッドシートで収支表を作れば、スマホでも入力でき、共有もできるようになります。本シリーズではスプレッドシートを使って超簡単に収支表を作成する方法をお伝えしています。
  1. スマホからの入力も可能!Googleスプレッドシートで超簡単に収支表を作成してみた
  2. Googleスプレッドシートで関数を使って簡単に収支報告書を作ってみた
  3. Googleスプレッドシートで作成した収支報告書をメンバーと共有してみた
  4. Google フォームでスマートフォンからスプレッドシートへの入力を簡単にしてみた

Word VBAで複数のドキュメントファイルを一括処理して名前を付けて保存する方法

$
0
0
floppy-saveas

photo credit: Squirmelia Sundown via photopin (license)

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

Word VBAで複数ファイルを一括処理するマクロの作り方についてお伝えしています。

前回の記事はこちらです。

Word VBAでドキュメントファイルを上書き保存する2つの方法
Word VBAで複数のドキュメントを一括処理するマクロの作り方をお伝えしています。今回はWord VBAでドキュメントファイルをSaveメソッドとCloseメソッドを使って上書き保存する方法です。

ドキュメントを上書き保存する方法についてお伝えしましたね。

ただ、元のファイルを残したまま一括処理をしたい場合は、上書き保存だと困ってしまいます。

そんなときは、そう、名前を付けて保存ですね。

ということで、今回は、Word VBAで複数ファイルを処理して名前を付けて保存する方法をお伝えします。

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

前回のおさらい

まずは前回のおさらいからです。

作成したプロシージャはこちらでした。

Sub openDocs()

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

Dim strPath As String
strPath = ThisDocument.Path & "\原稿\"

Dim obj As Object
For Each obj In objFso.getfolder(strPath).Files

    With Documents.Open(strPath & "\" & obj.Name)
        .Content.Font.Name = "Meiryo UI"
        .Close wdSaveChanges
    End With

Next obj

Set objFso = Nothing

End Sub

現在のマクロを記述するファイルと同階層にある「原稿」というフォルダ内の全てのファイルについて、フォントの種類を変更して上書き保存をするというものです。

14行目のCloseメソッドの引数にwdSaveChangesを設定していますので、閉じるときに上書き保存をします。

今回は、その箇所を名前を付けて保存に変更をしていきたいと思います。

SaveAs2メソッドで名前を付けて保存する

ドキュメントを名前を付けて保存する場合はSaveAs2メソッドを使います。

書き方はそうです。

Documentオブジェクト.SaveAs2 ファイル名

ファイル名はパスを入れないと、既定のフォルダに保存されます。フルパスで指定するときが多いと思います。

では、以下プロシージャを実行してみましょう。

Sub openDoc()

Dim doc As Document
With Documents.Open(ThisDocument.Path & "\原稿(1章).docx")

    .Content.Font.Name = "Meiryo UI"
    .SaveAs2 ThisDocument.Path & "\原稿(1章)修正.docx"
    .Close

End With

End Sub

フォルダを除くと「原稿(1章)修正.docx」というファイル名で保存されていますね。

Word VBAで名前を付けて保存

ドキュメントを開くと、同様にフォント変更がされているはずです。

SaveAs2メソッドの「2」の謎

ん?なんで「2」…?

と思うかも知れませんが、Word2010以降はSaveAs2メソッドになったそうです。2007以前はSaveAsメソッドです。

SaveAs2メソッドで追加された機能としては、保存するドキュメントの互換モードを指定する引数CompatibilityModeが指定できるようになった点で、ほかについては同様の機能です。

しかし、MSさんのセンス…。

複数ドキュメントの一括処理をして名前を付けて保存する

GetBaseNameメソッドでベースネームを取り出す

SaveAs2メソッドを使って、名前を付けて保存するとなると、別名を用意する必要がありますね。

「原稿(1章).docx」を「原稿(1章)修正.docx」と変更するとして、2章の原稿も、3章の原稿も、同様に別名を生成をしていきたい場合に、どのようにすればよいでしょうか。

こんな時に便利なのが、FileSystemオブジェクトのGetBaseNameメソッドです。

GetBaseNameメソッドは指定したファイルやフォルダのベースネームつまり拡張子を除いたファイル名を取り出します。

「原稿(1章).docx」であれば「原稿(1章)」がベースネームとなります。

書き方はこうです。

FileSystemオブジェクト.GetBaseName(フルパス)

ただ、ベースネームを取り出すファイルのフルパスが必要になりますが、どう取得すればよいでしょうか。

FileオブジェクトのPathプロパティ

今回のプログラムでいうと、ベースネームを取り出すファイルは、For Each文内のobjという変数にFileオブジェクトとしてセットされます。

だからFileオブジェクトのフルパスを取得できればOKです。

FileオブジェクトにもPathプロパティがあります。

Fileオブジェクト.Path

DocumentオブジェクトのPathプロパティは、ドキュメントが格納されているフォルダのフルパスでしたが、FileオブジェクトのPathプロパティはファイル名まで含めたフルパスを取得する点に注意下さい。

これで、各ファイルのベースネームが取得できるわけです。

複数ドキュメントを処理して名前を付けて保存するプロシージャ

これを元に、冒頭のプロシージャに修正を加えたのがこちらです。

Sub openDocs()

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

Dim strPath As String
strPath = ThisDocument.Path & "\原稿\"

Dim obj As Object
For Each obj In objFso.getfolder(strPath).Files

    With Documents.Open(strPath & "\" & obj.Name)
        .Content.Font.Name = "Meiryo UI"
        .SaveAs2 strPath & objFso.getbasename(obj.Path) & "修正.docx"
        .Close
    End With

Next obj

Set objFso = Nothing

End Sub

今回の修正のメインは14行目ですね。

フォルダパスであるstrPathと各ファイルのベースネームに「修正.docx」を連結して、新しいファイル名を生成しています。

また、15行目のCloseメソッドはただ保存をすれば良いので、引数を削除しました。

実行すると、フォント種類が変更されたファイルたちは「~.修正.docx」 という別名で保存されます。

まとめ

Word VBAで複数ファイルを処理して名前を付けて保存する方法をお伝えしました。

名前を付けてドキュメントを保存するSaveAs2メソッドの使い方と、GetBaseNameメソッドによる別名の生成がポイントですね。

さて、次回ですが、各ファイルの処理についてもう少し凝った処理を加えていきたいと思います。

どうぞお楽しみに!

連載目次:Word VBAでフォルダ内のドキュメントを一括操作する

Wordで複数ドキュメントファイルに一括で同じ操作をしたいときがあります。そんな時は、VBAを使えば便利!マクロさえ仕込んでおけば、フォルダの中のドキュメントについてPCが自動で勝手に処理をしてくれます。そんなWord文書の一括操作のテクニックについてお伝えしていきます。
  1. Word VBAによるドキュメント一括処理の第一歩!文書ファイルを開く方法と閉じる方法
  2. Word VBAでFor Each~Next文を使ってフォルダ内のドキュメント全てを操作をする方法
  3. Word VBAでフォルダ内の全てのドキュメントのフォントの種類を変更する
  4. Word VBAでドキュメントファイルを上書き保存する2つの方法
  5. Word VBAで複数のドキュメントファイルを一括処理して名前を付けて保存する方法

Google Data StudioでGoogleアナリティクスのデータを表示する方法

$
0
0


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

本ブログではGoogle Apps Scriptのテクニックなどの記事を執筆していますが、実はデータアナリストが本業です。前回は、データをまとめて表示するダッシュボードを作成できる「Google Data Studio」の概要をお伝えしました。

圧倒的に見やすいダッシュボードを作成できる「Google Data Studio」が熱すぎる
簡単にKPIをまとめたダッシュボードを作成できる「Google Data Studio」を紹介します。KPIを可視化するダッシュボードを作れば、自社のサイトやビジネスの状況を常に把握できるようになります。

今回はGoogleアナリティクスのデータを使って、Google Data Studioでダッシュボードを作成する方法をお伝えします。Google Data Studioを使ってかっこいいダッシュボードを作っていきましょう。

Googleアナリティクスのデータに接続する

まずは以下のリンクからGoogle Data Studioにアクセスしましょう。

Google Data Studio turns your data into informative dashboards and reports that are easy to read, share, and customize. Try it free.

[空白]を選択して、新しいレポートを作成します。

 

真っ白なレポートが作成されます。ここからレポートに表示するデータソースを選択していきます。まずは[新しいデータソースを作成]を選択して下さい。

 

次に、[コネクタ]から表示させたいGoogle Analyticsを選びます。レポートに表示したいビューを選択していき、最後に「接続」を押します。

 

追加されるデータの項目が表示されます。今回は特に変更しないので、そのまま「レポートに追加」を押します。

これでデータソースにGoogleアナリティクスのデータが追加されました。

データを使ってグラフを作成する

では試しにグラフを作成していきましょう。

画像内のピンク枠部分から、レポートに表示させたいデータを選択していきます。アイコンは左から

  • 期間(折れ線グラフ)
  • 棒グラフ
  • 複合グラフ
  • 円グラフ
  • 地図
  • スコアカード
  • 散布図
  • ブレットグラフ
  • 面グラフ

となっています。今回は一番左の折れ線グラフ(期間)を選択しましょう。

 

グラフを選択して、レポート内の適当な場所をクリックするとグラフが表示されます。とても簡単ですね!

 

表示するデータを選択すると、プロパティを選ぶことができます。例では指標が「セッション」となっていますが、例えばこれを「ページビュー」にすることも可能です。

また、フィルタ機能がついているので、特定条件でセグメント化することもできます。

 

もちろん折れ線グラフの他にも色々なグラフが作成できます。次は試しに円グラフを作成してみましょう。

メニューバーの丸いアイコンをクリックしてみましょう。

 

すると今度は円グラフが作成できました。こちらの円グラフもプロパティから指標の内容を変更したり、グラフの色を変更することができます。

実際触ってみるとサクサクと簡単にグラフが作成できるのがおわかりいただけると思います。

このようにしてグラフを追加していき、簡単に自分だけのダッシュボードを作ることができます。

図やテキストを追加してダッシュボードをわかりやすく

Google Data Studioでは、ダッシュボードに図やテキストを自由に入力することが出来ます。テキストで補足を加えたり、会社のロゴを表示させて、視覚的に刺さるレポートを作りましょう。

会社での報告に使用するときは、レポートのぱっと見の印象はとても大事です。

メニューバーのピンク枠の部分からテキストやイメージを選択してダッシュボードに追加していきます。自由に配置やレイアウトを変更することが可能です。うまくデザインして上司をあっと言わせるダッシュボードを作ってみましょう。

アイコンは左から

  • テキスト
  • 画像
  • 長方形
  • 円形

です。

グラフやテキストを追加していくだけで、最終的にはこのようなダッシュボードが作れます。

「いつも隣にITのお仕事」ダッシュボード

こちらのサンプルはGoogle Data Studioで作成した「いつも隣にITのお仕事」のアクセスレポートです。

まとめ

今回の記事はいかがでしたでしょうか。Google Data Studioのレポートに、Googleアナリティクスのデータを表示することができました。

Google Data StudioはほかにもGoogleスプレッドシートやGoogle Cloud SQLのデータなどに接続することもできます。アナリティクス以外のデータも組み込むことが出来るので、Google Data Studioはデータを見て意思決定するための非常に強力なツールになるはずです。

ぜひ、あなた自身の手でかっこいいダッシュボードを作って、会社で上司をあっと言わせましょう。

次回もGoogle Data Studioのテクニックをご紹介しますね。

どうぞ、お楽しみに!

Word VBAで文書全体で全角スペースのみを検索する方法

$
0
0

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

Word VBAで複数のドキュメントを一括処理するマクロの作り方をシリーズでお伝えしてきました。

前回の記事はコチラ。

Word VBAで複数のドキュメントファイルを一括処理して名前を付けて保存する方法
Word VBAで複数ファイルを一括処理するマクロの作り方についてお伝えしています。今回はWord VBAで複数ファイルを処理してSaveAs2メソッドで名前を付けて保存する方法をお伝えします。

フォルダ内の全てのドキュメントについて、フォントの種類を変更して別名で保存するプロシージャを紹介しました。

さて、今回は趣向を変えますよ。

というのも、段落の冒頭…Wordのインデント機能ではなくて、全角スペースにしちゃったドキュメントがいっぱいあるのです。

それを一括で直したい…というわけです。

つまり、Word VBAで段落の冒頭が全角スペースならインデントに変更するマクロを作りたい!というわけです。

今回は、その最初の一歩として、Word VBAで全角スペースを検索する方法をお伝えします。

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

段落の冒頭が全角スペースになっている原稿

まずは、お題の確認といきましょう。

こちらの文書を見て下さい。

段落の冒頭がインデントだったりスペースだったりするWord文書

段落の冒頭が全角スペースだったり、インデントだったり…統一性がないんですね。

ていうか、そもそもスペースによる字下げと、インデントによる字下げって何が違うんでしょうか?

スペースとインデントの違い

それは、メモ帳などのテキストエディタにコピペをしてみるとわかります。

Wordの段落をメモ帳に貼り付けた

全角スペースを入れていた段落は当然、全角スペースが1文字入っているのですが、インデントをしていた段落に関しては何のスペースもありませんね。

つまり、インデントによる字下げは、文字としては「なし」なわけです。

テキストエディタやいろいろなところに貼り付ける機会があるとすると、スペースがあったり、なかったりの混在状態はいい迷惑なわけで、どちらかに統一しておくのがジェントルなわけです。

ということで、これを統一するマクロを作っていこうということになります。

全角スペースを検索する

では、まずは単一文書で全角スペースを1文字分のインデントに変更をするマクロを作ることを考えます。

こんな方針ではどうでしょう。

  1. 全角スペースを検索する
  2. 検索した全角スペースが段落の1文字目であれば
    • 全角スペースを削除
    • インデントを1文字挿入

てな方針です。

ということで、今回は1の全角スペースを検索するというところを目指していきます。

全角スペースを連続して検索する

手始めに、以下のような、全角スペースのみを検索して都度Stopするプロシージャを作ってみました。

Sub removeSpaces()

With Selection.Find
    .text = " "
    Do While .Execute
        Stop
    Loop

End With

End Sub

Findオブジェクトの設定として、Textプロパティは全角スペースを設定しています。

Findオブジェクト.Text = 検索文字列

5行目、Executeメソッドは検索がヒットしている間はTrueを返しますので、その間はDo While~Loop文の繰り返しがされます。

つまり、Findオブジェクトにヒットする限り全て検索するというわけですね。詳細は以下記事を参考ください。

Word VBAでカーソル位置から連続で検索をして蛍光ペンでハイライトをする
Word VBAで色々な検索&置換をする方法についてお伝えしています。Word VBAで連続して検索して蛍光ペンでハイライトをする方法についてお伝えします!Executeメソッドのイケてる機能がポイントです。

ただし、このプロシージャでは文書の末尾まで到達したら検索が終了します。Selectionが文書の途中だった場合は、それより以前の範囲が無視されてしまうんです。

文書全体から全角スペースを検索する

それで、追加をしなければならないのが、Wrapプロパティです。

Findオブジェクト.Wrap = WdFindWrap定数

Wrapプロパティに定数wdFindContinueを設定すると、全ての文書について検索をするということになります。

以下記事もご覧ください。

Word VBAで検索の方向を変更する方法と文書全体を検索する方法
Word VBAでいろいろな検索や置換をする方法についてお伝えしています。今回はForwardプロパティで検索方向を変える方法、Wrapプロパティで文書全体を検索する方法についてお伝えします。

Wrapプロパティの設定を追加したプロシージャがこちらです。

Sub removeSpaces()

With Selection.Find
    .text = " "
    .Wrap = wdFindContinue
    Do While .Execute
        Stop
    Loop

End With

End Sub

しかし、これを実行すると…

Word VBAで半角スペースもヒットした

このように半角スペースもヒットしちゃいますね。

MatchByteプロパティで半角と全角を区別する

いったん、Wordに戻って、「検索オプション」を見てみましょうか。

Word VBAで設定できるプロパティは、たいがいWordのオプションでも設定できますから。

Word VBAの検索オプション

「半角と全角を区別する」という項目がありますね。当然スペースにも当てはまります。

つまり、MatchByteプロパティに当たりますね。

Findオブジェクト.MatchByte = True

詳細は以下記事もご覧下さい。

Word VBAで検索オプションを設定して検索をする方法とそのプロパティ一覧
Word VBAで色々な検索や置換をする方法についてお伝えしています。今回はWord VBAで検索オプションを設定して検索をする方法をお伝えしつつ、その設定をするプロパティ一覧ををまとめています。

いったん、プロシージャの実行をリセットしてから、以下のようなプロシージャを実行してみましょう。

Sub removeSpaces()

With Selection.Find
    .text = " "
    .Wrap = wdFindContinue
    .MatchByte = True
    Do While .Execute
        Stop
    Loop

End With

End Sub

すると、半角スペースについてはヒットしなくなりますし、検索オプションを確認すると「半角と全角を区別する」がオンになっていますね。

Word VBAの検索オプションで半角と全角が区別されている

まとめ

Word VBAで全角スペースのみを検索する方法についてお伝えしました。

Wordの検索をVBAで実施する方法について復習ができたものと思います。

次回は、検索結果の全角スペースが段落の最初の文字かどうかという判定をする方法をお伝えします。

どうぞお楽しみに!

VBScriptでWEBスクレイピング!HTMLドキュメントとタイトルを取得する方法

$
0
0

こんにちは!あつもり(@atumori17)です。

VBScriptでIEを操作してWEBスクレイピング!の第3回目で~す。
前回はファイルシステムオブジェクトでテキストファイルに書き出すスクリプトを紹介しました。

VBScriptでWEBスクレイピング!ファイルシステムオブジェクトでテキストに書き出す
VBScriptでファイルシステムオブジェクトを使ってシンプルにテキストファイルに保存するテクニックの紹介です。せっかくWEBスクレイピングでWEBサイトから必要な情報を取得しても、保存する場所がなければ取得したデータを使うことはできないからです。

テキストファイルに書き出す準備ができたところで、いよいよIEを操作してHTMLドキュメントを取得してみたいと思います。

今回はWEBサイトのタイトル名を、titleタグを使って取得する方法を紹介します。

HTMLドキュメントを取得してタイトル名をテキストファイルに書き出すスクリプト

テキストエディタ開き下記のコードを入力します。全て入力し終わったら「title取得.vbs」などのファイル名でデスクトップに保存します。

Option Explicit


    Dim objIE
    Dim objLink

    Set objIE = CreateObject("InternetExplorer.Application")
    objIE.Visible = True

    'IEを開く
    objIE.navigate "http://google.co.jp/"


    'タイトルをテキストファイルに書き出す
    OutputText objIE.document.Title



'テキストファイルへ出力
Function OutputText(ByVal strMsg)

    Dim objFSO
    Dim objText

    'ファイルシステムオブジェクト
    Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
    ’テキストファイルを開く
    Set objText = objFSO.OpenTextFile("C:\work\title.txt", ForAppending, True)

    objText.write strMsg
    objText.write vbCrLf

    objText.close

    'オブジェクト変数をクリア
    Set objFSO = Nothing
    Set objText = Nothing

End Function

プログラムコードの解説

全体の流れは以下のようになります。

  1. IEでページを開く
  2. ページ全体の情報からタイトル名を抜き出す
  3. 抜き出したタイトル名をテキストファイルに保存する

IEで指定したページを開くところまでは前回ご説明しました。今回はページを開いた後の処理から説明していきます。

 

タイトル名をtitleタグから取得する

タイトル名を取得する前にHTMLとは何かを簡単に説明したいと思います。WEBスクレイピングでWEBサイトからほしい情報を取得するために、ある程度のHTMLの知識が必要になってくるからです。

HTMLとは

HTMLとはホームページを書くため言語で、ルールに沿って文章にマークをつける記述方法になります。

たとえばページのタイトルをHTMLで書くと下のようになります。

<title>いつも隣にITのお仕事</title>

すっごくシンプルですよね。<title></title>で囲まれた部分がページのタイトルとして表示されます。

<title>タイトル名</title>

この<title>の部分をタグと言います。タグを使ってページ内の文章に意味づけをしてあげるんですね。意味づけしてあげることで、ブラウザが<title>のところはタイトルで表示しよう!とか<strong>で囲まれたところは強調して太字で表示しよう!とかの判断ができるわけです。

タグには他にも色々あってWEBサイトへのリンクを表す<a>タグや、表を表す<table>タグなどがあります。

HTMLを書いてブラウザで開いてみようっ!

実際にコードを書いてみてブラウザで表示してみると何となく感じがつかめると思います。とっても簡単ですので早速やってみましょう。

まずテキストエディタで下記のようなコードを書いてファイル名を「サンプル.html」などとしてデスクトップに保存してみてください。

<html>

 <head>
  <title>いつも隣にITのお仕事</title>
 </head>

 <body>
  <h2>見出し</h2>
  <strong>強調して太字にする</strong>
 </body>

</html>

ダブルクリックすると以下のようなページが開きます。

WEBスクレイピングとは、このようなHTMLドキュメントの中から取得したいタグ名を検索して、そのタグ名で囲まれた内容を取ってくるテクニックになります。

今回の場合はページのタイトルを取得したいので、上記の例でいくと<title>タグで囲まれた「いつも隣にITのお仕事」を取得する、ということになります。

では実際にタイトル名を取得する方法について説明していきます。

documentプロパティからタイトル名を取得する

オブジェクト変数.document.Title

と書くことでIEで読み込んだWEBページ全体からタイトル名を取得することができます

そして取得したタイトル名をテキストファイルに書き出します。テキストファイルの書き出しは前回の記事を参考にしてみてください。

VBScriptでWEBスクレイピング!ファイルシステムオブジェクトでテキストに書き出す
VBScriptでファイルシステムオブジェクトを使ってシンプルにテキストファイルに保存するテクニックの紹介です。せっかくWEBスクレイピングでWEBサイトから必要な情報を取得しても、保存する場所がなければ取得したデータを使うことはできないからです。

アプリケーションを実行してみる

では実際に起動してみます。デスクトップにある「titleタグ取得.vbs」をダブルクリックして起動します。

あれ~?エラーメッセージが表示されてしまいましたね。これにはきちんとした理由がありますので心配ありませんよ~。

その理由とはブラウザの読み込み待ち処理を行っていないからです。ブラウザの読み込み処理については次回詳しくご説明します。今回は以上です。

 

まとめ

いかかでしたか?今回の内容をまとめると以下のようになります。

  • WEBスクレイピングを行うにはHTMLの知識がある程度必要になる
  • document.titleプロパティからWEBページのtitleが取得できる
  • ブラウザの読み込み待ち処理を入れないで、タイトルを取得しようとするとエラーになる

今回は以上です。それではお疲れさまでした~。

連載目次:VBScriptでお手軽WEBスクレイピング

Windowsを操作できるプログラミング言語「VBScript」を使えば、InternetExplorerを操作してWEBスクレイピングが可能です。 これで日々の情報収集はダブルクリック一発で完了させましょう!
  1. VBScriptでInternet Explorerを使って複数WEBサイトをダブルクリック一発で開く方法
  2. VBScriptでWEBスクレイピング!ファイルシステムオブジェクトでテキストに書き出す
  3. VBScriptでWEBスクレイピング!HTMLドキュメントとタイトルを取得する方法

Word VBAで検索した結果の段落とその範囲の開始位置を取得する方法

$
0
0

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

Word VBAで段落の冒頭の全角スペースをインデントに変更するマクロを作っています。

前回の記事はコチラ。

Word VBAで文書全体で全角スペースのみを検索する方法
Word VBAで複数のドキュメントを一括処理するマクロの作り方をお伝えしています。今回は、その第一歩としてWord VBAで全角スペースを検索する方法をお伝えします。Word検索の方法を復習します。

文書の全体から全角スペースのみを検索する方法をお伝えしました。

今回はこれを一歩進めて、検索した全角スペースが含まれる段落を取得する、またその段落範囲の開始位置を取得する方法をお伝えします。

あ、今回ですが、はっきり言って地味です。ですが、マスターすればとても有用ですよ!

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

前回のおさらい

前回作成したプロシージャはこちらです。

Sub removeSpaces()

With Selection.Find
    .Text = " "
    .Wrap = wdFindContinue
    .MatchByte = True
    Do While .Execute
        Stop
    Loop

End With

End Sub

全角スペースを見つけて順番に選択するプロシージャです。

ポイントとしては2点。

  • 5行目のWrapプロパティ:wdFindContinueを設定することにより文書全体を検索する
  • 6行目のMatchByteプロパティ:Trueを設定することで、全角と半角を区別する

今回のお題:発見した全角スペースが段落の冒頭かどうかを判定する

さて、最終的にやりたいことは、段落の冒頭が全角スペースであればインデントに変更をするという処理でしたね。

このプロシージャを実行していくと、全角スペースが順番に選択されるわけですが、以下のように段落冒頭の全角スペースのときは、インデントに変更をすればよいですよね。

Word VBAで全角スペースを検索した結果

ただし、以下のように段落の途中の全角スペースの場合もあります。この場合は、段落の冒頭にインデントを挿入しないようにする必要があります。

Word VBAで全角スペースを検索した結果2

その判定は、上記の図のように

  • Excecuteメソッドの結果選択されている全角スペースのStart
  • その全角スペースが含まれている段落範囲のStart

を比較することで実現可能です。

…わかりますか?

全角スペースが段落の最初の文字でなければ、全角スペースの位置を表す範囲のStartと、その段落範囲のStartは異なるはずということです。

検索結果の選択範囲の開始位置を求める

では、Excecuteメソッドの結果選択されている全角スペースの位置を取得してみましょう。

選択されているのですから、その範囲はSelectionオブジェクトです。Selectionオブジェクトの開始位置はStartプロパティで取得できましたよね。

Selection.Start
Word VBAでカーソル位置に文字を入力するとっても簡単なプログラム
Word VBA初心者向けシリーズ。今回は、文字を入力する方法の中で最もシンプルな方法を紹介。SelectionオブジェクトのtypeTextメソッドを使って、現在のカーソル位置に文字を入力する方法です。

ですから、Excecuteメソッドで発見した全角スペースの範囲の開始位置は、そのまんま以下で取得できるということです。

Selection.Start

検索結果を含む段落範囲の開始位置を求める

続いて、検索結果の全角スペースを含む段落範囲の開始位置を求めます。

こちらはちょっと道のりが長いですよ。

まず、検索結果の選択範囲を含む段落はSelectionオブジェクトのParagraphsプロパティで集合として取得することができます。

Selection.Paragraphs

今回の場合、Selectionは全角スペース1文字ですから、取得したParagraphsコレクションの要素はただ1つです。ですから、取得したい段落は最初の要素つまりFirstプロパティ

Paragraphsコレクション.First

を使って取得できますね。

その段落の開始位置を知りたいのですが、残念ながらParagraphオブジェクトにはStartプロパティがありません。

ですので、いったんRangeプロパティで範囲を取得します。

Paragraphオブジェクト.Range

これら一連のプロパティについては以下記事でも紹介していますので、ご参考ください。

Word VBAで選択範囲の最初の段落&最後の段落を取得する方法
初心者向けWord VBAを使って便利な入力ツールを作る方法をお伝えしています。 今回はWord VBAで選択範囲の中から最初の段落と最後の段落を取得して、その文字列を出力する方法をお伝えします。

そして、範囲つまりRangeオブジェクトの開始位置はStartプロパティで、終了位置はEndプロパティで取得できます。

Rangeオブジェクト.Start
Rangeオブジェクト.End

これらを踏まえますと、検索結果を含む段落範囲の開始位置を求めることができ、以下のように書きます。

Selection.Paragraphs.First.Range.Start

検索した全角スペースが段落の冒頭かどうかを判定するプロシージャ

これらの二つを比較して同じかどうかを判断すればよいということですね。

そこで、以下のようなプロシージャを作りました。

Sub removeSpaces()

With Selection.Find
    .Text = " "
    .Wrap = wdFindContinue
    .MatchByte = True
    Do While .Execute
        If Selection.Start = Selection.Paragraphs.First.Range.Start Then
            Debug.Print "インデントに差し替えます"
        Else
            Debug.Print "何もしません"
        End If
        Stop
    Loop

End With

End Sub

全角スペースを検索するたびに、段落の冒頭かどうかを判定して、冒頭であれば「インデントに差し替えます」、そうでなければ「何もしません」とデバッグ出力されます。

まとめ

Word VBAで検索結果が含まれる段落を取得し、その段落範囲の開始位置を取得する方法についてお伝えしました。

特別なテクニックは使っていませんが

Selection.Paragraphs.First.Range.Start

こういった表現がシュパっと出てくるようになると、本当にいろいろなことができるようになります。

ぜひ、いろいろ試してみてください。

では、次回いよいよインデントに差し替える処理を追加していきます。

どうぞお楽しみに!

連載目次:Word VBAで全角スペースをインデントに一括変更する

Wordで文書を作成するときに、段落の冒頭をうっかり全角スペースにしてしまったりすることありますよね。全部インデントに統一しておきたい、そんなときに使える一括変更マクロを作っていきます。
  1. Word VBAで文書全体で全角スペースのみを検索する方法
  2. Word VBAで検索した結果の段落とその範囲の開始位置を取得する方法

簡単Git入門!SourceTreeではじめるローカルバージョン管理

$
0
0

Git入門ロゴ01

こんにちは。くろゆきです。

皆さん、Git(ギット)使ってますか?

Gitは平たく言うと「対象ファイルの変更履歴とその時々の状態を保存してくれる、バージョン管理ツール」です。

  • ファイルの変更履歴を保存できる
  • 作業ファイルを別途保存していなくても、任意の時点まで戻せる
  • 別バージョンを管理するのが楽
  • チームで作業するのにファイルの競合を抑止できて大変便利

などなど、なかなか使い勝手が良さそうですね!

GitはSourceTreeというソフトを使用すると、大変簡単に使えるようになります。今回は最近操作画面やインストール方法が新しくなったSourceTree(とGit)のインストール方法を、最新の画像でご紹介します。

その前に、Git導入をためらっている方へ、Gitをオススメする理由を書いています。GitとSourceTreeのインストール方法のみ知りたい方は、「SourceTreeのインストール方法」まで飛んでくださいませ!

Gitは便利そうだけど、必要ないかなって思ってました

さて、「Gitって、本当に私の業務に必要かしら?」、そう思って導入に踏み切れない方も、実は結構いらっしゃるんじゃないでしょうか。

例えば、チームで作業をしないタイプのフリーランスの方などは、チーム作業でのメリットを謳っているGitには正直あまりそそられませんよね。(私がそうでした!)

現在の管理法で事足りていれば、Gitを導入するための時間と労力のコストのほうが高くつきそうですものね。

もう一つの壁、GitHub

Gitとセットのように語られるGitHubも、必要のない人にとっては導入障壁になっていると思います。

チームで作業しなければネットに上げる意味はあまり無いですし、GitHubは基本公開されるので、非公開にするためには有料プランにしなければなりません。

諸々考えて「使わなくても別にいいか」にたどり着いた方にこそ、この先を読んでいただきたいです。

Git、ローカル限定でも使えますよ!

  • Git、完全ローカル限定でも使えます。
  • チーム作業しなくても、バージョン管理はやっぱり便利です。
  • チーム作業したくなったら、GitHubの他にも無料&非公開で使えるBitbucketがあります!
  • 単独制作の方も使い慣れておけば、急なニーズに対応できます。
  • 導入も操作も、意外と簡単でした。ソフトがあるからコマンド打たなくていいよ!

いかがでしょうか?だいぶハードルが下がりませんか?

IT業界では非常によく使われているシステムでもありますので、覚えておいて損は無いと思います。

さらに言えば、ExcelやWordなどのファイルだって管理できますので、通常のオフィス業務で利用するのもオススメです。

当ブログ内では、すでに高橋さんが「Gitでできること」をより詳しく解説されていますので、興味をもたれた方は下記の記事をチェックです!

非エンジニアのためのバージョン管理Git~メリットと導入前の準備
バージョン管理システムGitについてお一人様かつ非エンジニアの皆さんがいざやってみようというときに読んで頂きたい記事です。Gitでできることと魅力、導入前に参考になるサイトなど紹介していきます。

「とりあえずやってみようかな?」と思えたら、早速トライしてみましょう!
 

これより先は、GitとGitを扱うためのSourceTreeというソフトのインストール方法の解説となります。
また、具体的な操作方法は別途記事にしますが、最初のうちは「チーム作業を必要としない、ローカルでファイル管理をしたい方向け」の内容になる予定です。

 
Gitは本来コマンドライン(あの黒い画面です!)で操作するものですが、「SourceTree」というソフトを利用すれば視覚的な操作のみで扱うことができます。

SourceTreeをインストールするとGitもセットで導入できますので、まずはこちらのインストールからはじめましょう!!

SourceTreeのインストール方法

下準備

インストールの途中でSourceTreeの提供元「Atlassian」にアカウント作成を求められます。
登録用のメールアドレスとパスワード(任意)を準備しておいてください。

ダウンロードURL

SourceTree is a free Mercurial and Git Client for Windows and Mac that provides a graphical interface for your Hg and Git repositories.

SourceTreeは誰でも無料で使用できます。まずはダウンロードしましょう。

SourceTreeのダウンロード画面

Windowsの方は、「Download for Windows」をクリック。MACの方はその下のリンクをクリックして下さい。
今回はWindows版のインストール方法をガイドしています。

SourceTreeのファイルを保存

ファイルを保存」をクリックして、PC内の任意の場所に保存しましょう。

この時背後のブラウザのページが「Bitbucketの登録を促す画面」に切り替わります。登録が必須なのかな?と一瞬思いますが、ローカル管理を目的とした今回のような場合はスルーして大丈夫です。
Bitbucketを促す画面

「Bitbucket」は「GitHub」と同様、Gitをネット上で管理・操作する際に利用する、登録制のサービスです。必要な場合は後から登録できます。

インストール開始

SourceTreeアイコン

保存したファイルをダブルクリックして、インストール開始です。

しばらく待つとこのような画面がでてきます。

saucetreeインストール画面

「ライセンスに同意」にチェックを入れ、右下の「続行」をクリック。
「ライセンスに同意」の下の「help improve SourceTree by sending」にはチェックを入れなくても大丈夫です。

Atlassianアカウントを作成・登録

Atlassianアカウントにログインを求められる

「Atlassianアカウント」にログイン、という画面が出てきます。今回はアカウントを新規作成するものとして進めていきます。

My Atlassianを開く」をクリックしてください。
※Atlassianアカウントをお持ちの方は「既存のアカウントを使用」に進んで下さい。

ブラウザで「Atlassianログイン画面」が開きます。

Atlassianアカウントにログインを求められる2

新規にアカウントを作成する場合は、赤枠で囲った「Sign Up.」をクリックして下さい。
・Googleのアカウントでログインする方、・すでにAtlassianのアカウントをお持ちの方は上部の枠からログインできます

アカウント情報を入力

上から下準備で用意しておいた「メールアドレス」「名前」「任意のパスワード」と入力していきます。「Show password」はチェックを入れると、自分が入力したパスワードが表示されます(確認の為ですね!)。

そして「私はロボットではありません」にチェックを入れると…

画像認証

ロボットスパムよけの質問が表示される場合があります。問題に従って画像を選び、「確認」をクリックしましょう。
問題がなければ、一番下の「Sign Up!」をクリックしてください。

メールが届くよ

ブラウザ画面は「メールをチェックしてね!」という内容に切り替わります。登録したメールアドレスを確認すると「Atlassian」からメールが届いているはずです。

メール

メール本文中の青ボタン「Verify my email address」をクリックしましょう。

メールでの認証が完了し、ブラウザのページはAtlassianアカウント設定画面へ移動しますが…

Atlassianアカウント設定画面

こちらの設定画面は現時点では特に設定しなくて大丈夫です。

SourceTree側で開きっぱなしになっていたログイン画面に戻りましょう。 もし消えてしまっていたら、SourceTreeのアイコンをもう一度クリックしてやり直して下さい。

Atlassianアカウント情報を入力

上段の枠に「Atlassianに登録したメールアドレス」、下段に「Atlassianに登録したパスワード」を入力し「Log in」をクリック。

complete!成功!

Atlassian登録が完了しました!!! もうちょっと作業があります。頑張ってください。
そのまま、右下の「続行」をクリックしましょう。

SourceTreeをインストール

ネット上でGitを管理するための接続先を選ぶ画面が出ます。今回はローカル管理を目的にしていますので、左下の「スキップ」をクリック。
(後から登録できますよ!)

接続先を選ぶをスキップ

SSLキーを読み込みますか?と尋ねられます。こちらも「No」でスキップ。

SSLキーもスキップ

使用するGitを選択する画面が出ます。一番上の「内蔵版Git」を選択しましょう。

Gitを選ぶ

ファイルのダウンロードが始まります。ダウンロードから解凍展開まで自動でしてくれるので、しばらく待ちましょう。

Gitダウンロード中

Mercurialのインストール

ダウンロード・解凍の進捗ウィンドウが消えると、また以下のような選択画面が出てきます。(うっかり消さないように注意!)
画面が元に戻って何も進展していないように錯覚しますが、よく見ると今度は「Mercurial」のインストール指示画面になっています。

Mercurialのインストール

先ほどと同様、一番上の「内蔵版Mercurial」を選択します。

ダウンロードと解凍が自動で完了すると、ソフト画面が出現します。

ソフト画面出現

これでSourceTreeインストール完了です!お疲れ様でした!! SourceTreeのデスクトップアイコンはこちらになります。

SourceTreeアイコン

次回予告

それでは次回からSourceTreeを使ったGit管理の方法を説明していきたいと思います。

チームやネット上で管理する場合の情報はすでに多くありますので、はじめはローカル作業に限定した、お一人様向けローカルGit・SourceTree操作入門になる予定です。題材は、シンプルなHTMLとCSSにしようと思います。

実はこちらのブログでは、すでに高橋さんがGitやSourceTreeについてプログラマとしての活用法をわかりやすく解説してくださっています。今すぐGitやSourceTreeについて理解を深めたい方は右上からテキスト検索されてみてください。

SourceTreeは最近、画面構成や操作法が変わりましたので、今回改めて、これからはじめてみようかな、というビギナーの方向けに記事を起こすことになりました。

SourceTree初心者のくろゆきが記事作成しますので、シンプルになる分、Gitへの理解をより深めやすいかと思います。どうぞ宜しくお願いします 。

Viewing all 2102 articles
Browse latest View live


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>