インタープリタ言語が何で好きなんか?

C言語って、30年前はパソコンのスペックが低いのでスピードの関係でコンパイラー言語が流行り。

今は、作りやすい?。いや、ライブラリでしょう。

ExcelマクロならVBAでコードを書く時、もれなくExcelオブジェクトというライブラリが使える。さらに、VBEで参照設定すればWord、OutlookExpressなどOffice製品、SolidWorksもVBAが使える。だから、VBAが使えれば参照設定できるものは全部、操作できるのです。

このライブラリが多いのがPythonでしょう。

現在は、開発言語の仕様よりライブラリの多さです。

で、

動的な言語となればインタープリターですね。だから、私はPythonが好き。実際に使った時間が多いのはRubyですが。

カテゴリー: Excel章立て | コメントする

孤立したサイト

ええ。ここです。

昨年の12月から本格的に書いた。12月末からは大量に、令和2年1月4日時点で42本。今日も3本も作った。

Youtubeも見てるは私だけ、あと家族かな。このサイトも私だけ。

来週から仕事が始まるのでヒットがあるかな?。私も仕事だしアップが減るね。

Bing web マスターとGoogleのSerch googlech googleに登録して5日くらいだからまだなんかナー。

皆さん、コメントがありましたらお願いします。

カテゴリー: とりあえず | コメントする

激速作成データベース入力フォーム

VBAのコードを書かなくてもテーブルの入力用フォームが作れる。やることは以下の2つがある。

  1. テーブル化する
  2. クイックアクセルツールバーにフォームを追加する。

次図は、テーブル化して「金額」の列に計算式を入れる。

クイックアクセスツールバーにフォームを追加する。

カテゴリー: 12 ExcelのVBAを快適に使うためのアイデア <E> | コメントする

VBAのエディタの設定

コードを書いていて、間違いがあるとカーソルを奪われるため「自動構文チェック」のチェックを外す。入力中に間違い承知で書いてから後で正しく修正することもある。「自動構文チェック」が有効だとキーボード操作からマウス操作に変更をさせられる。一瞬だが、思考停止とマウスを戻す操作の繰り返しで余計な時間になる。

次図の例は、「自動構文チェック」が☑になっている状態で、Subプロシージャの名前は数値から始まる名前は使えないためエラーになり、マウス操作が必要になる。

エラー時に、カーソルがOKボタンに移動する

このチェックがなくても、マクロの実行の直前に構文のチェック(コンパイル)をするため「自動構文チェック」は必要ない。
コンパイルは、VBEの「メニュー/デバッグ」でもできる。

手動でコンパイル

コンパイルは、マクロ実行前に必ずするのでコンパイルを意識する必要は無い。

練習:「sub dim」でエラーを確認する。また、「自動構文チェック」を外して確認する。

また、「変数の宣言を強制する」をチェックの状態でも確認する。

オプションの変更ヶ所

設定以降は、追加するモジュールに「Option Explicit」が入る。すでにあるモジュールにも変数の宣言を強制したい場合は、Option ExplicitをGeneral-Declarationsに書き込めばいい。

カテゴリー: 1 「開発」タブとVBE | コメントする

ユーザー定義関数(自作の関数)の方がわかりやすい

if文の中にIf文がある。優良可の例。

セルの中にIF文がいくつも入れ子になっていると見にくいし、メンテナンスも難い。次図の例は、英語の点数で優、良、可、不可の評価をしている。優は80点以上、良は70点以上、可は60点以上、不可は60点より少ない。

セル内に書くワークシート関数とユーザー定義関数の比較

ワークシート関数は、同じセル番地を何度も指定することがある。この例では、セルB2の値を何度も使っている。
=IF(B2=””,””,IF(B2>=80,”優”,IF(B2>=70,”良”,IF(B2>=60,”可”,”不可”))))

一方、標準モジュールに書く関数は、=優良可(B2)で答えが出る。引数xにB2のセルを1つを渡す。

ワークシート関数のIF関数に慣れているならVBAではIf Then とElseIfを使う。優先する条件を先に書くのはワークシート関数のIFと同じです。

Function 優良可if(x)
        If "" = x Then
            優良可if = ""
        ElseIf x >= 80 Then
            優良可if = "優"
        ElseIf x >= 70 Then
            優良可if = "良"
        ElseIf x >= 60 Then
            優良可if = "可"
        Else
            優良可if = "不可"
        End If
End Function

Select Caseなら引数xの変化だけをCase 条件で書けるのでシンプルだ。Ifに慣れていると条件の書き方が違うので初めは戸惑います。

Function 優良可(x)
    Select Case x       'Select CaseはCaseの右の値だけを判断して上から順に処理する
        Case ""                 'xが空白文字の場合
            優良可 = ""
        Case Is >= 80           'xが80以上の場合
            優良可 = "優"
        Case Is >= 70           'xが70以上の場合
            優良可 = "良"
        Case Is >= 60           'xが60以上の場合
            優良可 = "可"
        Case Else               'その他
            優良可 = "不可"
    End Select
End Function

関数名が漢字なのでセルの中で入力する手間があるので「yrk」などの半角文字の関数名にするといい。

拡張して使いやすくする例 DateSerial関数の拡張

DateSerial関数は引数に(西暦の年,月,日)を入れる。入力が平成20年とか令和2年となると、西暦に変更する必要がある。時図はセルB2に年号を入れる。令和か平成かはセルB1(リストにしている)の内容で分岐処理する。令和は入力の数値に2018を、平成は1988を加算すると西暦になる。得られるデータは1900年1月1日を起点とするシリアル値(連番)です。

IF関数は1つしか使っていないので読みやすい。ユーザー定義関数にすると読みやすさとコメントなどで修正や拡張がしやすい。

やっていることは、DateSerial関数を使ってシリアル値を得る。

Function reiwaDate(y, m, d, 平成令和セル As Range)
    If InStr(平成令和セル, "平成") Then '平成令和セルの文字列に平成はあれば
         reiwaDate = VBA.DateSerial(y + 1988, m, d)
   Else '令和
        reiwaDate = VBA.DateSerial(y + 2018, m, d)
    End If
End Function
カテゴリー: 9 セルの中で使うユーザー定義関数の作成 <VBA> | コメントする