- ベストアンサー
TextBox1.TextからTextBox10.Textまでのセルに書き込みたい
- TextBox1.TextからTextBox10.Textまでの内容をExcelのセルに書き込みたい方法を教えてください。
- 指定した変数を使用して、ForループやDo-Whileループを使いながら、TextBox1.TextからTextBox10.Textまでの内容をExcelのセルに順番に書き込む方法を教えてください。
- EXCEL2000を使用していますが、TextBox1.Textの数字部分を変数に指定することはできますか?また、TextBox2.Textについても変数の設定方法を教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
書いてみましたが、シート上のコントロールツールボックスのテキストボックスでしょうか。 一番面倒な場合かもしれませんね。 今から出かけますので、数日間連絡できません。ご容赦を。 補足を反映したつもりですが、時間がなくて推敲不足です。別法もありそう?(Excel2000です) ↓ Sub Test02() Dim ws1 As Worksheet 'ワークシート1 Dim ws2 As Worksheet 'ワークシート2 Set ws1 = Worksheets("Sheet1") Set ws2 = Worksheets("Sheet2") Const y0 = 2 Dim myTxt As OLEObject 'TextBox Dim myTxt2 As OLEObject 'TextBox Dim txtNo As Integer 'テキストボックスの番号 Dim txtNo2 As Integer 'テキストボックスの番号 Dim colNo As Integer '列 'テキストボックス11~20をクリア For Each myTxt2 In ws1.OLEObjects If TypeName(myTxt2.Object) = "TextBox" Then txtNo2 = Application.Substitute(myTxt2.Name, "TextBox", "") If 11 <= txtNo2 And txtNo2 <= 20 Then myTxt2.Object.Text = "" End If End If Next '比較してセルとテキストボックスの値を更新する For Each myTxt In ws1.OLEObjects If TypeName(myTxt.Object) = "TextBox" Then txtNo = Application.Substitute(myTxt.Name, "TextBox", "") If 1 <= txtNo And txtNo <= 10 Then ws2.Cells(txtNo + y0, 3) = "" If myTxt.Object.Value = Val(ws1.Cells(txtNo + y0, 2)) Then ws2.Cells(txtNo + y0, 3) = ws1.Cells(txtNo + y0, 3) 'テキストボックス11~20の更新 For Each myTxt2 In ws1.OLEObjects If TypeName(myTxt.Object) = "TextBox" Then txtNo2 = Application.Substitute(myTxt2.Name, "TextBox", "") If txtNo2 = txtNo + 10 Then myTxt2.Object.Text = ws1.Cells(txtNo + y0, 3) End If End If Next End If End If End If Next End Sub
その他の回答 (2)
- nishi6
- ベストアンサー率67% (869/1280)
VBと違って、VBAではコントロール配列が使えません。対応方法としては、 1.Collectionオブジェクトを作る 2.WithEvents(クラス)を利用 3.直接コントロール名(テキストボックス名)を利用 が考えられます。 この質問では、TextBox1~TextBox10となっているので、3のテキストボックス名を使ってみます。 テキストボックスはシート上にあってもユーザーフォーム上にあっても同じ考え方でできるでしょう。 2については、 『VBAのフォームでTextBoxがいっぱいある時』 http://www.okweb.ne.jp/kotaeru.php3?q=261042 を参考にして下さい。 標準モジュールに貼り付け ↓ Sub Test01() Dim myTxt As OLEObject 'TextBox Dim txtNo As Integer 'テキストボックスの番号 Dim colNo As Integer '列 'アクティブシートのオブジェクトを調べる For Each myTxt In ActiveSheet.OLEObjects 'テキストボックスだったら If TypeName(myTxt.Object) = "TextBox" Then 'TextBox名の数値部分を取り出す txtNo = Application.Substitute(myTxt.Name, "TextBox", "") 'TextBox1~TextBox10だったら If 1 <= txtNo And txtNo <= 10 Then '変数1=変数2 にした colNo = txtNo 'セルに書き出す Cells(1, colNo) = myTxt.Object.Value End If End If Next End Sub
お礼
VBAを始めたばかりの初心者でこれを理解するのにもう少し自分で勉強の必要 があるかと思います。詳細なご説明どうもありがとうございました。 参考にさせて頂きたいと思います。
補足
すみません。教えた頂いた内容を元に、試行錯誤したのですがうまくアイデアが 浮かびませんでした。 実は、 (1)TextBox1.Textに入力した内容をWorksheets("sheet1").Cells(Y, 2) と比較する。 (2)内容が一致していたらWorksheets("sheet2")のCells(Y, 3)にWorksheets("sheet1")のCells(Y, 3)情報をセットする。 (3)さらにTextBox11.TextにWorksheets("sheet1")のCells(Y, 3)情報を表示させるようにしたかったのです。 For Y = 3 To 10 X = Worksheets("sheet1").Cells(Y, 2) Like TextBox1.Text If X = True Then Worksheets("sheet2").Cells(Y, 3)=Worksheets("sheet1").Cells(Y, 3) TextBox11.Text = Worksheets("sheet1").Cells(Y, 3) End If Next 次にTextBox2.TextはTextBox12.Text 次にTextBox3.TextはTextBox13.Text とTextBox10.TextはTextBox20.Textまで同様のことをやらせたかったのです。 TextBoxの数字が変数にならないので、同様のプログラムを10個書いています。 度々お手数をおかけいたします。
- KojiS
- ベストアンサー率46% (145/312)
》そもそも、TextBox1.Textの数字部分【1】は変数に指定できないのでしょうか? 》 その通りです。 簡単なのは、「Controls コレクション」を使う事です。詳しくはヘルプを見てください。
お礼
どうもありがとうございます。早速ヘルプをみてみます。
お礼
すっごーーーーーーーーーーーーーーーーい!! 度々すみません。感涙です!! ううう。みずしらずの私のような やからに、お出かけ前にすみません。 しかし、このプログラムを理解するために、少し勉強します。 まだ、うまく飲み込めないところがありますので。