ユーザーフォーム2

April 24, 2018
excel フォーム データ入力 vba Mac

ユーザーフォームでデータ入力(続き)

前回はユーザーフォームのデザインを説明しました。今回はvbaで機能を実装していきましょう。 念のために作成するユーザーフォームの機能について明示します。

ユーザーフォームの機能
テキスト(B3) 数字(C3) カラー(D3)
テキスト入力 数値のみ入力 リスト入力

上記の表に入力するフォームを作成します。入力すると自動的に表の一番下にレコード(データ)が挿入されるようにします。ユーザーフォームの 基礎を示すだけなので、最小の機能にします。

コーディングを行う。

1.” UserForm1 “を左クリックし、”コードの表示” を選択。

2.ファイル名 UserForm1(コード)ウィンドウ内で” UserForm “をを選択。

3.ファイル名 UserForm1(コード)ウィンドウ内で” Initialize “をを選択。(ユーザーフォームの初期化)

3.作成された Sub ~ End Sub 内に以下を記入する。ラベル Q1〜Q3 に行のヘッダー項目を表記させる。 テキストボックス A2 は数値入力実装の為の準備。リストボックス A3 にリストの選択肢を設定する。グローバル関数 Clears の初期化。


Private Sub UserForm_Initialize()

    Q1.Caption = Range("B3").Value
    Q2.Caption = Range("C3").Value
    Q3.Caption = Range("D3").Value
    
    A2.IMEMode = fmIMEModeDisable
    
    A3.AddItem "RED"
    A3.AddItem "BLUE"
    A3.AddItem "GREEN"
    A3.AddItem "YELLOW"
    A3.AddItem "BLACK"
    A3.AddItem "WHITE"
    
    clears = True
    
End Sub

4.ファイル名 UserForm1(コード)ウィンドウ内で” A2 “をを選択。

5.ファイル名 UserForm1(コード)ウィンドウ内で” KeyPress “をを選択。

6.作成された Sub ~ End Sub 内に以下を記入する。数値入力を実装する。 A2 内でキー入力イベントが発生する度に数字かを判断し、数字でなければ入力を無効にする。


Private Sub A2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)

    If Chr(KeyAscii) < "0" Or Chr(KeyAscii) > "9" Then
        KeyAscii = 0
    End If

End Sub

7.ファイル名 UserForm1(コード)ウィンドウ内で” entity “をを選択。

8.ファイル名 UserForm1(コード)ウィンドウ内で” Click “をを選択。

9.作成された Sub ~ End Sub 内に以下を記入する。表へ書き込む機能の実装。まず、B列に何個レコードが入力されているかを調べる。 入力内容をセルに転記する。グローバル関数 Clears が true であれば、入力内容をクリアする。(10.~12.で実装)


Private Sub entity_Click()

    Dim rows As Integer
    
    rows = Application.WorksheetFunction.CountA(Range("B4:B500"))
    rows = rows + 4
    
    Cells(rows, 2).Value = A1.Value
    Cells(rows, 3).Value = A2.Value
    Cells(rows, 4).Value = A3.Value
    
    If clears Then
        A1.Value = ""
        A2.Value = ""
        A3.Value = ""
    End If
    
    A1.SetFocus

End Sub


10.ファイル名 UserForm1(コード)ウィンドウ内で” setup “,” Click “をを選択。

11.” VBAProject (ファイルの名前)“を左クリックし、”標準モジュール” > “挿入” を選択。

12.作成された標準モジュール内に以下を記入する。グローバル関数 Clears を宣言する。(グローバル関数は標準モジュール内でしか宣言できない)


Option Explicit

Public clears As Boolean

12.10.で作成された Sub ~ End Sub 内に以下を記入する。選択肢付きメッセージダイアログが表示され、入力内容のクリアを設定する。


Private Sub setup_Click()

    Dim msgBtn  As Long
    
    msgBtn = MsgBox(Prompt:="入力内容をクリアしない。", Buttons:=3, Title:="設定")
    
    If msgBtn = 6 Then
        clears = False
    ElseIf msgBtn = 7 Then
        clears = True
    End If

End Sub

13.標準モジュール内に以下を記入する。


Sub formCall()

    UserForm1.Show

End Sub

完成

保存後に”エディター”を閉じて、”マクロ”を選択し、” formeCall “を起動。ユーザーフォームが表示されます。

各プロパティを調整すると上記のようになります。 Mac版では日本語入力は直接入力は出来ないようです。また、表示も少しおかしい場合があります。入力内容に間違いはありませんが・・・。

簡単なユーザーフォームでしたが、このくらいの手間が掛かります。しかし、操作パネルなどの使い方ができるなど自由度は大変高いです。 ただ、Mac版では作成するものを選ぶ感じはします。

執筆者も結果的にMacにWindowsを入れ、その上でエクセルを走らせています。(vbaを使う際は)

そっちの方が動作が早いです。また、ユーザーフォームはMacで作成したものでマージンを大きく取っていないものは 必ず、Windowsで表示が変になります。イメージコントロールも対応していません。

しかし、作業の自動化をする上では十分です。Mac版のvbaは作り込みが難しい分、シンプルで保守性の高いプログラムを考える癖が付くかも しれません。

Next Previous

3つの表

October 12, 2023
excel データ入力 操作

Excelで量産シミュレーション

October 12, 2023
excel データ入力 操作

テーブルについて

October 12, 2023
excel データ入力 操作