こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

VBA テキストボックスから指定セルへのコードの件

ExcelのVBA~フォームのテキストボックスから指定したセルへ転記するコードで質問です。
現在作成中のものは

ワークシート名”登録” 
(セル-項目-フォーム上のコントロール名)
A列-住所-TextBox1
B列-電話-TextBox2
C列-氏名-TextBox3
D列-カナ-TextBox4
E列-性別-ComboBox1
F列-登録日-TextBox5   としています。

登録日-TextBox5に関してですが、
  TextBox5.Text = Date 
にしてフォーム上に自動で表示されるようにしました。
これをシート”登録”のF列に自動で転記させようと思いネットで色々調べて、使えそうなコードを
参考にし、付け足したものが以下のコードです。

Private Sub UserForm_Activate()
'登録日
TextBox5.Text = Date

↓以下 付け足したコード

Dim LASROW As Long
Dim f As Long

With Worksheets("登録")
'F列の最終行を取得
LASROW = .Range("F" & CStr(Rows.Count)).End(xlUp).Row
'セルへ入力
For f = 0 To 2
.Range("F" & CStr(LASROW)).Offset(1, f).Value = Me.Controls("TextBox5").Value
Next
End With
End Sub

とりあえず、実行したところ 登録日-F列には転記されていましたが、G列とH列にも転記されて
いる状態です。さらに本来は各列に入力されている場合のみ転記させたいのですが、どのような
コードにしたら良いか教えてください。よろしくお願いします。

投稿日時 - 2010-11-26 04:16:31

QNo.6344475

困ってます

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

こんな感じでどうでしょう。

Option Explicit

Private Sub UserForm_Initialize()
Worksheets("登録").Activate
Cells(Rows.Count, 1).End(xlUp).Offset(1).Select
ComboBox1.AddItem "男"
ComboBox1.AddItem "女"
TextBox5.Text = Date
TextBox1.SetFocus
End Sub

Private Sub CommandButton1_Click()
Dim rNum As Long

If TextBox1.Text = "" Or TextBox2.Text = "" Or TextBox3.Text = "" Or TextBox4.Text = "" Or ComboBox1.Text = "" Or TextBox5.Text = "" Then
MsgBox "未記入の項目があるため転記できません。"
Exit Sub
End If
rNum = ActiveCell.Row
Cells(rNum, 1).Value = TextBox1.Text
Cells(rNum, 2).Value = TextBox2.Text
Cells(rNum, 3).Value = TextBox3.Text
Cells(rNum, 4).Value = TextBox4.Text
Cells(rNum, 5).Value = ComboBox1.Text
Cells(rNum, 6).Value = TextBox5.Text
Cells(rNum + 1, 1).Select
TextBox1.Text = ""
TextBox2.Text = ""
TextBox3.Text = ""
TextBox4.Text = ""
ComboBox1.Text = ""
TextBox1.SetFocus
End Sub

Private Sub CommandButton2_Click()
Unload Me
End Sub

投稿日時 - 2010-11-27 11:39:59

お礼

ご回答ありがとうございました。
コードの他、フォームもほぼ希望とおりのものでした。
お手数おかけして申し訳ありませんでした。フォームのほうは
少し、手を加えてやってみたいと思います。

投稿日時 - 2010-11-28 00:03:55

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

質問が関係ないことまで書いてあって長い。
ーー
まず、テキストボックスは、入力完了ボタンを儲け、クリックしたタイミングで、テキストボックス群の値を取るようにすべきだ。
入力の完了は入力者に任せコマンドボタンをおしてもらうべきだ。
そして要点はい今まで入力された最後の行の次にデータをセットすれば良いのでしょう。
最後行はEnd(xlUp).Rowで行番号がわかるから、次回データをセットする行は+1する。
データを瀬とする行と列は、特に各列は具体的にCells(,i,"F")などで特定すれば仕舞いでしょう。
テキストボックスまで相対化して1行で済まそうというのは、熟練者のやること、。コントロール配列もVBAでは使えない。添え字に頼るやり方もあろうが。無理をしないこと。
例えば
下記を参考に。
ユーザーフォームにテキストボックス2つと、コマンドボタン1つを設ける。
1津は日付用、1つは文字列か数値を入力用。
Private Sub UserForm_Initialize()
TextBox1 = Date
End Sub
ーー
Private Sub CommandButton1_Click()
d = Worksheets("Sheet1").Range("F65536").End(xlUp).Row + 1
'MsgBox d
dt = TextBox1.Text
Worksheets("Sheet1").Cells(d, "C") = dt
Worksheets("Sheet1").Cells(d, "F") = TextBox2.Text
TextBox2.Text=””
End Sub
日付は変更は出来るが、可能性があるなた、毎回
TextBox2.Text=””
TextBox1 = Date
とすればよい。
質問そのまま向けの回答では無いから類推すること。

投稿日時 - 2010-11-26 19:58:01

お礼

ご回答ありがとうございました。大変お手数をお掛けしました。
いくつか参考にさせていただこうと思います。

投稿日時 - 2010-11-27 23:52:46

あなたにオススメの質問