

宜しくお願い致します。
ユーザーフォームへのデータ入力を繰り返したいのですが、うまく動いてくれません。
登録件数分データを入力(textbox2)し、それをExcelのシートに出力していきたいと思っています。
具体的には
Dim 登録件数 as integer
DIM i as integer
For i = 1 To 登録件数
TextBox1.Value = i
Cells(i, 2).Value =textbox2.value
TextBox2.Value = ""
Next i
のようなことを考えていますが、これで実行すると、2回目以降、ユーザーフォームのtextbox2にデータを入れることができません。
初歩的な質問で誠に恐縮ではございますが、どこを正せば動くようになるのか、ご指導の程宜しくお願い致します。
No.10ベストアンサー
- 回答日時:
>データはB1のセルにどんどん上書きをしてしまいます。
DIM i as integer
の変数宣言をプロシージャ(sub ~ End Sub)の外に置いていますか?
内部にあると常に初期化されて、カウントアップ(+1)してくれません。
>「何でFor文でなくて、If文なのだろう?
IF文は比較するのに使います。
今回の場合、書き込み前に繰返し回数をiの値をIF文で比較し、iの値をカウントアップ(i=i+1)して、書き込みます。
for文でも同じ事ができますが、テキストボックスのデータ入力状態を待って繰返して実行させるには不適な方法です。
>一回登録ボタンを押した後、次のデータを入力するためには、テキストボックス内をマウスでクリックしてからでないとデータを入力できません。
これも実装時の些細な気遣いが必要な部分です。
フォーム上のコントロールは、実行時には自動的に次のコントロールにフォーカスが移動します。
TabIndex プロパティの番号順にフォーカスが移動して行くので、入力順によってはこの値(順番)も変更した方が良いでしょう。
Dim i As Integer
Private Sub CommandButton1_Click()
Dim 登録件数 As Integer
登録件数 = 10
If i >= 登録件数 Then
MsgBox "Count Up"
Exit Sub
Else
i = i + 1
Cells(i, 2).Value = TextBox2.Value
TextBox2.Value = ""
TextBox2.SetFocus
End If
End Sub
>TextBox2.SetFocus
で、コマンドボタンデータ転記後にフォーカスを任意のコントロールに戻せます。
hana-hana3様
ありがとうございます!! 私のやりたい通りのことがまさにできました!!
こんなに親切にご指導いただき本当にありがとうございました。
次は、今回の結果を私が組んでいるプログラムに組み直して動作するか確認してみます。たぶんうまくいきそうな感じがしています。
これからもどうぞ宜しくお願い致します。
No.9
- 回答日時:
>あまりユーザーフォームにこだわらずにinputboxを使った方がいいと言うことでしょうか。
そうではなくて・・・
For文を使った無理なプログラムではなくて、基本的な繰返し入力の方法を覚えて欲しかっただけです。
実際に稼働させるには、
繰返しの回数を「いつ」「どこから」取得して、入力を繰り返すのか?
データを記入する位置を「いつ」「どうやって」決めるのかなど・・・。
基本的な事が解決できていないので、「実験的な~」という事を書きました。
また、入力の誤りを減らすためには、コマンドボタンからの実行が確実かと思います。
現在の記入位置に連続して書き込むにしろ、新規に別の場所に書き込むにしろ、「行番号」と「回数」の比較しかしていないので、そのまま適用するにも無理はあるでしょう。
>文字や画面が小さく読みづらいかなぁと思っています。
文字サイズは、テキストボックスのFontプロパティで設定できます。
>コマンドボタン(「登録」)の部分はどのようなコードにすればよろしいのでしょうか?
先のものは、テキストボックスにデータを記入してエンターキーを下げると自動実行します。
入力の確認を行いながら入力するなら、先のイベント(コード)は削除して、コマンドボタンに同じ内容を記入して実行してみてください。
実装する場合には、入力の誤りを減らす(場合によってはデータチェックする)事と、作業の迅速化や使いやすさを考えてコーティングする必要があるので、作業をする立場にたった操作性を考える必要があります。
hana-hana3様
いつもありがとうございます。
> そうではなくて・・・
> For文を使った無理なプログラムではなくて、基本的な繰返し入力の方法を
> 覚えて欲しかっただけです。
そうだったんですか・・・。すみません。そこまでお考え下さっていたのですね。
そうとは知らず、「何でFor文でなくて、If文なのだろう?突然If文になるとプログラムがわからなくなっちゃう・・・」などと思い、本当にすみませんでした。
hana-hana3様のIf文を使った方法で1つ1つメッセージボックスを表示して試してみているのですが、登録件数が3件となっていても変数iをきちんとカウントしてくれず、3回以上(10回とか)入力しても終了してくれません。
また、データはB1のセルにどんどん上書きをしてしまいます。
その他、一回登録ボタンを押した後、次のデータを入力するためには、テキストボックス内をマウスでクリックしてからでないとデータを入力できません。(カーソルがどこかにいってしまいます。)
しつこくてすみませんが、宜しくご指導の程お願い致します。
(hana-hana3様に一生懸命ついていこうと思っております。宜しくお願い致します。)
No.8
- 回答日時:
一部修正しました
Private Sub TextBox2_AfterUpdate()
Dim 登録件数 As Integer
登録件数 = 3
If i >= 登録件数 Then
MsgBox "Count Up"
Exit Sub
Else
i = i + 1
Cells(i, 2).Value = TextBox2.Value
TextBox2.Value = ""
End If
End Sub
実験的な物としてはとりあえず動作すると思いますが、このまま、実使用時に登録件数の値を変更するだけでは、思ったような動作しません。
hana-hana3様
お手数をおかけしまして申し訳ございません。
コマンドボタン(「登録」)の部分はどのようなコードにすればよろしいのでしょうか?
> このまま、実使用時に登録件数の値を変更するだけ
> では、思ったような動作しません。
・・・と言うことは、あまりユーザーフォームにこだわらずにinputboxを使った方がいいと言うことでしょうか。ちなみにinputboxではきちんと動作しました。
しかし、文字や画面が小さく読みづらいかなぁと思っています。
inputboxの文字(入力欄も含めて)は大きくしたりできるのでしょうか?色々調べているのですが、情報が出ていません。ご存じでしたら御教示の程お願い致します。
(また、質問が発展してしまい申し訳ございません。)
No.7
- 回答日時:
>しかし、残念なことに複数回入力させることができません。
"登録件数" には、値が入っているのですか?
補足された文面からは、この値の取得場所が全く見えていませんけど?
別のテキストボックスですか?
それともシートのどこかですか?
この回答への補足
hana-hana3様
すみません。混乱させてしまいまして。
本来、登録件数には値は入っていません。
皆様からのアドバイスの元に色々試しているのですがどうもできないため、私の質問文自体に問題があるものと考え、問題を簡略化しようとしたのが#6様のお礼欄です。
簡略化して登録件数を例えば3件と指定し、どのように動くか、自分の考えているとおりの動きをするのかをまず確認したかったのです。
「登録件数=3」として、動作を確認した後に登録件数を変数に変えれば自分の思うとおりに動くかもしれないと考えました。
申し訳ございません。
No.6
- 回答日時:
#5です。
すみません大事なところを勘違いして、間違えました。標準モジュールでなく、フォームモジュールでした。
フォームのデザインモードのテキストボックスをダブルクリックして出てくる画面で、テキストボックスのKeyDownイベントを指定し、その中に回答の中身を貼り付けてください。
imogasi様
再度の御回答ありがとうございます。
すみません・・・。頭の中がごちゃごちゃになりどうすればよいのかよく分かりません。
一度、imogasi様の方法でどう動くのか確認したいのですが、それができずにいます。
ユーザーフォーム1にテキストボックス1個と、登録ボタン1個を付け、登録件数を3回として、Sheet1に3件分のデータを貼り付けるということができるプログラムのコードを御教示していただけませんでしょうか?
ご多忙のところ誠に恐縮ではございますが、どうぞ宜しくお願い致します。
No.5
- 回答日時:
皆さんこの問題で苦労したことがないらしいようにおもいます。
私は今もってよくわからない点がありますが、参考までに下記を載せます。
Userform1を挿入し、テキストボックスを1つ貼り付けます。
そして標準モジュールに下記を貼り付けます。
やってみてください。ただし下記に満足してるわけで有りません。
実際使うと色々不便なところがあります。おもちゃのような気がします。
諸賢の下記についてのあら捜しと改善法や別方法のご教示を私自身が求めてます。
入力はデータ+ENTERで入力するものとします。
データはActiveSheetのA1セルから下に順次セットしていきます。
Dim i
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 13 Then
i = i + 1
If IsNumeric(TextBox1) Then
Cells(i, "A") = Val(TextBox1)
Else
Cells(i, "A") = TextBox1
End If
TextBox1 = ""
End If
End Sub
imogasi様
御回答いただきましてありがとうございます。
同じような経験をなさった方がアドバイスしてくださり、心強く思っております。
さて、・・・すみません。最近エクセルのマクロを始めたばかりで、よくわかっておりません。
「標準モジュールに下記を貼り付ける」と言うのは、標準モジュールを新たにつくればいいのだと思うのですが、フォームとの関連付けみたいなものはどのようにすればよろしいのでしょうか?
初歩的な質問ですみません。宜しくご指導の程お願い致します。
No.4
- 回答日時:
>頭の中のイメージでは簡単にできそうなことなのですが
あなたがイメージしている操作手順がわからないので
具体的な方法が提示できません。
セルに代入する値が必要になるたびにユーザフォームを表示する方法なら.
[ユーザフォーム]
データ入力用のテキストボックスTextBox1がある。
入力完了を示す、コマンドボタンがる。
コマンドボタンを押すと、ユーザフォームをHideする。
[メイン側]
userform1.Show vbModal
' ユーザフォームがHideすると戻ってくる。
Cells(i, 2).Value =yserform1.textbox1.value
unload yserform1
という方式でどうでしょうか?
Hayashi_Trek様
御回答いただきありがとうございます。
説明不足で申し訳ございません。
商品の管理を行うために、商品が届いたらそれに独自のバーコードを付け、廃棄するまでの状況をエクセルに記録していきたいと考えています。
例えば同一の商品が3個届いた場合、商品名やその他の情報は同じなのですが、1個ずつ管理したいため、別々にバーコードを付けます。
そして、バーコードの番号を入力する専用のユーザーフォームを立ち上げ、バーコードリーダーで読み込んだデータを「登録」ボタンをクリックすることによりエクセルのシートに登録し、ユーザーフォームをクリアした後、同様のことをあと2回繰り返すと言うことをしたいと考えています。
現状では1回目のバーコードの番号はシートに記録できるのですが、2回目以降は記録できずに終了してしまいます。
Hayashi_Trek様の方法により試してみたのですが、ユーザーフォーム側とメイン側というものがよくわかりませんでした。どこにコードを書けばよろしいのでしょうか?
No.3
- 回答日時:
>ユーザーフォームを使ってデータ入力をしたいと考えております。
For文を使用して上記をやるには、i が増えるたびに TextBox を入力するために処理を一旦停止しなければならないため、
その考え方は厳しいと思います。
(私が知る範囲ですが・・・。)
For文を使用するとなると、登録件数分の TextBox を作成し、その値を Cell に登録していくしかないと思います。
もしくは、hana-hana3 様が提示されているようにグローバル変数として定義し、
何かの処理(ボタンを押す等)ごとに i を増やして Cell に書き込んでいく方法しか思い浮かびません。
salf様
再度の御回答ありがとうございます。
頭の中のイメージでは簡単にできそうなことなのですが、現実はそう簡単ではないのですね・・・。
現在、hana-hana3 様の御回答を参考に努力しております。
今後ともどうぞ宜しくお願い致します。
No.1
- 回答日時:
単純なデータ入力なら
For i = 1 To 10
Cells(i, 2).Value = InputBox(i & " 件目")
Next
で可能です。
ユーザーフォームを使うなら、
モジュールのトップに変数(i)を定義して、グローバル変数にして、値を記憶させて置きます。
dim i as intger
Private Sub TextBox1_AfterUpdate()
If i > 登録件数 Then Exit Sub
i = i + 1
Cells(i, 2).Value = textbox2.Value
textbox2.Value = ""
end sub
hana-hana3様
いつもありがとうございます。
ユーザーフォームを使いたいと考えておりますので、後半の方法で試しております。
しかし、残念なことに複数回入力させることができません。
現在、原因を確認中です。動きましたら補足いたします。ちょっと時間がかかるかもしれません・・・・。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 2 2022/06/25 22:42
- Visual Basic(VBA) Excel VBA ユーザーフォーム1のコンボボックスに別ブックの値を反映させたいです。 6 2023/03/21 16:12
- Excel(エクセル) Excelのtextboxへの入力で小数点以下に0が続く場合でも正しく表示したい 3 2022/04/11 13:53
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) 別シートのデータを参照して値を入れたい。 まとめデータシートのC列D列の値を商品一覧シートのコードが 7 2022/08/17 13:20
- Visual Basic(VBA) VBA 重複チェック後に値をワークシートに転記する方法を教えてください。 1 2023/03/19 12:43
- Visual Basic(VBA) Accessフォームで全レコードを指定のExcelのセルへ転送し印刷する方法について 2 2022/09/08 18:23
- Visual Basic(VBA) Sheet2からオートフィルターで売上日を抽出した件数をカウントし、その件数をSheet1のセルB1 2 2023/01/12 12:24
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
このQ&Aを見た人はこんなQ&Aも見ています
-
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
テキストボックスの番号を使ったFor~Next文について
Visual Basic(VBA)
-
UserForm1.Showでエラーになります。
工学
-
-
4
エクセルVBAでテキストボックスに入力があった場合のみ、ワークシートに転記したい
Visual Basic(VBA)
-
5
ユーザーフォームに入力したデータを保持する方法
Visual Basic(VBA)
-
6
VBAのフォームでTextBoxがいっぱいある時
Access(アクセス)
-
7
ユーザーフォームを表示中にシートの操作をさせるには
Excel(エクセル)
-
8
VBA:ユーザーフォームのマルチページに色を付けたい。
Word(ワード)
-
9
VBAのコマンドボタンの文字列の改行方法は?
Visual Basic(VBA)
-
10
userFormに貼り付けたLabelを変数に
Visual Basic(VBA)
-
11
ユーザーフォームのテキストボックスに前回入力した値を表示する Excel
Visual Basic(VBA)
-
12
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
13
ExcelVBAのユーザーフォームの中に線を引きたい
Visual Basic(VBA)
-
14
EXCEL VBAで全選択範囲の解除
Excel(エクセル)
-
15
Excel VBAで、ユーザーフォームの値を、モジュールで使用したい。
Visual Basic(VBA)
-
16
VBAでユーザーフォームを再表示させたい。
Excel(エクセル)
-
17
最後のデータ行の任意のセルの値をユーザーフォームに表示させたい
Visual Basic(VBA)
-
18
エクセルVBA テキストボックスに3桁ごとにコンマ
Visual Basic(VBA)
-
19
テキストボックスやラベルのクリア
Visual Basic(VBA)
-
20
VBA エンターキーでイベントに入りたい。
PowerPoint(パワーポイント)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Web Browserで、、、
-
VisualBasic2008でのツールの扱...
-
vb2010
-
formからホームページ内のtextb...
-
AccessのVBAで「イベ...
-
エクセル VBA タブストップに...
-
ACCESS 除算での小数点切上げ方法
-
アクセスできない保護レベルエ...
-
VBAで入力数値について
-
エクセルVBAについて質問です。
-
テキストボックス内に記入され...
-
VBのプログラム
-
エクセルVBAでテキストボッ...
-
RadioButtonについて
-
g95プログラムからg++関数を呼...
-
VB6の変数宣言について
-
ストリーミング映像の初期ミュート
-
ExcelVBAのフォームで×が押され...
-
乱数の利用
-
excellvbaで
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
アクセスできない保護レベルエ...
-
エクセルVBAでテキストボッ...
-
【VB.NET】テキストボックスに...
-
visual basic初心者です。 visu...
-
VBAで入力数値について
-
ユーザーフォームへのデータ入...
-
VBAのユーザーフォームで、テキ...
-
コンボボックスからテキストボ...
-
VBでの入力値制限について
-
テキストボックスに大文字を
-
テキストボックスにカーソルを...
-
VBでローマ字入力とかな入力を...
-
年齢の計算について
-
ACCESS 除算での小数点切上げ方法
-
Excel ユーザーフォームで計算 ...
-
【C#】コンボボックスにおけるS...
-
VB2010 TextBoxの数字の表示...
-
VBAのフォーム カーソル移動
-
TextBoxの内容を右寄せ
-
VB2005テキストボックスへのコ...
おすすめ情報