No Programming, No Life

プログラミング関連の話題や雑記

Web版Excelでマクロ(自動化)にTypeScriptが使えるらしいってことで試してみたが

f:id:fumokmm:20200804161251p:plain

Microsoft365で使えるWeb版ExcelではマクロじゃなくてOffice Scriptsっていうのが使えるらしく、言語はなんとTypeScriptだという話。 さっそく試してみたのですが…

まだプレビュー版らしくて

まだプレビュー版らしくて、Microsoft 365 管理センター とやらから設定でOffice Scriptsを有効にしないといけないらしい。 以下画像参照

f:id:fumokmm:20200804161352p:plainf:id:fumokmm:20200804161357p:plain

なんか問題が発生するんだが…

あら、問題が発生してレコーディングできない😂

f:id:fumokmm:20200804161437p:plain

サンプルスクリプトみたいなのポチポチしてたらやっとTypeScriptに出会えた。※保存できないけど😇

f:id:fumokmm:20200804161446p:plain

まとめ

ということで、結局まだ使えなかったです。日をあらためてトライしてみます。

SQL ServerでテーブルをバックアップするSQL

f:id:fumokmm:20200529164347p:plain

テーブルをサクっとバックアップしたい場合に使えるSQLです。

テーブルをバックアップするSQL

SELECT * INTO <新しいテーブル名> FROM <テーブル名>;

SELECT * INTO M_USER_20200715 FROM M_USER;

M_USERと同じレイアウトのM_USER_20200715という名前のテーブルが作成されます。

以上

Windows10のIMEで切り替え時の「あ」や「A」を非表示にする方法

IMEのアイコンを右クリックして、プロパティを選択

f:id:fumokmm:20200715103458p:plain

IME入力モード切替の通知の画面中央に表示するチェックボックスをオフにする

f:id:fumokmm:20200715103510p:plain

以上

参考

Windows 10でIME切り替え時の「あ」や「A」の表示をオフにする:Tech TIPS - @IT

VBA(Excel)で文字列結合(Join)する関数

f:id:fumokmm:20200504205857p:plain

TEXTJOIN関数が使えないときに使うため、文字列結合関数を書きました。 エラー処理などは省略していますので、実用の際は適当に拡張してお使い下さい。

概要

イメージとしては、[引数1, 引数2, 引数3...] となった時に、"引数1, 引数2, 引数3, ..." という文字列を返却してくれる関数ということです。 Excelの標準関数にTEXTJOINというのが追加されましたが、こちらはMicrosoft 365でしか使えないのかな?よくわかりません。なので、 TEXTJOINが使えないときにサクっと使えるようにするため、StrJoinという関数を書きました。

仕様

  • 引数で指定された内容を指定された結合文字列で繋いだ文字列を返却する
  • 値数式で参照可能
  • 範囲でも指定可能
  • 直接指定可能
  • 接続文字、先頭、末尾文字を指定可能

ソース

Option Explicit

''
' 文字列の結合関数
'
' 処理概要:
'   文字列の結合を行います。
'   特徴
'     ・値数式で参照可能
'     ・範囲でも指定可能
'     ・直接指定可能
'     ・接続文字、先頭、末尾文字を指定可能
'
' 引数:
'  x_startStr  - 開始文字列
'  x_endStr    - 終了文字列
'  x_joinStr   - 接続文字列
'  x_values    - 文字列や範囲(複数指定可)
'
Public Function StrJoin(x_startStr As String, x_endStr As String, x_joinStr As String, ParamArray x_values() As Variant) As String
    Dim p_result As String: p_result = ""
    Dim p_ratch As Boolean: p_ratch = False
    Dim p_value As Variant
    For Each p_value In x_values
        If TypeName(p_value) = "Range" Then
            Dim p_RangeValue As Range: Set p_RangeValue = p_value
            Dim p_rng As Range
            For Each p_rng In p_RangeValue
                If p_ratch Then p_result = p_result & x_joinStr Else p_ratch = True
                p_result = p_result & p_rng.Value
            Next p_rng
        Else
            If p_ratch Then p_result = p_result & x_joinStr Else p_ratch = True
            p_result = p_result & CStr(p_value)
        End If
    Next p_value
    StrJoin = x_startStr & p_result & x_endStr
End Function

挙動とは関係ないですが、VBEのエディタが貧弱なので、変数名に以下のコーディングルールを採用しています。

  1. 引数の変数名は "x_" で始める。その後ろは自由
  2. ローカル変数名は "p_" で始める。その後ろは自由

上記コードもこのルールで記述しています。

リポジトリ

github.com

利用例(デモ)

f:id:fumokmm:20200714135453g:plain

まとめ

  • Excel関数としても利用できます
  • TEXTJOINが使えるときは、そちらを使ったほうがいいかもしれません

参考

IT用語斜め読み - アラート

f:id:fumokmm:20191117132854j:plain (photo by Pixabay)

いつもお世話になってるいる IT用語辞典 e-Wordsさん。 今回はアラートについて見ていきます。 これ、2020/6/3のIT用語辞典さんのアクセスランキングで1位になってたんですが、東京アラートが影響だよね、たぶん。

アラートって何?

まずは概要から。

アラートとは、警告(する)、警報(を出す)、警戒態勢、油断のない、機敏な、などの意味を持つ英単語。ITの分野では、システムなどが利用者に注意や警戒を促すために表示・通知するメッセージなどのことを意味する場合が多い。

IT用語辞典 e-Words より

今がIT用語の方を知りたいのでしたね。なので意味としては、ITの分野では~以降の利用者に対する注意や警告を促すメッセージの意味となります。

本当に〇〇しますか?

パソコンやスマホを利用しているときに、「本当に〇〇しますか?」「はい/いいえ」と聞いてくるダイアログを皆さんももちろん見たことがあると思います。 個人的には「はい/いいえ」で選ばせるスタイルはドラクエを思い出してしまうんですが…それはいいとして。 アラートはこのように、システム側から利用者に通知される警告メッセージや注意喚起のメッセージ、それから上記の「はい/いいえ」のようにユーザに同意を求めてくるタイプのものがあります。 JavaScriptには alert っていうそのものの関数がありますよね。

アラート通知

また、メッセージボックスのようなものだけではなく、ユーザがあらかじめ通知先や通知方法を指定して特定のアドレスに電子メールを送信するとったようなアラート通知というものもある。 危険性などの通知以外の用途でも、あらかじめ指定しておいた条件が満たされたときに自動的に利用者に発信される通知全般を指してアラートという場合もあるとのこと。例えばオンラインショップのサイトでウォッチリストに入れた商品の価格が下がったら知らせて欲しい、とか、カレンダーアプリで予定時刻が近づいてきたら知らせて欲しいとかそういったものだ。

まとめ

  • アラートの本来の意味は、警告(する)、警報(を出す)、警戒態勢といったよなもの
  • IT用語としては、システムからユーザに対して伝えられる警告、またはユーザに確認を求めるダイアログなどで実装される
  • 講義には、通知の用途に利用されるものも全般的に含まれる

リンク

IT用語辞典 e-Words

VBAでメッセージフォーマット

f:id:fumokmm:20200504205857p:plain

VBAの標準関数にメッセージフォーマットしてくれる関数が無いような気がしたので書きました。 エラー処理などは省略していますので、実用の際は適当に拡張してお使い下さい。

概要

メッセージをフォーマッティングしたいとき、テンプレートとなる文字列を用意しておいて、 可変となる部分に埋め込みパラメータを入れておいて置換していく関数です。 VBAなどで標準モジュール内に関数を入れておけば、例えばExcelで使う場合などは ワークシート関数としても利用可能となります。 サンプルは利用例をご覧ください。

仕様

  • 埋め込みパラメータは "{}" とします (Logback風)
  • 第1引数にテンプレートメッセージを指定(必須)
  • 第2引数以降に埋め込むパラメータを指定(可変長, 0個でも可)

ソース

Option Explicit

'''
' MessageFormat関数
' パラメータ埋め込みメッセージフォーマッティング処理
'
' 処理概要:
'   テンプレート文字列に対して、パラメータを埋め込んだメッセージを返却します。
'     ・テンプレート中のパラメータ埋め込み部分(プレースホルダ)は "{}" で記述します
'     ・プレースホルダは登録順に引数の埋め込みパラメータ分、置換されていきます
'
' 引数:
'   x_templateMessage - テンプレートメッセージ
'   x_params          - 埋め込みパラメータ
'
Function MessageFormat(ByVal x_templateMessage As String, ParamArray x_params() As Variant) As String
    Dim p_pos As Long: p_pos = 1
    Dim p_posFound As Long: p_posFound = 0
    Dim p_result As String: p_result = ""
    
    Dim i As Integer
    For i = 0 To UBound(x_params)
        ' プレースホルダ {} を検索
        p_posFound = InStr(p_pos, x_templateMessage, "{}")
        ' プレースホルダ {} が見つからなかった場合
        If p_posFound = 0 Then
            Exit For ' 置換終了
        End If
        
        p_result = p_result & Mid$(x_templateMessage, p_pos, p_posFound - p_pos)
        p_result = p_result & CStr(x_params(i))
        p_pos = p_posFound + 2
    Next i

    ' 残分を追加
    If p_pos < Len(x_templateMessage) Then
        p_result = p_result & Mid$(x_templateMessage, p_pos, Len(x_templateMessage) - p_pos + 1)
    End If
    
    ' 結果返却
    MessageFormat = p_result
End Function

挙動とは関係ないですが、VBEのエディタが貧弱なので、変数名に以下のコーディングルールを採用しています。

  1. 引数の変数名は "x_" で始める。その後ろは自由
  2. ローカル変数名は "p_" で始める。その後ろは自由

上記コードもこのルールで記述しています。

リポジトリ

github.com

利用例

f:id:fumokmm:20200602231014p:plain

まとめ

  • 今回はVBAの標準関数にメッセージフォーマットしてくれる関数が無いようなので書いてみました
  • 上記利用例の様にワークシート関数として利用できる他、VBAコード内でログ出力や、メッセージボックスの文言を生成する場合などにも利用できるのではないでしょうか