電子書籍の厳選無料作品が豊富!

textboxを5つ設置したユーザーフォームを作りました。ユーザーフォームにボタンをつくり、そのボタンをクリックするとtextboxに入力したデータがsheet2の複数のセルにデータ入力されるようにしたいのですが、やり方がわかりません。

A 回答 (4件)

ユーザーフォームに、TextBox1~TextBox1と、CommandButton1、その他にLabel1とSpinButton1があるとします。


Label1は現在編集中の行です。
SpinButton1は現在編集行を移動するためです。


[ CommandButton1を押した時だけCellを変更する場合 ]
Private Sub setTextBox(row As Long)
'行範囲チェック
If row < 1 Then row = 1
If row > 65536 Then row = 65536
'現在行表示
Label1.Caption = row
'ControlSource設定
TextBox1.Text = Sheet2.Cells(row, 1).Value
TextBox2.Text = Sheet2.Cells(row, 2).Value
TextBox3.Text = Sheet2.Cells(row, 3).Value
TextBox4.Text = Sheet2.Cells(row, 4).Value
TextBox5.Text = Sheet2.Cells(row, 5).Value
'最初はTextBox1を選択
TextBox1.SetFocus
TextBox1.SelStart = 0
TextBox1.SelLength = Len(TextBox1.Text)
'シートの表示(無くてもいい)
Sheet2.Select
Sheet2.Rows(row).Select
End Sub

Private Sub CommandButton1_Click()
Dim row As Long
row = Val(Label1.Caption)
'cell設定
Sheet2.Cells(row, 1).Value = TextBox1.Text
Sheet2.Cells(row, 2).Value = TextBox2.Text
Sheet2.Cells(row, 3).Value = TextBox3.Text
Sheet2.Cells(row, 4).Value = TextBox4.Text
Sheet2.Cells(row, 5).Value = TextBox5.Text
'次の行へ
setTextBox Val(Label1.Caption) + 1
End Sub

Private Sub UserForm_Activate()
setTextBox 1
End Sub

Private Sub SpinButton1_SpinDown()
setTextBox Val(Label1.Caption) + 1
End Sub

Private Sub SpinButton1_SpinUp()
setTextBox Val(Label1.Caption) - 1
End Sub


[ ControlSourceを設定して、TextBoxを変更すると同時にCellも変更する場合 ]
Private Sub setControlSource(row As Long)
'行範囲チェック
If row < 1 Then row = 1
If row > 65536 Then row = 65536
'現在行表示
Label1.Caption = row
'ControlSource設定
TextBox1.ControlSource = "Sheet2!A" & Trim(Str(row))
TextBox2.ControlSource = "Sheet2!B" & Trim(Str(row))
TextBox3.ControlSource = "Sheet2!C" & Trim(Str(row))
TextBox4.ControlSource = "Sheet2!D" & Trim(Str(row))
TextBox5.ControlSource = "Sheet2!E" & Trim(Str(row))
'最初はTextBox1を選択
TextBox1.SetFocus
TextBox1.SelStart = 0
TextBox1.SelLength = Len(TextBox1.Text)
'シートの表示(無くてもいい)
Sheet2.Select
Sheet2.Rows(row).Select
End Sub

Private Sub CommandButton1_Click()
setControlSource Val(Label1.Caption) + 1
End Sub

Private Sub UserForm_Activate()
setControlSource 1
End Sub

Private Sub SpinButton1_SpinDown()
setControlSource Val(Label1.Caption) + 1
End Sub

Private Sub SpinButton1_SpinUp()
setControlSource Val(Label1.Caption) - 1
End Sub
    • good
    • 1

ANo.2です。



>ボタンを押してTexBoxに入力したデータをSheet2のそれぞれのセルに入力・・・
書いた通りで、私の説明した方法は、TexBoxと特定のセルを関連付ける方法で、ボタンを押しません(押す必要がありません)。

質問の「sheet2の複数のセル」、補足の「Sheet2のそれぞれのセル」と言う言葉がいろいろ解釈できるのでわからないのですが・・・

TextBox1 -> sheet2のA1 というような、「それぞれのtextboxをそれぞれの決まったセルに関連付ける」場合は、私の方法が簡単だと思います。
フォームの設計画面でTextBox1を選択して、プロパティウインドのControlSourceの所に「sheet2!A1」と書き込む。


ボタンを押すと、
TextBox1 -> A1
TextBox2 -> B1
・・・
TextBox5 -> E1

次にボタンを押すと、
TextBox1 -> A2
TextBox2 -> B2
・・・

次にボタンを押すと、
TextBox1 -> A3
TextBox2 -> B3
・・・

と言うようなことを「それぞれのセル」と言うなら、ANo.1さんの方法を使うことになります。


こんな説明でわかってもらえますか?(説明が苦手だ、長くなる)

この回答への補足

ボタンを押すと、
TextBox1 -> A1
TextBox2 -> B1
・・・
TextBox5 -> E1

次にボタンを押すと、
TextBox1 -> A2
TextBox2 -> B2
・・・

次にボタンを押すと、
TextBox1 -> A3
TextBox2 -> B3
・・・
このように入力するには
Sheets("Sheet2").Cells(1,1).Value=TextBox1.Text
このコードをどこに打てばいいのですか?

補足日時:2007/12/07 10:06
    • good
    • 0

>textboxを5つ設置したユーザーフォームを作りました。


>textboxに入力したデータがsheet2の複数のセルにデータ入力されるようにしたい

と言うのが、
TextBox1 -> sheet2!A1
TextBox2 -> sheet2!A2
・・・
TextBox5 -> sheet2!A5
という風に、TextBoxの値をsheet2の特定のセルに代入したいのなら、TextBoxのControlSourceプロパティを設定すれば、ボタンを押さなくても常時sheet2のセルを更新できますよ。
たとえば、TextBox1のControlSourceをsheet2!A1にすると、textbox1の内容の変更がリアルタイムでsheet2のA1に反映されます。

この回答への補足

ボタンを押してTexBoxに入力したデータをSheet2のそれぞれのセルに入力されるようにしたいのですが、詳しく教えてもらえないでしょうか?

補足日時:2007/12/06 22:49
    • good
    • 0

VBAでの操作になります。



Sheets("Sheet2").Cells(1,1).Value=TextBox1.Text
    • good
    • 1

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