日本語入力ソフトとVBAの覚え書き

・各種日本語入力ソフトの辞書解説 ・ちょっと楽になるExcel VBA集

Enterキーを押したときに移動するセルの方向(上下左右)を変更するトグルマクロ

f:id:dz_dzone:20170814233145j:plain

通常、Enterキーを押したときに移動するセルの方向は「下」です。これを「右/上/左」に変更するには「Excelのオプション」を開いて「詳細設定」から変更することが可能ですが、やや面倒くさいです。ここでは、実行するたびに移動するセルの方向を変更するマクロを作ります。

f:id:dz_dzone:20171110110840j:plain

下→右→上→左→下……と切り替える場合

Sub SetMARD()
  ' ★★ Enterを押したら移動する方向を変更 ★★
  Select Case Application.MoveAfterReturnDirection
  Case xlDown
    Application.MoveAfterReturnDirection = xlToRight
    MsgBox "下→右に切り替えました。", vbOKOnly + vbInformation
  Case xlToRight
    Application.MoveAfterReturnDirection = xlUp
    MsgBox "右→上に切り替えました。", vbOKOnly + vbInformation
  Case xlUp
    Application.MoveAfterReturnDirection = xlToLeft
    MsgBox "上→左に切り替えました。", vbOKOnly + vbInformation
  Case xlToLeft
    Application.MoveAfterReturnDirection = xlDown
    MsgBox "左→下に切り替えました。", vbOKOnly + vbInformation
  End Select
End Sub
  • 「Enterキーを押したときに移動するセルの方向」は Application.MoveAfterReturnDirection で取得および設定が可能
  • 上=xlUp
  • 下=xlDown
  • 左=xlToLeft
  • 右=xlToRight

このコードでは、現状の MoveAfterReturnDirection を取得し、その値にしたがって処理を分けたいので、Select Caseを使っています。実行後、どのように方向が変わったのかダイアログを出しています。

f:id:dz_dzone:20171110111110j:plain

下→右→下……と切り替える場合

ほとんど同じです。万が一現状が上や左になっていた場合に備え、その場合は下になるようにコードを変更しました。

Sub SetMARD2()
  ' ★★ Enterを押したら移動する方向を変更 ★★
  Select Case Application.MoveAfterReturnDirection
  Case xlDown
    Application.MoveAfterReturnDirection = xlToRight
    MsgBox "下→右に切り替えました。", vbOKOnly + vbInformation
  Case xlToRight
    Application.MoveAfterReturnDirection = xlDown
    MsgBox "右→下に切り替えました。", vbOKOnly + vbInformation
  Case Else
    Application.MoveAfterReturnDirection = xlDown
    MsgBox "上/左→下に切り替えました。", vbOKOnly + vbInformation
  End Select
End Sub

以上。

にほんブログ村 IT技術ブログ VBAへ←記事を気に入って頂けたらポチッとしてもらえると励みになります。

InputBox関数を数値を入力するまで繰り返す処理

f:id:dz_dzone:20170814233145j:plain

InputBox関数で数値だけを入力させたい場合の処理です。

  Do
    StrIB = InputBox("開始数字?")
  Loop Until IsNumeric(StrIB) = True
  • Do~Loopを後判定で実行しています
  • 後判定は最低1回は処理を実行します(この場合はInputBox関数)
  • Untilは条件が成立するまで。Whileにすると条件が成立している間ずっと、になります
  • IsNumeric関数は"数値に見えるもの"は全てTrueを返します

厳密に配列宣言する場合

  Dim m As Long
  Dim StrIB As String
    
  Do
    StrIB = InputBox("開始数字?")
  Loop Until IsNumeric(StrIB) = True
  
  m = CLng(StrIB)
  • InputBox関数の返り値はStringです
  • 実際には数値(Long型)として使いたいのでClng関数で型変換しています
  • 少数を使いたい場合はSingleやDoubleなど適宜変更して下さい

※ちなみに小数を入力してLong型に変換すると小数点第一位で四捨五入されます。


以上。

にほんブログ村 IT技術ブログ VBAへ←記事を気に入って頂けたらポチッとしてもらえると励みになります。

エクセルのコマンドボタン/自作VBAマクロの解説

f:id:dz_dzone:20170814233145j:plain

基本的なこと

  1. リボンとクイックアクセスツールバー

リボン/クイックアクセスツールバーのボタン

  1.  「Excelのオプション」を一発で開くボタン
  2. 「罫線」を手軽に引く/消すボタン
  3. いろいろな「貼り付け」ボタン
  4. 「印刷」に関連したボタン

 

エクセルVBA

基本

  1. VBAマクロ作成を気軽に始めてみよう! ~Excel編~
  2. VBAマクロをリボンやクィックアクセスツールバーのボタンに割り当てる
  3. (VBScript) XLSTARTフォルダを開く (無い場合は作成して開く)
  4. (PowerShell) XLSTARTフォルダを開く、フォルダが無い場合は作成して開く

ループ処理

  1. InputBox関数を数値が入力されるまで繰り返す処理(Do~Loop後判定)

分岐処理

  1. Enterキーを押した後に移動するセルの方向を変更するトグルマクロ(Select Case)

セル

  1. よく使うブック、シート、セルの指定方法
  2. 選択範囲、選択シートに対する処理の定型的書き方
  3. 最終セル、最終行、最終列を選択する
  4. セルの内容を調べる

シート

  1. よく使うブック、シート、セルの指定方法
  2. 選択範囲、選択シートに対する処理の定型的書き方
  3. シートのインデックスと名前と数、表示と非表示の制御

ブック

  1. よく使うブック、シート、セルの指定方法
  2. 作業中のブックを含むフォルダを開く

コマンド

  1. 縮小して全体を表示する
  2. ゼロ値の表示・非表示トグル

セルのコメント

  1. 選択範囲にコメントを一括で追加する
  2. コメントのみ貼り付けるコマンドをを作成する
  3. セルのコメントを一括で表示・非表示にする
  4. 選択範囲のコメント位置をリセットする
  5. コメント枠の自動サイズ調整を有効にする
  6. セルのコメントを編集する(1) InputBox関数編-1
  7. セルのコメントを編集する(2) InputBox関数編-2 複数行対応
  8. セルのコメントを編集する(3) ユーザーフォーム編-1

シェイプ

  1. VBAでオートシェイプを描画する際の基礎

 

 

セルのコメントを編集する(3) ユーザーフォーム編-1

f:id:dz_dzone:20170814233145j:plain

前回までは InputBox関数を使ってセルのコメント編集を行いました。複数行に対応はしましたが、その方法は区切り文字を使うというちょっとまどろっこしいものでした。もう少し編集画面をなんとか出来ないかと思ったのがこの記事を作るきっかけです。

入力ダイアログにユーザーフォームを使う

ユーザーフォームの作り込み

早速作っていきます。Visual Basic Editorのプロジェクトウィンドウ、個人用マクロブック(PERSONAL.XLSB)で右クリックから挿入>ユーザーフォームを選びます。

f:id:dz_dzone:20171025095913j:plain

UserForm1が作られました。

f:id:dz_dzone:20171025100048j:plain

ツールボックスを表示させます。

f:id:dz_dzone:20171025140309j:plain

テキストボックスを配置します。

f:id:dz_dzone:20171025140322j:plain

f:id:dz_dzone:20171025140334j:plain

ボタンを配置します。

f:id:dz_dzone:20171025140343j:plain

f:id:dz_dzone:20171025140354j:plain

オブジェクト名を変更する

プロパティウィンドウでオブジェクト名を分かりやすい名前に変更します。オブジェクト名はコード入力でも使います。ここでは以下のようにしました。

  • ユーザーフォーム:UF_EditComment
  • テキストボックス:TB_EditComment
  • コマンドボタン:Btn_EditCommentOK

オブジェクトのプロパティを設定する

オブジェクトのプロパティはある程度はプロパティウィンドウでも設定できますし、コード記述で設定することも可能です。ここでは以下のようプロパティウィンドウで設定しました。

ユーザーフォーム
プロパティ 内容
(オブジェクト名) UF_EditComment
Caption コメント編集
  • Caption : 表示される名称
テキストボックス
プロパティ 内容
(オブジェクト名) TB_EditComment
MultiLine True
WordWrap False
EnterKeyBehavior True
ScrollBars fmScrollBarsBoth
IMEMode fmIMEModeHiragana
TabIndex 0
  • MultiLine : テキストボックスを複数行対応させるか (True/False)
  • WordWrap : テキストボックスの右端で自動改行させるか (True/False)
  • EnterKeyBehavior : Enterキーを押したときにテキストボックス内で改行するか (True/False)
  • ScrollBars : fmScrollBarsBoth=縦横のスクロールバーを有効にする
  • IMEMode : fmIMEModeHiragana=テキストボックスで自動的にIMEをひらがなモードにする
  • TabIndex : TABキーを押したときにフォーカスが移動する順番 (0, 1, 2, ……)
コマンドボタン
プロパティ 内容
(オブジェクト名) Btn_EditCommentOK
Caption OK
TabIndex 1

f:id:dz_dzone:20171027091032j:plain

標準モジュールのコード

まず標準モジュールにコードを書きます。(2017.10.31追記あり)

Sub EditComment()
  ' ** ユーザーフォーム版コメント編集 **
  If TypeName(ActiveCell.Comment) = "Comment" Then
    ' ** コメントがある場合
    
    Dim BoolCommentVisible As Boolean
  
    ' ** 既存コメントの表示状態を記憶
    BoolCommentVisible = ActiveCell.Comment.Visible
  
    ' ** 既存コメントが非表示なら表示させる
    If BoolCommentVisible = False Then
      ActiveCell.Comment.Visible = True
    End If
        
    ' ** ユーザーフォームをモーダルで表示 **
    UF_EditComment.Show (vbModal)
  
    ' ** 既存コメントの状態を回復
    If BoolCommentVisible = False Then
      ActiveCell.Comment.Visible = False
    End If
  
  Else
    
    MsgBox "コメントがありません。", vbOKOnly + vbExclamation
  
  End If
End Sub

ここでは対象セルのコメントの有無を判定して、あればユーザーフォーム:UF_EditCommentをモーダルで表示するよう指示しています。

(2017.10.31追記)また、コメントが表示状態でないとエラーになるため、コメントが非表示状態の場合はユーザーフォームを表示させる前にコメントを表示状態にしています。フォームが閉じられるとコメントを非表示状態に戻します。(追記ここまで)

  • Modal (モーダル) : フォーカスをユーザーフォームのみに当て、エクセルのメイン画面に当てない
  • Modeless (モードレス) : フォーカスをユーザーフォームとエクセルのメイン画面の両方に当てる

例としては、セルの書式設定ウィンドウがモーダル、検索/置換ウィンドウがモードレスです。

起動テスト

マクロ:EditCommentの起動テストをしてみます。

セルにコメントがある場合、このようにユーザーフォームが表示されます。
f:id:dz_dzone:20171027094416j:plain

テキストボックスに文字を入力して挙動を確認して下さい。

  • テキストボックス内で改行できるか?
  • EnterでフォーカスがOKに飛んでしまわないか?
  • テキストボックスの右端で自動改行されてしまわないか?
  • 横スクロールバーが出てくるか?
  • 縦スクロールバーが出てくるか?

また、TABキーの挙動も確認して下さい。

  • TABを押すたびにテキストボックスとOKボタンにフォーカスが移動するか?

なお、この状態でOKボタンを押しても何の反応もありません。これはユーザーフォームのコードを入力していないからです。右上の×ボタンでフォームを閉じることだけが出来ます。フォームを閉じて次に進みます。

ユーザーフォーム(UF_EditComment)のコード

ユーザーフォームのコードウィンドウを表示させます。
f:id:dz_dzone:20171027095905j:plain

ユーザーフォームの初期化

ユーザーフォームの初期化は決まり文句です。ユーザーフォームを開いたときに処理しておきたい内容を記します。

Private Sub UserForm_Initialize()

End Sub

オブジェクトのプロパティをプロパティウィンドウで設定しなかった場合はユーザーフォームの初期化の中でプロパティを記述する必要があります。ここではプロパティウィンドウで設定済みなのでコードはありません。

今回は必要な処理は下記になります。

  • 現在のセルを記憶させる
  • 既存のコメントをテキストボックスに表示する
Private StrActiveCell As String   ' ** ユーザーフォームの初期化

' ** ユーザーフォームの初期化 **
Private Sub UserForm_Initialize()
    
  ' ** 現在のセルを記憶 **
  StrActiveCell = ActiveCell.Address
    
  ' ** 既存のコメントをテキストボックスに表示 **
  TB_EditComment.Text = ActiveCell.Comment.Text
    
End Sub

OKボタンを押したときの処理

次に、OKボタンを押したときの処理を書きます。

Private StrComment As String

Private Sub Btn_EditCommentOK_Click()   ' ** OKボタンを押したときの挙動
  
  ' ** テキストボックスの内容を変数に代入
  StrComment = TB_EditComment.Text
   
  ' ** 編集内容が空白ならキャンセルとみなしてフォームを閉じる
  If StrComment = "" Then
    Unload UF_EditComment
    Exit Sub
  End If

  ' **セルのコメント内容を上書きする
  With Range(StrActiveCell)
    With .Comment
      .Shape.Select True
      .Text Text:=StrComment
    End With
    .Activate
  End With
    
  ' **フォームを閉じる
  Unload UF_EditComment
End Sub

完成したマクロの動作を確認する

f:id:dz_dzone:20171027114949j:plain

f:id:dz_dzone:20171027115002j:plain

f:id:dz_dzone:20171027115014j:plain

完成しました。

次回:もう少し便利にいろいろ改造してみる

次回は、このユーザーフォームを元にもう少し便利に改造していきたいと思います。


以上。

にほんブログ村 IT技術ブログ VBAへ←記事を気に入って頂けたらポチッとしてもらえると励みになります。

(PowerShell) XLSTARTフォルダを開く、フォルダが無い場合は作成して開く

f:id:dz_dzone:20171026093517p:plain

PowerShellも覚えたいなと思い、少しずつ調べています。PS5対応のリファレンス本とかあればいいんですが……。

「XLSTARTフォルダを開く」をPowerShellで作ってみました

さて、以前VBScriptで作った、
dz11.hatenadiary.jp

をPowerShellで作ってみました。

#XLSTARTフォルダの有無を確認して、あれば開く、なければ作って開く。

$UserProfile = $env:UserProfile

If(Test-Path $UserProfile\AppData\Roaming\Microsoft\Excel\XLSTART){
    #フォルダが存在する場合
    Invoke-Item $UserProfile\AppData\Roaming\Microsoft\Excel\XLSTART
}else{
    #フォルダが存在しない場合
    New-Item $UserProfile\AppData\Roaming\Microsoft\Excel\XLSTART -ItemType Directory
    Invoke-Item $UserProfile\AppData\Roaming\Microsoft\Excel\XLSTART
}

上記のコードをWindows PowerShell ISEにコピー&ペーストして任意のファイル名でps1ファイルを作成して下さい。

f:id:dz_dzone:20171026094537j:plain

スクリプトの実行セキュリティポリシーの変更が必要

PowerShellではセキュリティの関係から初期状態ではスクリプトが動作しません。したがって、実行ポリシーの変更が必要です。

  Set-ExecutionPolicy RemoteSigned

詳細はこちらを参照して下さい。
www.atmarkit.co.jp

スクリプトファイルを開く

デスクトップ等にあるスクリプトファイルはダブルクリックしても起動できません。PowerShellスクリプトを開くには、

f:id:dz_dzone:20171026094303j:plain

このようにします。

VBScript版に比べるとフォルダが開く速さが格段に違いますね。


以上。

セルのコメントを編集する(2) InputBox関数編-2 複数行対応

f:id:dz_dzone:20170814233145j:plain

InputBox関数によるセルのコメント編集マクロ、前回は1行コメントの編集に対応したものを作成しました。今回はこれを元に複数行に対応させてみようと思います。

前回までのコード

Sub KomeHen()
  If TypeName(ActiveCell.Comment) = "Comment" Then
  
    ' ** セルにコメントがあれば処理する **
    Dim StrHen As String
    StrHen = InputBox(Prompt:="※改行は出来ません。", _
                      Title:="コメント編集(一行版)", _
                      Default:=ActiveCell.Comment.Text)
        
    ' ** キャンセル処理
    If StrPtr(StrHen) = 0 Then
      Exit Sub
    End If
    
    ' ** コメント内容を変更する処理 **
    With ActiveCell
      With .Comment
        .Shape.Select True
        .Text Text:=StrHen
      End With
      .Activate
    End With
    Exit Sub
  Else
    ' ** セルにコメントがなかったら終了する **
    MsgBox "コメントがありません。", vbOKOnly + vbExclamation
    Exit Sub
  End If
End Sub

単純に vbCrLf や Chr(13) & Chr(10) とはいかない

改行と言えば vbCrLf や Chr(13) & Chr(10) などが思いつきますが、InputBoxにこれらを単純に入力しても改行にはなりません。

f:id:dz_dzone:20171024105000j:plain
f:id:dz_dzone:20171024105010j:plain

全然出来てませんね。入力したとおりのコメントになってしまいました。

文字列を分割するSplit関数

文字列を分割するのにはSplit関数があります。区切り文字を設定することで文字列を複数文字列に分割することが可能です。分割された文字列は1次元配列に入ります。

    ' ** Split
    Dim RTmp As Variant
    RTmp = Split(StrHen, ",")

返り値が1次元配列なのでVariant型とします。区切り文字を","として StrHen を分割し、1次元配列 RTmp に代入します。

    StrHen = RTmp(0)
    For i = 1 To UBound(RTmp)
      StrHen = StrHen & vbCrLf & RTmp(i)
    Next i

StrHen を書き換えます。まず1行目を代入し、2行目以降は改行(vbCrLf)と文字列を追加していきます。このとき、最大分割数(=配列の最大数)が必要になりますので、UBound関数で最大値を求めます。

f:id:dz_dzone:20171024115246j:plain
f:id:dz_dzone:20171024115256j:plain

既存のコメントが複数行だった場合の処理

既存のコメントが複数行だった場合、InputBoxに代入される文字列は見た目は1行になったように見えます。

f:id:dz_dzone:20171024131126j:plain

この状態で別の場所に改行を入れてみます。「1行目」「2行目」「3行目」の後ろに","を入れて改行します。

f:id:dz_dzone:20171024132001j:plain

指定した箇所で改行されましたが、元々の改行が残っていました。

f:id:dz_dzone:20171024132014j:plain

ワークシート関数 Clean を使う

InputBoxに既存のコメントを表示する際に、不要な改行を削除するため、ワークシート関数「CLEAN」を使用します。

    Dim DefaultComment As String
    DefaultComment = WorksheetFunction.Clean(ActiveCell.Comment.Text)
        
    StrHen = InputBox(Prompt:="※改行したい位置に,を入力して下さい。", _
                      Title:="コメント編集(改良版)", _
                      Default:=DefaultComment)

「1行目」「2行目」「3行目」の後ろに","を入れて改行します。

f:id:dz_dzone:20171024132001j:plain

意図したとおりに改行されました。

f:id:dz_dzone:20171024133200j:plain

完成コード

Sub KomeHen2()
  If TypeName(ActiveCell.Comment) = "Comment" Then
    ' ** セルにコメントがあれば処理する **
        
    Dim StrHen As String
    Dim DefaultComment As String
        
    DefaultComment = WorksheetFunction.Clean(ActiveCell.Comment.Text)
        
    StrHen = InputBox(Prompt:="※改行したい位置に,を入力して下さい。", _
                      Title:="コメント編集(改良版)", _
                      Default:=DefaultComment)
        
    ' ** 空白ならキャンセルとする
    If StrPtr(StrHen) = 0 Then
      Exit Sub
    End If
    
    ' ** Split
    Dim RTmp As Variant
    RTmp = Split(StrHen, ",")
        
    StrHen = RTmp(0)
    For i = 1 To UBound(RTmp)
      StrHen = StrHen & vbCrLf & RTmp(i)
    Next i
        
    ' ** コメント内容を変更する処理 **
    With ActiveCell
      With .Comment
        .Shape.Select True
        .Text Text:=StrHen
      End With
        .Activate
    End With
    Exit Sub
  Else
    ' ** セルにコメントがなかったら終了する **
    MsgBox "コメントがありません。", vbOKOnly + vbExclamation
    Exit Sub
  End If
End Sub

次回:ユーザーフォームを使ったセルのコメント編集

これでInputBox関数を使ったセルのコメント編集マクロは完成です。次回は、ユーザーフォームを使ったセルのコメント編集マクロを作ろうと思います。

以上。

にほんブログ村 IT技術ブログ VBAへ←記事を気に入って頂けたらポチッとしてもらえると励みになります。

セルのコメントを編集する(1) InputBox関数編-1

f:id:dz_dzone:20170814233145j:plain

個人的に仕事で大量のコメントを追加しては日々編集しているんですが、こう大量にあるとエクセル標準のコメント編集機能ではちょっとまどろっこしいところがあります。何か入力ダイアログみたいなもので編集できると便利だなと思ったので今回はこれをやってみたいと思います。

入力ダイアログにInputBox関数を使う

まず最初に考えたのは文字列を入力できるInputBox関数です。まずは簡単にコードを組んでみます。

Sub KomeHen0()
  Dim StrHen As String
  
  ' ** 文字列を入力 **
  StrHen = InputBox(Prompt:="文字を入力", Title:="コメント編集")
  
  ' ** コメント内容を変更する処理 **
  With ActiveCell
    With .Comment
      .Shape.Select True
      .Text Text:=StrHen
    End With
    .Activate
  End With
End Sub

f:id:dz_dzone:20171024093109j:plain
f:id:dz_dzone:20171024093120j:plain
f:id:dz_dzone:20171024093127j:plain

コードの説明

With~End Withをネスト(入れ子構造)してますが、内容は簡単です。
ActiveCellに対し「.Comment.Shape.Select True」は、セルのコメントを選択状態にします。その上で「.Comment.Text Text:=StrHen」でコメントのテキストをStrHenにする」を実行します。最後に「ActiveCell.Activate」で選択状態をコメントからセルに戻します。

基本のコードが出来ました。

エラー処理を追加

現状のコードですと、コメントが設定されていないセルで実行するとエラーになりますので、エラー処理を加えます。

  If TypeName(ActiveCell.Comment) = "Comment" Then
    ' ** セルにコメントがあれば処理する **
  Else
    ' ** セルにコメントがなかったら終了する **
    MsgBox "コメントがありません。", vbOKOnly + vbExclamation
    Exit Sub
  End If

コメントの有無で処理を変えます。

キャンセル処理

現状のコードでキャンセルを押すとエラーが発生します。

f:id:dz_dzone:20171024095523j:plain

InputBox関数のキャンセル処理は定型的な書き方があります。私はこちらを参考にしました。

www.relief.jp

これを踏まえて

    ' ** キャンセル処理
    If StrPtr(StrHen) = 0 Then
      Exit Sub
    End If

既に入力されているコメントをInputBoxに代入する

コメントをまるっきり書き換える場合は今のままで良いのですが、既に入力されているコメントを編集する場合、また同じような文字列を入力するのは面倒です。そこで既に入力されているコメントをInputBoxに代入しておきます。

  StrHen = InputBox(Prompt:="文字を入力", _
                    Title:="コメント編集", _
                    Default:=ActiveCell.Comment.Text)

f:id:dz_dzone:20171024100609j:plain

次回:複数行に対応させる

今回のコードですと一行のコメントにしか対応していません。次回は複数行に対応させてみようと思います。

今回の完成コード

Sub KomeHen()
  If TypeName(ActiveCell.Comment) = "Comment" Then
  
    ' ** セルにコメントがあれば処理する **
    Dim StrHen As String
    StrHen = InputBox(Prompt:="※改行は出来ません。", _
                      Title:="コメント編集(一行版)", _
                      Default:=ActiveCell.Comment.Text)
        
    ' ** キャンセル処理
    If StrPtr(StrHen) = 0 Then
      Exit Sub
    End If
    
    ' ** コメント内容を変更する処理 **
    With ActiveCell
      With .Comment
        .Shape.Select True
        .Text Text:=StrHen
      End With
      .Activate
    End With
  Else
    ' ** セルにコメントがなかったら終了する **
    MsgBox "コメントがありません。", vbOKOnly + vbExclamation
    Exit Sub
  End If
End Sub

以上。

にほんブログ村 IT技術ブログ VBAへ←記事を気に入って頂けたらポチッとしてもらえると励みになります。

(リボン/クイックアクセス) 「セルの罫線」を手軽に引く/消すボタンを追加する

f:id:dz_dzone:20170814233145j:plain

リボンやクイックアクセスツールバーに罫線を引いたり消したりするボタンを追加してエクセルを便利にしてみましょう。

はじめに

皆さんはエクセルで罫線を引くときにどのようにしていますか?
まさか、昔のエクセルみたいに範囲選択して右クリックの書式設定から罫線設定してたりしませんか?

f:id:dz_dzone:20170925110419j:plain

それともホームタブのフォントグループ内にある罫線ボタンのプルダウンリストから設定しているでしょうか?

f:id:dz_dzone:20170925110438j:plain

実はこのプルダウンリストにある項目、すべて単独のボタンとして設定することが可能です。ここでは、新しく罫線タブを作って各ボタンを追加する手順を説明します。

準備

まず入れ物を作ります。リボンのユーザー設定を開き、新しいタブを作成して名前を「罫線」に変更してください。

f:id:dz_dzone:20170925105929j:plain

コマンドをリボンに追加する

この作業がちょっと面倒くさいのですが、これを設定してしまえば後が楽になりますので我慢してやってみましょう。

「コマンドの選択」は「すべてのコマンド」を選びます。目的の罫線コマンドを探し、「追加」ボタンでリボンに追加していきます。

f:id:dz_dzone:20170925111031j:plain

追加するコマンド

1. 右罫線 ( BorderRight )

f:id:dz_dzone:20170925111935j:plain

※上下左右の4つの罫線にはもう一つコマンドがあります。右罫線の場合「右罫線 (BorderRightNoToggle)」という風に「NoToggle」がついたものです。こちらは今回は使いませんので注意してください。

f:id:dz_dzone:20170925112101j:plain

2. 横罫線(内側)( BorderInsideHorizontal )

f:id:dz_dzone:20170925112501j:plain

3. 下罫線 ( BorderBottom )

f:id:dz_dzone:20170925113457j:plain

4. 下太罫線 ( BorderThickBottom )

f:id:dz_dzone:20170925113524j:plain

5. 下二重罫線 ( BorderDoubleBottom )

f:id:dz_dzone:20170925113557j:plain

6. 外枠 ( BorderOutside )

f:id:dz_dzone:20170925113630j:plain

7. 外枠太罫線 ( BorderThickOutside )

f:id:dz_dzone:20170925113714j:plain

8. 格子 ( BordersAll )

f:id:dz_dzone:20170925113804j:plain

9. 罫線 ( BordersGallery )

f:id:dz_dzone:20170925113849j:plain

10. 罫線(内側)( BorderInside )

f:id:dz_dzone:20170925113924j:plain

11. 罫線グリッドの作成 ( BordersDrawGrid )

f:id:dz_dzone:20170925114012j:plain

12. 罫線の作成 ( BorderDrawLine )

f:id:dz_dzone:20170925114120j:plain

13. 罫線の削除 ( BorderErase )

f:id:dz_dzone:20170925114153j:plain

14. 左罫線 ( BorderLeft )

f:id:dz_dzone:20170925114230j:plain

15. 斜め罫線(右下がり)( BorderDiagonalDown )

f:id:dz_dzone:20170925114400j:plain

16. 斜め罫線(右上がり)( BorderDiagonalUp )

f:id:dz_dzone:20170925114432j:plain

17. 縦罫線(内側)( BorderInsideVertical )

f:id:dz_dzone:20170925114454j:plain

18. 上罫線 ( BorderTop )

f:id:dz_dzone:20170925114528j:plain

19. 枠なし ( BorderNone )

f:id:dz_dzone:20170925114550j:plain

ボタンを並び替える

ボタンを選択して右の上下ボタンで並び替えが出来ます。ここでは右図のように並べ替えました。

f:id:dz_dzone:20170925132049j:plain

完成したリボンの罫線タブは以下の通りです。

f:id:dz_dzone:20170925132224j:plain

なお、リボンのボタンはウィンドウ幅によって自動的に拡大縮小します。

f:id:dz_dzone:20170925135542j:plain

f:id:dz_dzone:20170925135557j:plain

 

便利な使い方

上下左右の罫線がトグルボタン(状態監視付)になっているので、押すたびに「罫線を引く」「罫線を削除」が出来る

B2:D4の範囲を選択した状態

f:id:dz_dzone:20170927092634j:plain

「上罫線」「下罫線」「左罫線」「右罫線」を押すと、ボタンの背景が緑色に変化(押された状態を示す)します。

f:id:dz_dzone:20170927092718j:plain

そのときの状態

f:id:dz_dzone:20170927092826j:plain

次に「左罫線」「右罫線」を再度押して消します。(ボタンの緑背景が消えた)

f:id:dz_dzone:20170927092953j:plain

そのときの状態

f:id:dz_dzone:20170927093054j:plain

 

横罫線(内側)・縦罫線(内側)・斜め罫線(右下がり/右上がり)もトグルボタン(状態監視無し)になっている

B2:D4の範囲で上下左右の罫線が引かれている状態

f:id:dz_dzone:20170927093248j:plain

「横罫線(内側)」「縦罫線(内側)」を押すと、縦横の罫線が引かれました。このときボタンの背景は変わっていません。内側罫線にはその機能がないからです。

f:id:dz_dzone:20170927093258j:plain

次に「縦罫線(内側)」を押して消してみます。縦罫線だけ消えたのが確認できます。

f:id:dz_dzone:20170927093310j:plain

 

「罫線の作成」「罫線グリッドの作成」「罫線の削除」ボタン

「罫線の作成」ボタンを押してから、任意範囲をドラッグ(囲う)と、その範囲を囲う外枠罫線が引くことが出来ます。

f:id:dz_dzone:20170927094058j:plain

「罫線グリッドの作成」の場合は、内側の罫線も童子に引くことが出来ます。

f:id:dz_dzone:20170927094146j:plain

「罫線の削除」では任意の範囲の罫線を全て消すことが出来ます。

f:id:dz_dzone:20170927094225j:plain

 

クイックアクセスツールバーにボタンを追加する

気に入ったリボンのボタンはクイックアクセスツールバーに追加することが出来ます。

「格子」ボタンにカーソルを合わせて右クリックすると、一番上に「クイックアクセスツールバーに追加」の項目があります。

f:id:dz_dzone:20170927094752j:plain

クイックアクセスツールバーに「格子」が追加されました。

f:id:dz_dzone:20170927094918j:plain

同様に気に入ったボタンをクイックアクセスツールバーに追加しました。

f:id:dz_dzone:20170927094934j:plain

以上。

 

にほんブログ村 PC家電ブログ パソコンの豆知識へ←記事を気に入って頂けたらポチッとしてもらえると励みになります。

(News) iOS用のGoogleのキーボードアプリGboardにGoogle日本語入力が搭載されました

japan.googleblog.com

Gboard — a new keyboard from Google

Gboard — a new keyboard from Google

  • Google, Inc.
  • ユーティリティ
  • 無料

Google Japan Blogによると、

本日より、iOS 向けキーボードアプリ Gboard が日本語に対応し、日本語をお使いの皆さんにも広くお使いいただけるようになりました。

Gboard は、直接、キーボードアプリから検索したり、検索結果を共有したり、さらに絵文字を入力したりすることができます。iOS ユーザーの皆さんから、多数のリクエストをいただいていた Google 日本語入力も、Gboard に搭載する形で、やっとお届けできるようになりました。お待たせしました!

とのことです。

早速試してみた

私も早速インストールしてみましたが、今のところ出来ることは

  • キーボードレイアウトの変更(12キー/QWERTY/GODAN)
  • テーマの変更(デフォルト2種/風景10種/自作背景可能)
  • Google音声入力の使用
  • サジェスト対応
  • 絵文字対応

となっており、逆に今のところ出来ないことは

  • ユーザー辞書のインポート・エクスポート
  • iOSユーザー辞書を利用する
  • iOS連絡先を利用する

など、ユーザー辞書絡みについては全く作られていない様子です。

今後のバージョンアップに期待ですね。

 

 

シートのインデックスと名前と数、表示と非表示の制御

f:id:dz_dzone:20170814233145j:plain

シートのインデックス番号と名前

現在のシートのインデックス番号と名前を表示する

ActiveSheet.Index 'シートのインデックス
ActiveSheet.Name  'シートの名前

Msgboxに表示させます。

Sub GetSheetName()
    MsgBox "現在のシート" & vbCrLf & _
        "Index = " & ActiveSheet.Index & vbCrLf & _
        "Name = " & ActiveSheet.Name
End Sub

結果表示
f:id:dz_dzone:20170413154323j:plain

シートを移動させたらインデックス番号はどうなる?

Sheet2を左端に移動してみます。
f:id:dz_dzone:20170413162528j:plain
Indexが1になりました。Indexはあくまでもシートの左からの順番だということが分かります。

ブックに含まれるすべてのシートのインデックスと名前を表示する

Sub GSN_All()
    Dim myShts As Object
    Dim SN As String
    SN = "Index:Name" & vbCrLf
    
    For Each myShts In ActiveWorkbook.Sheets
        SN = SN & myShts.Index & ":" & myShts.Name & vbCrLf
    Next myShts
    
    MsgBox SN
End Sub

f:id:dz_dzone:20170919093214j:plain

ブックに含まれるシートの数は?

Sub GetSheetCount()
    MsgBox Worksheets.Count
End Sub

f:id:dz_dzone:20170919093322j:plain

シートの非表示と再表示

シートの表示と非表示の制御はシートのVisibleプロパティで行います。

    Sheets("Sheet1").Visible = True または False または xlVeryHidden

選択したシートを非表示にする

メニュー操作の場合

f:id:dz_dzone:20170919105320j:plain

注意点:全てのシートを非表示にしようとすると次のエラーダイアログが出ます。
f:id:dz_dzone:20170919105419j:plain

VBAの場合
Sub SheetInvisible()
    ActiveWindow.SelectedSheets.Visible = False
End Sub

メニュー操作と同様、全てのシートを非表示にしようとするとエラーが出ます。エラー処理の追加が必要です。
f:id:dz_dzone:20170919105737j:plain

非表示のシートを再表示する

メニュー操作の場合

f:id:dz_dzone:20170919110018j:plain
f:id:dz_dzone:20170919110039j:plain

VBAの場合
Sub AllSheetsVisible()
    Dim myShts As Object
    For Each myShts In ActiveWorkbook.Sheets
        myShts.Visible = True
    Next myShts
End Sub

全てのシートをFor Each ~ Nextで一つずつ回してVisibleプロパティをTrueにしていきます。

メニュー操作で再表示出来ないようにする

    Sheets("Sheet1").Visible = xlVeryHidden

VisibleプロパティをxlVeryHiddenにするとメニュー操作で再表示が出来ないようにシートを非表示に出来ます。このシートを再表示する場合は、メニュー操作ではなくVBAコードで表示させてください。

以上。

にほんブログ村 IT技術ブログ VBAへ←記事を気に入って頂けたらポチッとしてもらえると励みになります。

セルの内容を調べるExcelVBAコード

f:id:dz_dzone:20170814233145j:plain
一口にセルの内容と言ってもいくつか考えられます。「値」だったり「テキスト」だったり「数式」だったり、また書式によっても内容はいろいろ変わりますよね。ここではいくつかの例を挙げてそれぞれの「セルの内容」を確認します。

コード

Sub ShowCellData()
    Dim StrCellAddress, StrFmt, StrVal, StrVal2, StrTxt, StrFml
    With ActiveCell
        StrCellAddress = "セル : " & .Address
        StrFmt = "書式 : " & .DisplayFormat.NumberFormatLocal
        StrTxt = "Text  : " & .Text
        StrVal = "Value : " & .Value
        StrVal2 = "Value2 : " & .Value2
        StrFml = "Fomula: " & .Formula
    End With
    MsgBox StrCellAddress & vbCrLf & StrFmt & vbCrLf & _
           StrTxt & vbCrLf & StrVal & vbCrLf & _
           StrVal2 & vbCrLf & StrFml
End Sub
Rangeオブジェクトのプロパティ 内容
.Text テキスト
.Value
.Value2 値2
.Formula 数式

数値(1)

f:id:dz_dzone:20170914142838j:plain
C4セルに「123」と数値を入力しました。数式バーも「123」になっています。書式は標準でこれは数値です。この場合はどのプロパティでも「123」になります。
f:id:dz_dzone:20170914143501j:plain
D4セルに「=C4*2」と数式を入力しました。計算されてセルは「246」と表示されています。数式バーは「=C4*2」です。書式は標準でこれは数値です。数式以外のプロパティは「246」になります。

数値(2):分数

f:id:dz_dzone:20170914144553j:plain
C8セルに「0.5」と数値を入力しました。数式バーも「0.5」になっています。書式は標準でこれは数値です。この場合はどのプロパティでも「0.5」になります。
f:id:dz_dzone:20170914144604j:plain
D8セルに「=C8」と数式を入力し、書式を「# ?/?」(分数)に設定しました。書式に従ってセルには「1/2」と表示されています。数式バーは「=C8」です。このとき値としては「0.5」、テキストは「1/2」となります。

文字列

f:id:dz_dzone:20170914145303j:plain
C5セルに「ABC」と文字列を入力しました。数式バーも「ABC」になっています。書式は標準でこれは文字列です。この場合はどのプロパティでも「ABC」になります。
f:id:dz_dzone:20170914145318j:plain
D5セルに「=LEFTB(C5,2)」と数式を入力しました。数式に従いセルは「AB」と表示されています。数式バーは「=LEFTB(C5,2)」です。書式は標準でこれは文字列です。数式以外のプロパティは「AB」となります。

通貨/会計

f:id:dz_dzone:20170914145405j:plain
C6セルに「1234567」と数値を入力しました。数式バーも「1234567」になっています。書式は標準でこれは数値です。この場合はどのプロパティでも「1234567」になります。
f:id:dz_dzone:20170914145415j:plain
D6セルに「=C6」と数式を入力し、書式を「通貨(¥)」に設定しました。書式に従ってセルには「¥1,234,567」と表示されています。数式バーは「=C6」です。このとき値としては「1234567」、テキストは「¥1,234,567」となります。

日付/時刻

f:id:dz_dzone:20170914145427j:plain
C7セルに「2017/9/1」と日付を入力しました。書式は自動的に「yyyy/m/d」になりました。数式バーは「2017/9/1」です。値(Value)は「2017/09/01」になっています。また、値2(Value2)はシリアル値の「42979」になっています。数式もシリアル値になっています。
f:id:dz_dzone:20170914152539j:plain
C7セルを一度クリアして「H29/9/1」と日付を入力しました。書式は自動的に「[$-411]ge.m.d」になりました。数式バーは「2017/9/1」です。値(Value)は「2017/09/01」になっています。また、値2(Value2)はシリアル値の「42979」になっています。数式もシリアル値になっています。
f:id:dz_dzone:20170914145437j:plain
D7セルに「=C7」と数式を入力し、書式を和暦の日付に設定しました。数式バーは「=C7」です。値(Value)は「2017/09/01」になっています。また、値2(Value2)はシリアル値の「42979」になっています。

まとめ

まとめると以下のようになります。

日付/時刻以外の場合

プロパティ 内容
Textプロパティ セルに表示されているもの
Valueプロパティ 入力値または数式の結果で書式が標準のもの
Value2プロパティ Valueと同値
Formulaプロパティ 数式が入力されていれば数式
それ以外は入力値で書式が標準のもの

日付/時刻の場合

プロパティ 内容
Textプロパティ セルに表示されているもの
Valueプロパティ 書式「yyyy/mm/dd」の日付
※書式「h:mm:ss」の時刻
Value2プロパティ シリアル値
Formulaプロパティ 数式が入力されていれば数式
それ以外はシリアル値

以上。

にほんブログ村 IT技術ブログ VBAへ←記事を気に入って頂けたらポチッとしてもらえると励みになります。

(リボン/クイックアクセス) 「Excelのオプション」を一発で開くボタン

f:id:dz_dzone:20170814233145j:plain

「Excelのオプション」は「ファイル」タブから開きます。何ということはありませんが、たったの一手間でも省略したい方のために、リボンやクイックアクセスツールバーに配置できるボタンが用意されています。

f:id:dz_dzone:20170912154343j:plain

f:id:dz_dzone:20170912161605j:plain

「オプション」を開くボタン

「リボンのユーザー設定」や「クイックアクセスツールバーのユーザー設定」を開いて下図のコマンドを追加してください。

f:id:dz_dzone:20170912161221j:plain

ちなみに筆者は、クイックアクセスツールバーの一番最初にボタンを追加しています。(左端はExcelの固定アイコン)

f:id:dz_dzone:20170912161753j:plain

実は「リボンのユーザー設定」や「クイックアクセスツールバーのユーザー設定」もこのオプション画面に入っていますよ。

 

以上です。

VBAマクロをリボンやクィックアクセスツールバーのボタンに割り当てる

f:id:dz_dzone:20170814233145j:plain

作成したVBAマクロを手軽に実行出来るように、リボンやクイックアクセスツールバーのボタンに配置してみましょう。

目次

手順その1 リボンのユーザー設定を開く

リボンの任意の場所で右クリックしてメニューを開き、「リボンのユーザー設定」をクリックします。

f:id:dz_dzone:20170901142146j:plain

「リボンのユーザー設定」画面が開きました。

f:id:dz_dzone:20170901142239j:plain

画面右側、「新しいタブ」をクリックします。

f:id:dz_dzone:20170911091223j:plain

「新しいタブ(ユーザー設定)」と「新しいグループ(ユーザー設定)」が作成されました。

f:id:dz_dzone:20170911091354j:plain

「新しいタブ(ユーザー設定)」を選択して、「名前の変更」をクリックします。

f:id:dz_dzone:20170911091446j:plain

任意の名前に変更します。ここでは仮に「マイツール」としておきます。

f:id:dz_dzone:20170911091527j:plain

次に「新しいグループ(ユーザー設定)」を選択して「名前の変更」をクリックします。

f:id:dz_dzone:20170911091617j:plain

任意の名前に変更します。ここでは仮に「マクロ」としておきます。(アイコンは反映されないのでどれでも良いです)

f:id:dz_dzone:20170911091655j:plain

次に画面の左上の「コマンド選択」から「マクロ」を選択します。

f:id:dz_dzone:20170911091803j:plain

任意のマクロを選択して「追加」をクリックします。ここでは仮に「PERSONAL.XLSB!HelloWorld」を選択します。

f:id:dz_dzone:20170911091929j:plain

「マイツール」タブの「マクロ」グループに「PERSONAL.XLSB!HelloWorld」が追加されました。「名前の変更」をクリックします。

f:id:dz_dzone:20170911092044j:plain

任意のアイコンを選択し、表示名を変更します。ここでは下図のようにアイコンは「フェイスマーク」、表示名は「HelloWorld」とします。

f:id:dz_dzone:20170911092106j:plain

変更されました。画面の「OK」をクリックします。

f:id:dz_dzone:20170911092331j:plain

リボンの「マイツール」タブを選択すると「マクロ」グループの中に「HelloWorld」のボタンが表示されます。

f:id:dz_dzone:20170911092454j:plain

「HelloWorld」ボタンをクリックするとマクロが実行されます。

f:id:dz_dzone:20170911092528j:plain

 

自作マクロをリボンに追加する手順は以上になります。参考までに、クイックアクセスツールバーに追加する手順もほぼ同様です。

また、今回はExcelを使って説明しましたが、Wordでもほぼ同様です。試してみてください。

 

にほんブログ村 IT技術ブログ VBAへ←記事を気に入って頂けたらポチッとしてもらえると励みになります。

(基本) リボンとクイックアクセスツールバーについての説明

f:id:dz_dzone:20170814233145j:plain

リボン

f:id:dz_dzone:20170901153211j:plain

タブとグループ

f:id:dz_dzone:20170901153236j:plain

別のタブをクリックするとリボンの内容が変わります。

f:id:dz_dzone:20170901153253j:plain

リボンの表示オプション

f:id:dz_dzone:20170901153327j:plain

リボンを折りたたむ

f:id:dz_dzone:20170901153418j:plain

リボンが折りたたまれた状態。タブのみが表示されています。

f:id:dz_dzone:20170901153452j:plain

 

クイックアクセスツールバー

f:id:dz_dzone:20170901153524j:plain

クイックアクセスツールバーをリボンに下に表示する

f:id:dz_dzone:20170901153613j:plain

リボンの下に表示されました。

f:id:dz_dzone:20170901153718j:plain

リボンをたたんでもクイックアクセスツールバーは表示されています。

f:id:dz_dzone:20170901153801j:plain

 

以上。

Android/iOS日本語入力アプリのユーザー辞書の品詞の比較対照表

f:id:dz_dzone:20170724130307p:plain
スマホの機種変更などで日本語入力アプリをやむを得ず変更する場合などでユーザー辞書を移行したい場合は希にあるかと思います。ユーザー辞書に品詞が必要なアプリがいくつかありますが、アプリによって使える品詞というのはバラバラです。そこで比較対照表をここに掲載します。

品詞が必要ない日本語入力アプリ(Android/iOS)

  • Wnnシリーズ
  • Simeji
  • POBoxシリーズ
  • iOS標準キーボード

品詞が必要な日本語入力アプリ(Android/iOS)

  • Google日本語入力
  • Mozcベースの日本語入力アプリ
    • アルテ on Mozc
    • flick (旧・みんなの顔文字キーボード)
    • クラゲ日本語入力
    • Gingerキーボード
  • ATOKシリーズ
  • FSKAREN

ただし、Google日本語入力とMozcの品詞は共通です。

品詞の比較対照表

グループ ATOK
(Android/iOS)
GoogleIME/Mozc
(Android/iOS)
FSKAREN
(Android)
名詞 名詞 名詞 名詞
固有人名
男性名
女性名
人名 人名
芸能人名
固有地名 地名 地名
駅名
スポット
固有組織 組織 ブランド
固有一般 固有名詞 固有名詞
名詞サ変 名詞サ変
名詞ザ変
名詞形動 名詞形動
数詞 数字※2
形容詞 形容詞 形容詞
形容動詞 形容動詞
動詞 カ行五段 動詞カ行五段
ガ行五段 動詞ガ行五段
サ行五段 動詞サ行五段
タ行五段 動詞タ行五段
ナ行五段 動詞ナ行五段
バ行五段 動詞バ行五段
マ行五段 動詞マ行五段
ラ行五段 動詞ラ行五段
ワ行五段 動詞ワ行五段
ハ行四段 動詞ハ行五段※2
一段動詞 動詞一段
カ変動詞 動詞カ変
サ変動詞 動詞サ変
ザ変動詞 動詞ザ変
動詞ラ変
副詞 副詞 副詞
連体詞 連体詞 連体詞
接続詞 接続詞 接続詞
感動詞 感動詞 感動詞
助詞 終助詞
独立語 独立語 独立語 独立語
接頭辞 接頭語 接頭辞※2
接尾辞 接尾語 接尾一般
接尾人名
接尾地名
助数詞
その他 単漢字
顔文字 顔文字
短縮よみ
アルファベット
記号
句読点
抑制単語
候補のみ※2

※flick for iOS版はMozcベースです

おわりに

  • ATOK for Android/iOSの品詞は、デスクトップ版(Windows/macOS)に比べると少なくなっています
  • ※2:Google日本語入力/Mozcの品詞は、デスクトップ版と一部異なる箇所があります
    • 数字 : 数
    • 動詞ハ行五段 : 動詞ハ行四段
    • 接頭辞 : 接頭語
    • 候補のみ : サジェストのみ
  • FSKARENは名詞の分類が多いけど、それ本当に品詞として必要?というものが多いと思います

にほんブログ村 スマホ・携帯ブログへ←記事を気に入って頂けたらポチッとしてもらえると励みになります。