Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(指定なし : 指定なし)
ユーザーフォームのテキスト転記について
投稿日時: 21/11/07 03:23:13
投稿者: youkey14

お世話になります。
 
ユーザーフォームのテキスト転記についてですが、
このようなフォームを作成しました。
 
(ラベル)入荷番号 (テキストボックス)空白
(ラベル)管理番号 (ラベル)空白
(ラベル)備考   (ラベル)空白
(ラベル)サイズ  (テキストボックス)空白
(ラベル)カラー  (テキストボックス)空白
(ラベル)入り数  (テキストボックス)空白
(コマンドボタン)登録
 
1)入荷番号にテキストを入力すると、
  管理番号と備考がChange()により、表示されます。
2)サイズとカラー、入り数を入力し、登録ボタンを押すと
  指定のセルに転記するようにしたいです。
3)登録後、右側の表示は空白にしたいです。
 
上記の、2)と3)についてご教示お願いいたします。
 
転記に関してですが、
入荷番号はA列、管理番号はB列、備考はC列に入力しています。
転記したいセルはサイズがE列、カラーがF列、入り数がG列です。
 
例えば、サイズであれば、

Cells(入荷番号のオブジェクト名,4) = UserForm1.サイズのオブジェクト名
を使うのかな?と思いながら、試行錯誤していますが、
イメージ通りに動いてくれません。
 
よろしくお願いいたします。

回答
投稿日時: 21/11/07 09:23:32
投稿者: simple

引用:
例えば、サイズであれば、
Cells(入荷番号のオブジェクト名,4) = UserForm1.サイズのオブジェクト名

Cells(入荷番号のオブジェクト名,4)というのが不明です。
    ↑行番号 を指定するのでは?
 
3)については、素朴に .Value ="" とするのではダメなんですか?

回答
投稿日時: 21/11/07 09:28:43
投稿者: simple

3)についての追記。ラベルだと.Captionプロパティですね。

回答
投稿日時: 21/11/07 10:20:02
投稿者: WinArrow
投稿者のウェブサイトに移動

セルに値(テキストボックスの値など)を代入する場合、
  
Cells(行番号,列番号).Value = 値"
  
のように行番号を指定します。
この行番号は、どのように取得すると考えているのでしょうか?
  
  

Dim 行 As Long
    行 = 10 ' ←どのように取得するかをきめてください。
       すくなくとも、「入荷番号のオブジェクト名」ではないですよね・・・
    Cells(行, 4).Value = Userform1.TextBox4.Value
   ↓のようにも記述可能です。
    Cells(行, "E").Value = Me.TextBox4.Value
 
※受け取る側のセルは、シート名で修飾したほうがよいです。
    Sheets("Shet1").Cells(行, "E").Value
のように記述しましょう。
また、ユーザーフォーム内にコードを記述する場合、
Userform11.Textbox1
の前の「Userorm1」は「Me」と記述することができます。

投稿日時: 21/11/07 13:51:06
投稿者: youkey14

引用:
3)については、素朴に .Value ="" とするのではダメなんですか?

3)に関しては、上記で解決できました。
ありがとうございます。
 
引用:

Dim 行 As Long
    行 = 10 ' ←どのように取得するかをきめてください。
       すくなくとも、「入荷番号のオブジェクト名」ではないですよね・・・
    Cells(行, 4).Value = Userform1.TextBox4.Value
   ↓のようにも記述可能です。
    Cells(行, "E").Value = Me.TextBox4.Value

上記を参考にして、以下のようなコードを入力してみました。
 
 Dim i As Long
 i = 2
  Cells(i, 5).Value = UserForm1.size

このコードですと、"E2"に指定して転記することになりますが、
 
入荷番号のテキストボックスに入力した値
もしくは管理番号のラベルに表示された値を参照し、
その行のE列に転記したいのですが、
その場合はどのようにすれば宜しいでしょうか?
 
よろしくお願いいたします。

回答
投稿日時: 21/11/07 14:23:02
投稿者: WinArrow
投稿者のウェブサイトに移動

youkey14 さんの引用:

 Dim i As Long
 i = 2
  Cells(i, 5).Value = UserForm1.size

このコードですと、"E2"に指定して転記することになりますが、
 
入荷番号のテキストボックスに入力した値
もしくは管理番号のラベルに表示された値を参照し、
その行のE列に転記したいのですが、
その場合はどのようにすれば宜しいでしょうか?
 
よろしくお願いいたします。

 
>入荷番号のテキストボックスに入力した値
が、行番号ということでしょうか?
とすると
i = Clng(Me.TextBox2.Value) 'TextBox2は、入荷番号のテキストボックス
 
のようにすれば、よいです。
なにか?違和感がありますが。
入荷番号をセルに代入するときは、
どの様なコードを記述しているんですか?
 
 
>もしくは管理番号のラベルに表示された値
こちらの場合は、
i = Clng(Me.Label2.Caption)
でしょうね?
 
ところで、どちらを使うかの判断は?
 
もう一つは、
どちらのオブジェクトを使うにしろ、
当該セルに、既にデータが入っている可能性はないのですか?
 
 
 

回答
投稿日時: 21/11/07 14:31:39
投稿者: WinArrow
投稿者のウェブサイトに移動

追加レス
>>もしくは管理番号のラベルに表示された値
 
最初の説明の中に、オブジェクト名が書かれていないので、
キャッチボールに誤解が生じます。
ユーザーフォームのコントロールに「コントロール名」を付加していただけませんか?

投稿日時: 21/11/07 15:34:59
投稿者: youkey14

引用:
>入荷番号のテキストボックスに入力した値
が、行番号ということでしょうか?
とすると
i = Clng(Me.TextBox2.Value) 'TextBox2は、入荷番号のテキストボックス

失礼しました。
入力した値は行番号ではなく、任意の文字列です。
 
現状、
A列には「入荷番号」 ※既に入力されている
B列には「管理番号」 ※既に入力されている
C列には「備考」 ※既に入力されている
E列には「サイズ」
F列には「カラー」
G列には「入り数」
となっております。
 
入荷番号をテキストボックスに入力することにより、
管理番号と備考が表示され、
サイズとカラーと入り数に関しては、
テキストボックスに入力する値を転記したいです。
 
A列の入荷番号(テキストボックスへ入力する値)は「A123-12345」のような値です。
 
例えば、
A4に「A123-12345」と入力されていた場合、
サイズはE4 カラーはF4 入り数はG4 に転記したいです。
 
説明が下手で恐縮ですが、
これでイメージつきますでしょうか?
 
よろしくお願いいたします。

回答
投稿日時: 21/11/07 16:13:20
投稿者: WinArrow
投稿者のウェブサイトに移動

引用:

入荷番号をテキストボックスに入力することにより、
管理番号と備考が表示され、

ということは、
「入荷番号」なるテキストボックスのコントロール名を"TextBox1"とします。
TextBox1の文字列を入力すると
シートを検索して、ヒットして行の「管理番号」と「備考」を
ラベルコンとロールに表示する
という理解でよろしいですか?・・・・それをTextBox1_Changeイベントで実行している
ということですよね?
 
TextBox1_Changeプロシジャのコードがあれば、詳細がわかりますが、
このなかで、行番号が取得できているはずですから、
行番号をTextBox1.Tagにセットしておけば、「サイズ」「カラー」などをセルに代入する際に
使えます。
 
Cells(me.TextBox1.Tag,, "E").Value = Me.TextBox4.Value "サイズのコントロール
 
※入荷番号は、テキストボックスではなく、コンボボックスの方がよいと思います。
但し、あまり件数が多いと操作性が悪いと思いますが、
TextBox1_Changeは、1文字ごとに実行されるので、そのあたりが気になります。
  
 
 
 
 

投稿日時: 21/11/07 16:48:30
投稿者: youkey14

ご丁寧に説明いただいているのに申し訳ないのですが、
まだ理解できておりません。
※基礎知識不足ですみません。
 
(ラベル)入荷番号 (テキストボックス:TextBox1)空白
(ラベル)管理番号 (ラベル:lbl1)空白
(ラベル)備考   (ラベル:lbl2)空白
(ラベル)サイズ  (テキストボックス:TextBox2)空白
(ラベル)カラー  (テキストボックス:TextBox3)空白
(ラベル)入り数  (テキストボックス:TextBox4)空白
(コマンドボタン)登録
 
とした場合ですが、
 

Private Sub CommandButton1_Click()

 Cells(Me.TextBox1.Tag, , "E").Value = Me.TextBox2.Value 'サイズのコントロール

End Sub

 
このコードでは動きませんが、
修正をしていただくことは可能でしょうか?
すみませんが、よろしくお願いいたします。

回答
投稿日時: 21/11/07 16:52:33
投稿者: WinArrow
投稿者のウェブサイトに移動

引用:
このコードでは動きませんが、
修正をしていただくことは可能でしょうか?

 
TextBox1_Changeプロシジャを掲示してみてください。

投稿日時: 21/11/07 17:02:48
投稿者: youkey14

WinArrow さんの引用:
引用:
このコードでは動きませんが、
修正をしていただくことは可能でしょうか?

 
TextBox1_Changeプロシジャを掲示してみてください。

 
Private Sub TextBox1_Change()

 Dim i As Integer
 
 For i = 2 To 90
     If TextBox1.Text = Cells(i, 1) Then
         lbl1.Caption = Cells(i, 2)
         lbl2.Caption = Cells(i, 3)
     End If
 Next i

End Sub

このようにしております。
よろしくお願いいたします。

投稿日時: 21/11/07 17:35:43
投稿者: youkey14

最後までご丁寧にありがとうございました。
イメージ通りに動いてくれました。
感謝します。