• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Excel2000 UFを用いたプログラミング)

Excel2000 UFを用いたプログラミング

このQ&Aのポイント
  • Excel2000を使用してユーザーフォームを作成するプログラミングについて質問があります。
  • 具体的には、あ-1からえ-4までの入力値を処理し、実行ボタンを押すと確認画面が表示される仕組みを作りたいです。
  • また、ユーザーフォームのテキストボックスには特定の値が割り当てられています。どのようなソースコードを記述すれば良いでしょうか?

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

  • ベストアンサー
回答No.3

解釈があっているか不安な上、少し手間がかかりますが以下をお試しください。 UserForm2を追加、UserForm2にYesボタンとNoボタンを配置(ラベル等はご自由に配置してください。)YesをCommandButton1 NoをCommandButton2として頂くようにお願いします。 Module1を追加 また、ご自分のUserForm1を表示させるコードをモードレス(UserForm1.show 0)としてください。 UserForm1のコードを以下の通りに変更 Private Sub CommandButton1_Click() Dim ans As Integer Dim i As Integer Dim c As Range SetAns "Wait" UserForm2.Show 0 'ワークシートのB列からテキストボックスの番号を検索し、値を変更 With Worksheets("Sheet1") i = 1 Do While i <= 10 If Me.Controls("Textbox" & i).Text = "" Then Exit Do Do While GetAns = "Wait" DoEvents Loop If GetAns = "Yes" Then Set c = .Range("B1:B65536").Find(Me.Controls("Textbox" & i).Text, LookIn:=xlValues) If IsNumeric(Me.Controls("Textbox" & i + 2)) Then c.Offset(0, 4).Value = Val(Me.Controls("Textbox" & i + 1).Text) + Val(Me.Controls("Textbox" & i + 2).Text) Else c.Offset(0, 4).Value = Val(Me.Controls("Textbox" & i + 1).Text) End If End If i = i + 3 SetAns "Wait" Loop End With 'Textboxをクリア For i = 1 To 12 Me.Controls("Textbox" & i).Text = "" Next UserForm2.Hide End Sub -------------------------------------------------------------- UserForm2のコードを以下のように記述 Private Sub CommandButton1_Click() SetAns "Yes" End Sub Private Sub CommandButton2_Click() SetAns "No" End Sub -------------------------------------------------------------- Module1のコードを以下のように記述 Dim ans As String Function GetAns() As String GetAns = ans End Function Sub SetAns(YesNoAns As String) ans = YesNoAns End Sub

towm4c5
質問者

お礼

遅くなってしまい申し訳ありませんでした。 動作確認を行った所、満点の動作でした。 最後までお付き合いありがとうございました。 とっても助かりました! これにて解決とさせていただきます。

その他の回答 (2)

回答No.2

No選択時の挙動を勘違いしていたようなので訂正します。 また、X-1が空白の時ですが終了するというのはそこから先の(1)~(4)の処理をすべて飛ばして、テキストボックスをリセットしUserFormを再度表示すると解釈し作成しましたが、UserForm自体を消すなど別の処理をするという意味なのでしょうか。 Private Sub CommandButton1_Click() Dim ans As Integer Dim i As Integer Dim c As Range '実行確認Noを選択した場合戻り値=7、7だったら実行中止 ans = MsgBox("実行しますか?", vbYesNo, "実行確認") If ans = 7 Then Exit Sub 'ワークシートのB列からテキストボックスの番号を検索し、値を変更 With Worksheets("Sheet1") i = 1 Do While i <= 10 If Me.Controls("Textbox" & i).Text = "" Then Exit Do Set c = .Range("B1:B65536").Find(Me.Controls("Textbox" & i).Text, LookIn:=xlValues) If IsNumeric(Me.Controls("Textbox" & i + 2)) Then c.Offset(0, 4).Value = Val(Me.Controls("Textbox" & i + 1).Text) + Val(Me.Controls("Textbox" & i + 2).Text) Else c.Offset(0, 4).Value = Val(Me.Controls("Textbox" & i + 1).Text) End If i = i + 3 Loop End With 'Textboxをクリア For i = 1 To 12 Me.Controls("Textbox" & i).Text = "" Next End Sub

towm4c5
質問者

お礼

再び回答ありがとうございます。 誤って捕捉に打ってしまいました。 ご確認いただければ幸いです。

towm4c5
質問者

補足

表記が不十分で申し訳ないです。 実行確認時 Noの場合は最初の回答のソースで完璧です。 Yesの場合に困っているのですが、 数値を入れた列の分だけ確認画面が出てしまいます。 (あ~う まで数値を入力すると3回出てしまう。) これをいかなる時も一括で1回の確認画面で処理を行いたいのです…。 うまく表現できません…。 伝わりますでしょうか… 厚かましくて申し訳ないです。

回答No.1

これでいかがでしょう ところで実行確認時にNoが押された場合、そのX-1~X-3はスキップしてX+1-1から処理するようにしましたがこれでいいでしょうか。 Private Sub CommandButton1_Click() Dim ans As Integer Dim i As Integer Dim c As Range With Worksheets("Sheet1") i = 1 Do While i <= 10 If Me.Controls("Textbox" & i).Text = "" Then Exit Do ans = MsgBox("実行しますか", vbYesNo, "確認") If ans = 6 Then Set c = .Range("B1:B65536").Find(Me.Controls("Textbox" & i).Text, LookIn:=xlValues) If IsNumeric(Me.Controls("Textbox" & i + 2)) Then c.Offset(0, 4).Value = Val(Me.Controls("Textbox" & i + 1).Text) + Val(Me.Controls("Textbox" & i + 2).Text) Else c.Offset(0, 4).Value = Val(Me.Controls("Textbox" & i + 1).Text) End If End If i = i + 3 Loop End With For i = 1 To 12 Me.Controls("Textbox" & i).Text = "" Next End Sub

towm4c5
質問者

お礼

回答ありがとうございました。 先ほど確認致しましたが、完璧な動作でした。 ありがとうございます。 実行確認の処理について質問があるのですが、 数値を1列入力すると確認画面が1回。 2列入力すると2回、3列だと3回… となる仕様なのですが、これを全て1回に統一する為にはどうしたら良いでしょうか? よろしければ回答お願い致します。 P.S. >>ところで実行確認時にNoが押された場合、そのX-1~X-3はスキップしてX+1-1から処理するようにしましたがこれでいいでしょうか。 ありがとうございます。要望通りです!!

関連するQ&A