dポイントプレゼントキャンペーン実施中!

エクセルでフォームを作っているのですが、途中までユーザーフォーム作ったのを
再び呼び出すには どこをどうすればいいのでしょうか?

質問者からの補足コメント

  • 途中まで作っていたの呼び出すこと できました、ありがとう。したいことは”データーシート”を作成し、そこのとなりに”登録画面シート”で登録入力フォームを作り、そこのフォームから患者のデータ(氏名、年齢、処方内容)を入力し、データーシートに上から順次入力データを蓄積して行くこと、また逆にフォームに名前を入れると処方内容が呼び出せるようにしたいわけです。まずは登録ボタンを作ったのですが、オフセット関数なるものをネットで探してやってみたが反応しないんです。

    No.1の回答に寄せられた補足コメントです。 補足日時:2019/06/11 06:59
  • できました!!!! 有難う。感激です!!!

    申し訳ないが小生老人施設の薬剤師ですが、過去の入居者の処方内容を呼び出したいときもあるのですが、同じフォームの中で呼び出しボタン(名前入れたら処方内容がでてくる)を作りたいが ご教授願えませんでしょうか・・。 図々しくて申し訳ありません。

    No.2の回答に寄せられた補足コメントです。 補足日時:2019/06/12 06:13
  • できました、天才的ですね 候補も出てくるようですね、貴方みたいなお方に逢えたことを幸運と思います。有難うございました。それも無料で深く感謝申し上げます。
    処方内容は同じエクセルで 処方内容が入ってゐる他の処方内容のシートから複数のお薬名と用法数量もコンボボックスにいれるのですが、その範囲を一気にそのコンボボックスにコピーペーストするとセル一個しか入らないのですが、1行の文字かそれともワードみたいにすべて文字にするしかないんでしょうか。最後のわがままですがいい方法はないものでしょうか。

    No.3の回答に寄せられた補足コメントです。 補足日時:2019/06/13 06:12

A 回答 (4件)

>処方内容が入ってゐる他の処方内容のシートから複数のお薬名と用法数量もコンボボックスにいれるのですが・・・



具体的な配置が判らないので何ともお答えのしようがありません。
別シートにはどのような配置で、処方内容・薬名・用法・数量になっているのか?

普通に考えれば処方内容を選択 → VLOOKUP関数なので他の列を選択!
といった操作の方が簡単のような気がします。

※ その道には精通していないので、
あくまでExcelの基本的な使い方を前提としてのアドバイスしかできません。

この程度でごめんなさい。m(_ _)m
    • good
    • 0

続けてお邪魔します。



>過去の入居者の処方内容を呼び出したいときもあるのですが、同じフォームの中で呼び出しボタン(名前入れたら処方内容がでてくる)を作りたいが・・・

というコトは同一人物で複数の「処方内容」がある可能性がある!というのですね。

一案です。
自分であれば、
前回のテキストボックス3を消去し、コンボボックスに変更します。

そして前回のユーザーフォームの配置そのままで、「氏名」を入力すれば
テキストボックスの「年齢」の窓に最終行の「年齢」を、
コンボボックスに今まで出現している「処方内容」をリスト候補として表示するようにします。
(異なる処方内容の場合は直接内容を入力できます)

前回のコードはすべて消去し、前述のようにテキストボックス3をコンボボックスに変更し
↓のコードにしてみてください。
尚、Z列をコンボボックスの作業用の列として使用していますので、
Z列は使用していない状態にしておいてください。


Private Sub CommandButton1_Click() '//この行から//
 If TextBox1 = "" Then
  MsgBox "氏名が未入力", vbExclamation
  TextBox1.SetFocus
  Exit Sub
 End If
 If TextBox2 = "" Then
  MsgBox "年齢が未入力", vbExclamation
  TextBox2.SetFocus
  Exit Sub
 End If
 If ComboBox1 = "" Then
  MsgBox "処方内容が未入力", vbExclamation
  ComboBox1.SetFocus
  Exit Sub
 End If
 With Worksheets("登録画面").Cells(Rows.Count, "A").End(xlUp).Offset(1)
  .Value = TextBox1
  .Offset(, 1) = Val(TextBox2)
  .Offset(, 2) = ComboBox1
 End With
  TextBox1 = ""
  TextBox2 = ""
  ComboBox1.List = Array()
  Range("Z:Z").ClearContents
  TextBox1.SetFocus
End Sub

Private Sub TextBox1_Change()
 Dim i As Long, lastRow As Long, cnt As Long
 Dim c As Range
  lastRow = Cells(Rows.Count, "A").End(xlUp).Row
   Set c = Range("A:A").Find(what:=TextBox1, LookIn:=xlValues, lookat:=xlWhole)
    If Not c Is Nothing Then
     For i = lastRow To 2 Step -1
      If Cells(i, "A") = TextBox1 Then
       TextBox2 = Cells(i, "B")
       Exit For
      End If
     Next i
      Range("Z:Z").ClearContents
     For i = 2 To lastRow
      If Cells(i, "A") = TextBox1 Then
       Set c = Range("Z:Z").Find(what:=Cells(i, "C"), LookIn:=xlValues, lookat:=xlWhole)
        If c Is Nothing Then
         cnt = cnt + 1
         Cells(cnt, "Z") = Cells(i, "C")
        End If
      End If
     Next i
    lastRow = Cells(Rows.Count, "Z").End(xlUp).Row
     If lastRow > 0 Then
      For i = 1 To lastRow
       ComboBox1.AddItem Cells(i, "Z")
      Next i
      ComboBox1 = ""
     End If
    End If
End Sub '//この行まで//

こんな感じではどうでしょうか?

※ 当然ですが、同姓同名は考慮していません。m(_ _)m
この回答への補足あり
    • good
    • 0

No.1です。



① フォームから患者のデータ(氏名、年齢、処方内容)を入力し、データーシートに上から順次入力データを蓄積していくこと

② 逆にフォームに名前を入れると処方内容が呼び出せるようにしたいわけです

いずれにしても具体的な配置が判らないので、的確なアドバイスができないのですが、
とりあえず①に関してのやり方だけ・・・

まず画像のようなユーザーフォームを作成しておきます。
テキストボックス 1~3 を挿入、そしてコマンドボタンを一つ配置。

ユーザーフォームのコマンドボタンのコードは↓のようにしています。

Private Sub CommandButton1_Click()
 If TextBox1 = "" Then
  MsgBox "氏名が未入力です", vbExclamation
  TextBox1.SetFocus
  Exit Sub
 End If
 If TextBox2 = "" Then
  MsgBox "年齢が未入力", vbExclamation
  TextBox2.SetFocus
  Exit Sub
 End If
 If TextBox3 = "" Then
  MsgBox "処方内容が未入力", vbExclamation
  TextBox3.SetFocus
  Exit Sub
 End If
 With Worksheets("登録画面").Cells(Rows.Count, "A").End(xlUp).Offset(1)
  .Value = TextBox1
  .Offset(, 1) = Val(TextBox2)
  .Offset(, 2) = TextBox3
 End With
  TextBox1 = ""
  TextBox2 = ""
  TextBox3 = ""
  TextBox1.SetFocus
End Sub

↓の画像では「登録画面」シートのコマンドボタン(Captionは「入力画面へ」としている)を挿入し
そのコードを

Private Sub CommandButton1_Click()
 UserForm1.Show
End Sub

テキストボックス1~3を入力 → コマンドボタンを押下
これで「登録画面」シートのA~C列に順次表示されていきます。

※ 本来であれば考えられるエラー処理を施す必要がありますが、
まずはこの程度で。

尚、②に関しては同じユーザーフォームを使うのか?それとも別のユーザーフォームを立ち上げるのか?
によってもやり方が変わってきますし、

万一同一人物が複数登録されている場合はその「処方内容」をすべて表示するのか?等々・・・
色々疑問点がありますので、
ここでコードを記載しても無意味になりそうです。m(_ _)m
「エクセル ユーザーフォームの呼び出し」の回答画像2
この回答への補足あり
    • good
    • 0

こんばんは!



>途中までユーザーフォーム作ったのを再び呼び出す

とはユーザーフォームを修正したい!というコトでしょうか?
そうであれば
Alt+F11キーでVBE画面が表示されます。
表示された画面の左側の「VBAProject」画面に「ユーザーフォーム」のアイコンがあるはずなので
それをダブルクリック!

それとも単に作成したユーザーフォームを表示したい!というのであれば
Sheet上にコマンドボタンを挿入し、そのコードを
> UserForm1.Show

とすれば画面上に作成したユーザーフォームが表示されます。

※ こんな単純なコトではないのでしょうかね?m(_ _)m
この回答への補足あり
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!