Excel VBA 質問スレッド №2122 (解決済)

ユーザーフォーム

投稿者 : 初心者     投稿日時 : 2025/06/03(Tue) 18:09:50     OS : Windows 11     EXCEL : 未指定
職員名簿をユーザーフォームで管理したいのですが、ユーザーフォームを立ち上げた際に、エクセルでアクティブになっている行のデータをユーザーフォームに反映させたい場合、どのようにすればよいかご指導お願いいたします

例えば、セルC3がアクティブになっている際に、ユーザーフォームを表示させた際に3行目に入っているデータがユーザーフォームに反映させるにはどのようにすればよろしいでしょうか?

見よう見まねで下記のように入力しています。


Private Sub UserForm_Initialize()

  Call updateForm

End Sub



Sub updateForm()

  txt職員名.Text = Cells(ActiveCell.Row, "B").Value
  txtフリガナ.Text = Cells(ActiveCell.Row, "C").Value
  cmb性別.Text = Cells(ActiveCell.Row, "D").Value
  txt職員コード.Text = Cells(ActiveCell.Row, "E").Value
  txt採用年月日.Text = Cells(ActiveCell.Row, "F").Value
  cmb分類.Text = Cells(ActiveCell.Row, "H").Value
  cmb事業所.Text = Cells(ActiveCell.Row, "I").Value
  cmb課名.Text = Cells(ActiveCell.Row, "J").Value
  cmb役職.Text = Cells(ActiveCell.Row, "K").Value


End Sub  

スポンサーリンク
[返信 1] Re : ユーザーフォーム
投稿者 : higeru     投稿日時 : 2025/06/03(Tue) 18:27:30
 それでだめなのですか? 「3行目に入っているデータ」と言われても、シートのレイアウトが分からない第三者には、そのコードでよいか悪いかの判断はつきませんよ。

[返信 2] Re : ユーザーフォーム
投稿者 : てらてら     投稿日時 : 2025/06/03(Tue) 20:28:09
こんにちは。

合ってると思いますが、日付の所は Value でなく Text の方が良いかもしれません。
(セルの書式が保持されるからです。)

それと、ActiveCell.Row は最初に変数に入れてしまえば、見た目がすっきりするでしょう。

[返信 3] Re : ユーザーフォーム
投稿者 : 初心者     投稿日時 : 2025/06/04(Wed) 09:25:09
■[返信 2] てらてらさん(2025-06-03 20:28:09)の記事
> こんにちは。

> 合ってると思いますが、日付の所は Value でなく Text の方が良いかもしれません。
> (セルの書式が保持されるからです。)

⇒ ご指導ありがとうございます。そのようにしてみました。

> それと、ActiveCell.Row は最初に変数に入れてしまえば、見た目がすっきりするでしょう。

⇒ 初心者のため、「それと、ActiveCell.Row は最初に変数に入れてしまえば、見た目がすっきりするでしょう。」とありますが、このあたりが不勉強でまだ理解できていません。どのように書き込むとよいか、ご指導いただけるとありがたいです




また、記載したものだけでは情報不足かと思いますが、

UserForm.show でユーザーフォームを立ち上げた際に、選択しているアクティブなセルの行のデータが、1回目の起動でユーザーフォームにうまく反映されない原因はわかりますでしょうか?(

ユーザーフォーム内に「次」ボタンを作成し

Private Sub btn次_Click()
  ActiveCell.Offset(1, 0).Activate
  Call updateForm
End Sub

をクリックすると、次の行のデータは上手くユーザーフォームに反映されるのですが、やりたい動作としては、

ユーザーフォームを立ち上げた際にアクティブな行のデータを一発でユーザーフォームに表示させたいです

[返信 4] Re : ユーザーフォーム
投稿者 : てらてら     投稿日時 : 2025/06/04(Wed) 18:37:55
>どのように書き込むとよいか、ご指導いただけるとありがたいです

Sub updateForm()
    Dim r As Long
    r = ActiveCell.Row
    txt職員名.Text = Cells(r, "B").Value
    txtフリガナ.Text = Cells(r, "C").Value
    ' --- 省略 ----

End Sub

こんな感じです。


>UserForm.show でユーザーフォームを立ち上げた際に、選択しているアクティブなセルの行のデータが、1回目の起動でユーザーフォームにうまく反映されない原因はわかりますでしょうか?

UserForm.show でユーザフォームを立ち上げた時に、UserForm_Initialize()が実行されます。
UserForm_Initialize()の内部で、updateForm()を実行しているのですから、そこで指定している、ActiveCell.Rowを確認すれば良いでしょう。

UserForm_Initialize()の内部で、
Debug.Print ActiveCell.Row
とすれば、どのセルを参照しているかわかります。

あとは、Cells(r, "B").Valueの値を代入していますから、目的のシートがアクティブシートになっていないと失敗するでしょう。

いずれにせよ、デバッグして探すのがセオリーです。

[返信 5] Re : ユーザーフォーム
投稿者 : 通りすがり     投稿日時 : 2025/06/05(Thu) 14:00:57
■[返信 1] higeruさん(2025-06-03 18:27:30)の記事
>  それでだめなのですか? 「3行目に入っているデータ」と言われても、シートのレイアウトが分からない第三者には、そのコードでよいか悪いかの判断はつきませんよ。

質問者の方はお名前のとおり、初歩的なことがまだ理解できていない方と推測します。あなたのように理解している人ばかりではないので、意地悪な回答をせず、スルーしてあげた方が良い掲示板になるかと。あなたがやっていることは、メルカリ転売ヤーに対してパトロールしている方たちと同じレベルのことをやっているようなものです

[返信 6] Re : ユーザーフォーム
投稿者 : higeru     投稿日時 : 2025/06/06(Fri) 08:15:03
■[返信 5] 通りすがりさん(2025-06-05 14:00:57)の記事
> あなたがやっていることは、メルカリ転売ヤーに対してパトロールしている方たちと同じレベルのことをやっているようなものです

 メルカリとか使ってませんから、そんな風に書かれても何を言っているのかさっぱり分かりませんけどね。

[返信 7] Re : ユーザーフォーム
投稿者 : 初心者     投稿日時 : 2025/06/10(Tue) 17:25:24
ご親切にありがとうございます。少しですが、理解が深まりました。

当掲示板について
  • Excel VBA に関する掲示板です。Excel VBA に関する質問や疑問、それに対する解決方法など気軽に投稿してください。
  • 記事内ではHTMLのタグは使用できません。
  • 記事は一度投稿すると修正できません。内容を訂正したい場合は返信で対応してください。
  • Sub〜End Sub、Function〜End Function は自動的にプログラムコードとみなし、枠で囲って見やすくします。
  • Excel VBA とは関係ないことや、他人が不快に思うようなことなど、管理人が適当でないと判断した記事は削除する場合があります。
スポンサーリンク
返信入力フォーム
お 名 前  :
内  容   :

ステータス  :

認証コード  : キャプチャ画像 




( 処理日時 : 2025-07-04 15:02:23 )
タイトルとURLをコピーしました