• ベストアンサー

エクセル マクロ フォームにて

エクセル マクロの記述教えて下さい! 1)エクセル Sheet1にコマンドボタンをクリックにてフォームが表示 2)UserForm1にコマンドボタンクリックにてUserForm2が表示 3)UserForm2に   OptionButton1(1、血圧)   OptionButton2(2、体温)   OptionButton3(3、脈)  と選択させてTextBox1に(1又は2・3)のみの数字番号だけ  表示させたい!  1の数字の場合は赤文字、2なら青文字にしたい! 4)UserForm2にコマンドボタンをクリックするとUserForm1の  TextBoxに数字(1~3)をそのまま表示させたい! すいません!分かりづらいですか?・・・今の段階での記述がこれです!が、下記の場合だと3)が文字(1、血圧)しか出来ません。 これを数字に認識させたいです! Private Sub CommandButton1_Click() Dim i As Integer Dim Cnt As Integer Cnt = 0 For i = 1 To 3 Step 1 If Me.Controls("OptionButton" & i).Value Then Cnt = i Exit For End If Next i If Cnt = 0 Then MsgBox "ひとつも選択されていません" Exit Sub End If With UserForm1 .TextBox1.Value = Me.Controls("OptionButton" & Cnt).Caption End With Unload Me End Sub 色々追加記述が必要ですが、頭が混乱しています! 是非、教えて下さい!

質問者が選んだベストアンサー

  • ベストアンサー
  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.3

こんにちは。 OptionButton も含めて、コントロールの多くには Tag プロパティーが あります。VBE 画面で、  1. 血圧の OptionButton を選択  2. Tag プロパティー欄に 1 を入力  3. 同様に、体温は 2、脈は 3 を入力 と設定します。次に Userform2 の CommandButton1_Click() において > With UserForm1 > .TextBox1.Value = Me.Controls("OptionButton" & Cnt).Caption > End With > Unload Me の部分を次のコードに差し替えます。   Dim sTag  As String   Dim lColor As Long      sTag = Me.Controls("OptionButton" & Cnt).Tag   Select Case sTag     Case 1: lColor = vbRed     Case 2: lColor = vbBlue     Case 3: lColor = vbBlack   End Select   With UserForm1.TextBox1     .ForeColor = lColor     .Text = sTag   End With   Unload Me Tag プロパティーはそれ自体に機能のない変わったプロパティーですが、 今回のような隠し要素をもたせたい場合など工夫次第で便利に使えます。

pop2003
質問者

お礼

ありがとうございました! Tagプロバティーこの方法があったんですね。 上手く表示出来るようになり 色もつける事が出来ました。

pop2003
質問者

補足

すいません、もう一つ教えて下さい! Userform2で血圧の OptionButton を選択したら Userform2のTextBox1に”血圧”と表示させたいのですが お願いします。教えて欲しいです。

その他の回答 (3)

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.4

> Userform2のTextBox1に”血圧”と表示させたいのですが 返信が遅れてすみません。 今質問一覧をみてましたが、別の質問をたてたようですね。 関連するとはいえ、元のご質問とは異なる内容ですし、それで良い と思います。また、再質問いただいた件もそちらも解決したよう ですし、私が特に回答すべきことはありません。 頑張ってくださいね。

pop2003
質問者

お礼

ありがとうございます! いつもすいません! 頑張って勉強します。

  • kenpon24
  • ベストアンサー率64% (66/102)
回答No.2

こういう関数を作って、 Private Function test(st As String) As Integer Select Case st Case "血圧" test = 1 Case "体温" test = 2 Case "脈" test = 3 Case Else test = 0 End Select End Function .TextBox1.Value = test(Me.Controls("OptionButton" & Cnt).Caption) とするのが無難ですかね。 あと文字色を変えるなら、TextBox1のForeColorプロパティを変更する。

pop2003
質問者

お礼

ありがとうございます! ANo2の記述はUserform2にするんですよね! すいません、全くの素人なんで・・・ ちなみに 前回の記述で .TextBox1.Value = left(Tmp, instr(1, Tmp, "、") - 1) '、の文字を探して1文字前までを返す ↑ これだと引数式が違います!と表示されます。 どうしてなんでしょうか? すいません、質問ばかりで! ヘルプ機能がインストールされていないので・・・ 教えて下さい。

  • kenpon24
  • ベストアンサー率64% (66/102)
回答No.1

ここの部分を変える With UserForm1 .TextBox1.Value = Me.Controls("OptionButton" & Cnt).Caption End With ↓ dim Tmp as string Tmp = Me.Controls("OptionButton" & Cnt).Caption With UserForm1 .TextBox1.Value = left(Tmp, instr(1, Tmp, "、") - 1) '、の文字を探して1文字前までを返す End With

pop2003
質問者

補足

早速のお返事ありがとうございます! 質問が下手でしたすいません! (1、血圧)=1としたい。 実際のCaptionには血圧しか名前を入れていません! (血圧)=1としたいです! お願いです! 是非教えて下さい。

関連するQ&A

専門家に質問してみよう