このブログは広告及びアフェリエイトプログラムを使用しています。

プライバシーポリシーと免責事項



ユーザーフォーム2

April 24, 2018
excel フォーム データ入力 vba Mac
執筆:EugeneAmnis

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

前回はユーザーフォームのデザインを説明しました。今回は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

MailForm

excel フォーム データ入力 vba Mac

Home

Excel開発にリファレンスは必要か?

October 26, 2024
excel Excel for Mac データ入力 操作 QC KAIZEN

Mac版VBAでファイルを開く際のWindows版との違いについてGeminiに聞いてみた

October 14, 2024
AI excel Excel for Mac Mac

GeminiにExcel for Macについて聞いてみた(AppleScriptTask編)

October 9, 2024
AI excel Excel for Mac Mac