CoCoのYDブログ

心に思い浮かんだことを少し掘り下げ発信します

MsgBox関数 1

こんにちは

 

今日はMsgBox関数です。

え?いまさら?w

 

MsgBox関数ってただただ値を返すだけのものだと思っていませんか?

記載する内容次第ではYes,Noや表示するアイコンを変更することができます。

 

MsgBox関数とは

MsgBox関数とはダイアログボックスに文字を表示したりOK以外にもYesやCancelなどのボタンを追加して押されたボタンの値を返すことも出来る関数です。(マジ有能!)

 

MsgBox (Prompt [,Buttons] [,Title] [,HelpFile] [,ConText])

Prompt は表示するメッセージですね

Buttons はどのボタンを表示するか、どのアイコンを表示するか

Title はMsgBoxのタイトルです

HelpFileとConText はヘルプボタンを押した際にどのテキストを表示するかです

[]内のものは省略可能となっています。

 

Buttonsの種類

f:id:takataka2743:20181005234553p:plain

 

vbOKOnly ~ vbRetryVancel がボタンの変更

vbCancel ~ vbInformation がアイコンの変更

vbDefaultButton が最初に選択されているボタンの変更です

 サンプル

サンプルで以下のようなものを作ってみました。

ボタンとアイコンを一通り見れる様になっています。

Sub test()
    Dim i As Long
    For i = 0 To 5
        MsgBox "", i
    Next i
    For i = 0 To 64 Step 16
        MsgBox "", i
    Next i
End Sub

 アイコンごとに流れる音が変わるんですね!

全く知りませんでした。

 

今日はここまで

明日は応用を利かせてみます

 

 

【VBA】プログラム実行タイミング【セル変更時】

こんにちは

 

今日は特定のセルが変更された場合実行するプログラムを作成してみましょう。

自分の場合スケジュールの欄を作り、その欄の内容が変更された場合、予定一覧を変更するとかそんな感じで使用しますね。

意外と使えるのに使用例が思い浮かばないw

 

作成方法

今回はシートのほうに作成します。

f:id:takataka2743:20181004205649p:plain

 

今回は簡単に変更したセルの行をMsgboxで返すだけのプログラムです。

ただしすべてのセルに対して実行すると鬱陶しいので1~5行目のセルが変更した場合と条件をつけました。

Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Target, Range("1:5")) Is Nothing Then
        Exit Sub
    Else
        MsgBox Target.Row
    End If
End Sub

 1行目:プロシージャの開始

    タイトルがWorksheet_Change

    引数をByVal Target As Range に設定してください

2行目:条件引数のTargetが1~5行目以外かどうか

3行目:条件にあった場合、プロシージャの終了

4行目:Else

5行目:Targetの行をMsgboxで返す

6行目:If文の終了

7行目:プロシージャの終了

 

解説

Worksheet_Change(ByVal Target As Range)でワークシートの内容が変更された場合、変数Targetにアクティブセルが代入されます。

 

Intersectメソッドは

Intersect(セル,セルの範囲)のように作成します。

セルの範囲に指定したセルがあれば、指定したセルを返しますが、セルがなかった場合はNotingとして値を返します。

 

2行目の If Intersect(Target, Range("1:5")) Is Nothing Thenでは

変更したセルが1~5行にあるかを確認してない場合はプロシージャの終了となっています。

 

蛇足ですが、この If ~ is Nothing Then の形は If Not ~ is Nothing Then の形に変更できます。

 

5行目ではTargetがRange型であることを利用して.Rowプロパティを使用しています。

 

こんな感じですね。

使いどころは多そうなWorksheet_Changeプロシージャを一度は使ってみてはいかがでしょうか?

 

【VBA】プログラム実行タイミング【Book編】

こんにちは

 

今日はプログラムの実行するタイミングについてのお話です。

プログラムを実行してもらうときに毎回ボタンを押すのは面倒だし、他人に渡したらExcelを開いただけでプログラムが実行できたほうがスマートですよね。

 

ちなみに私はボタンを消されてプログラムが実行できないと起こられたことがあります。(理不尽だー

 

今回のプログラムはすべてThisWorkbookに作成します。

注意しましょう。

f:id:takataka2743:20181003230628p:plain

ブック起動時

簡単に説明するとこれだけです。

Sub Workbook_Open()
    処理
End Sub

プロシージャの名前は必ずWorkbook_Openにしてください。

 

ブック保存時

Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    処理
End Sub

 

 保存時は引数が二個ついてきます。

SaveAsUIはユーザーインターフェイスを使用するかという意味らしいですが、自分ではさっぱりでした。

Cancelは保存の有無です。

保存しない場合はFalseに設定しましょう。

 

ブックを閉じる

Sub Workbook_BeforeClose(Cancel As Boolean)
    処理
End Sub

これも上と同じで、CancelがFalseの場合終了できませんw

タスクから落とさないと閉じれないのかな?

 

シートを切り替える

これはなかなか使い道が・・・

シートを切り替え時に保存するとか?

Sub Workbook_SheetActivate(ByVal Sh As Object)
    処理
End Sub

今回は引数にObjectが入っています。

このObjectにはアクティブになったシートが格納されています。

 

ウインドウを切り替える

切り替えるのはExcelファイルから別のExcelファイルに切り替わった場合のみだそうです。

VBAを使用できるWordやOutlookでは反応しませんでした。

ウインドウを切り替えてファイルがアクティブになった場合

Sub Workbook_WindowActivate(ByVal Wn As Window)
    処理
End Sub

 

ウインドウを切り替えてファイルがアクティブでなくなった場合

Sub Workbook_WindowDeactivate(ByVal Wn As Window)
     MsgBox "Workbook_WindowDeactivateイベントが発生しました。"
End Sub

 

どちらも引数にWindowが入っています。

このWindow型にはマクロが入力されたウインドウが入っています。

 

いかがでしたか?

今回紹介したのはまだ一部です。

したの画像のようにWorkbookとタイミングを組み合わせることで様々なタイミングでマクロを実行することができます。

興味があれば色々と触ってみるのも楽しいと思います。

f:id:takataka2743:20181003234159p:plain

【WordPress】プラグインの追加

こんにちは

 

WordPressを使用するに当たってプラグインの追加方法を調べました。

プラグインはブログの機能を拡張するためのものです。

プラグインを使用することでWordPressの機能性をさらに上げることができます。

 

プラグインの追加手順

1.WordPressの管理画面から[プラグイン]-[新規追加]をクリック

f:id:takataka2743:20181002214113p:plain

2.キーワードを入力して検索する

今回はSpeech Bubbleで検索してみます。

f:id:takataka2743:20181002214514p:plain3.インストール

今すぐインストールをクリック

インストール後は有効化することを忘れずに

f:id:takataka2743:20181002214632p:plain

 

これでプラグインを追加できたはずです。

 

動作確認

実際に追加されたか確認してみます。

新規追加を見てみると吹き出しのボックスが追加されていました。

f:id:takataka2743:20181002221407p:plain

 

投稿も出来てる!

f:id:takataka2743:20181002221642p:plain

 

今回はメモになってしまいすみません。

しばらくこういったものが続くと思います。

 

でも質問やこういったものを作りたいという意見があれば自分なりに回答してみたいと思います。

【VBA】連番印刷をする 4

こんにちは

 

今回はボタンの追加です。

ボタンを追加することで、ボタンを押すだけでプログラムを実行できるようになります。

 

本来であれば、もっと前に説明すべき内容でしたw

 

ボタンの追加方法

f:id:takataka2743:20180928234759p:plain

1.開発タブの挿入からボタンをクリックします

2.図形の挿入と同様にどこにどの大きさのボタンを追加するか指定する

3.このボタンに何のプログラムを割り当てるか設定します。

f:id:takataka2743:20180928235010p:plain

4.ボタンの名前を変更

ボタンを右クリックしてテキストの編集をクリックします。

f:id:takataka2743:20180928235125p:plain

5.ボタンを押してプログラム実行です

 

ボタンの設定

f:id:takataka2743:20180928235444p:plain

ボタンの印刷の設定と、コピー時にボタンもコピーされるかの設定を紹介します。

どちらもコントロールの書式設定で行います。

 

1.ボタンを右クリックしてコントロールの書式設定をクリック

2.プロパティタブをクリックして各種設定

f:id:takataka2743:20180928235700p:plain

「セルにあわせて移動やサイズを変更しない」はセルをコピーした際に度短も一緒にコピーされるかを設定します。

 

「オブジェクトを印刷する」は印刷時にボタンも印刷するかどうかですね。

 

自分はこの設定がよく分からず四苦八苦してました。

 

今回は短いですがこの辺で失礼します。

【VBA】連番印刷をする 3

こんにちは

 

引き続き連番印刷です。

今回はプログラム編ということで簡単にですがプログラムを作成しました。

 

f:id:takataka2743:20180928232007p:plain

文字を入力するのはC7とC28のセルですね。

それではプログラムを見ていきましょう。

 

サンプルプログラム

Sub test()
    Dim 入力文字 As String
    Dim 番号, 枚数 As Long
    Dim i As Long

    入力文字 = InputBox("開始する番号を入力してください", "連番印刷", "")
    If IsNumeric(入力文字) Then
    ElseIf Int(入力文字) < 0 Then Exit Sub
    Else: Exit Sub
    End If
    番号 = Int(入力文字)

    入力文字 = InputBox("印刷する枚数を入力してください", "連番印刷", "")
    If IsNumeric(入力文字) Then
    ElseIf Int(入力文字) < 0 Then Exit Sub
    Else: Exit Sub
    End If
    枚数 = Int(入力文字)


    For i = 1 To 枚数
        Range("C7") = Date & " " & 番号 + i - 1
        Range("C28") = Date & " " & 番号 + 枚数 + i - 1
        Worksheets("Sheet1").PrintOut
    Next i

    Range("C7") = "=TODAY()"
    Range("C28") = "=C7"
End Sub

 

1行目:プロシージャの開始

2~4行目:変数宣言

5行目:なし

6行目:InputBoxによる文字の入力

7~10行目:入力された文字が数字で0より大きいか判定

11行目:開始の番号の代入

12行目:なし

13~18行目:開始番号の内容を印刷枚数に置き換えたもの

19~20行目:なし

21行目:For文の開始、印刷枚数文繰り返す

22行目:C7セルに日付と番号を入力

23行目:C28セルに日付と番号を入力(印刷枚数文数字を足す)

24行目:シートの印刷

25行目:Next i

26行目:なし

27行目:C7セルにTODAY関数を入力

28行目:C28セルに=C7を入力

29行目:プロシージャの終了

 

解説

7行目と14行目のIsNumeric(入力文字)は()内の値が数字ならTrueを返します。

ここのIf文以外をExit Subにすることで数字が入力されなかった場合はプログラムを終了するようにしています。

 

22,23行目

Date & " " & 番号 + i - 1

これは今日の日付とスペース、番号を入力しています。

Date & " " & 番号 + 枚数 + i - 1

これは紙を半分に切断して重ねたときに1枚目から順番になるように枚数文がプラスされています。

 

プログラムはこんなもので。

歳後にボタンの追加方法を説明しますね。

【VBA】連番印刷をする 2

こんにちは

 

今回は作成するに当たって使用する命令の説明を行います。

いつもどおり説明しても良いのですが、内容が多くなってしまうため小分けになっちゃいます。ごめんなさい><

 

どんな命令が必要か

大事なことですね。

一度考えて見ましょう。

f:id:takataka2743:20180928221659p:plain

番号の入力

連番を入力するのはFor文でよさそうですね。

でも日付の後ろに入力を行います。

つまりRange("C7") = 今日の日付 & 番号 といった感じでしょうか

今日の日付はDateを使用することで入力できます。

Date関数とは

Date関数はExcelのTODAY()関数と同じで今日の日付を表示します。

Year(Date) は今年の年数

Month(Date) は今月の月数

Day(Date) は今日の日付を表示します。

 

文字の入力

これも大事ですね。

ここではInputBoxを使用します。

Inputboxでは表示するタイトルや表示される文字、デフォルトの値を設定できます。

サンプルで以下のプログラムを作成しました。

Sub test()
    Dim 文字 As String
    文字 = InputBox("表示される文字", "タイトル", "デフォルト値")
    MsgBox 文字
End Sub

 

f:id:takataka2743:20180928223141p:plain

 こんな感じに表示されます。

ちなみにここでキャンセルを押すと文字は何も入力されません。

 

印刷

忘れちゃいけないのが印刷ですね。

いちいちプログラムを止めて印刷するわけにもいきません。

印刷には.PrintOutプロパティを使用します。

Worksheets("シート名").PrintOut

で設定されているプリンタにデータが送られます。