エクセルユーザーフォームテキストボックスについて

このQ&Aのポイント
  • エクセルのユーザーフォームテキストボックスからセルへの入力について教えてください。
  • ネットからサンプルを落として勉強していますが、見出しを3から7まで項目を増やしたい場合、どの部分を書き換えればよいのでしょうか?
  • Private Sub CommandButton1_Click() のコードを使用して、エクセルのセルにテキストボックスの入力内容を書き込む方法が説明されています。
回答を見る
  • ベストアンサー

エクセル ユーザーフォームテキストボックスについて

テキストボックスからセルへの入力について教えていただきたいのですが、 ネットからサンプルを落として勉強しております。 以下のコードを下の画像のように見出しを3から7まで項目を増やしたい場合、 どの部分を書き換えたらいいのでしょうか? よろしくお願いいたします。 Private Sub CommandButton1_Click() Dim LASROW As Long Dim f As Long With Worksheets("Sheet1") 'A列の最終行を取得 LASROW = .Range("A" & CStr(Rows.Count)).End(xlUp).Row 'セルに書き込み For f = 0 To 2 .Range("A" & CStr(LASROW)).Offset(1, f).Value = Me.Controls("TextBox" & f + 1).Value Next End With 'TextBox1,2,3をクリア For f = 1 To 3 Me.Controls("TextBox" & f).Value = "" Next 'TextBox1にフォーカスを移動 Me.TextBox1.SetFocus End Sub

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

  • ベストアンサー
回答No.2

こんにちは。 そのまま修正してみました。 おまけは、テキストボックスに値が入っているか調べることと、テキストボックスの値を消す前に対話型にしたことです。 '// Private Sub CommandButton1_Click()  Dim LastRow As Long 'ここはキャメル形式やパスカル形式にします/大文字は定数です。  Dim i As Long '/テキストボックスに値があるか調べる  For i = 1 To 7   If Trim(Me.Controls("TextBox" & i).Text) = "" Then    MsgBox "TextBox" & i & "が空です。", vbExclamation    Exit Sub   End If  Next i '/セルに書き込み  With Worksheets("Sheet1")   LastRow = .Cells(Rows.Count, 1).End(xlUp).Row + 1   For i = 1 To 7    .Cells(LastRow, i).Value = Me.Controls("TextBox" & i).Value   Next  End With '/TextBox1-7をクリア  If MsgBox("テキストボックスを空にしてよろしいですか?", vbQuestion + vbYesNo) = vbYes Then   For i = 1 To 7    Me.Controls("TextBox" & i).Value = ""   Next i  End If  'TextBox1にフォーカスを移動  Me.TextBox1.SetFocus End Sub

orange1010
質問者

お礼

ご教示ありがとうございます。 空欄でも構わないところがありますので、 If Trim(Me.Controls("TextBox" & i).Text) = "" Then MsgBox "TextBox" & i & "が空です。", vbExclamation Exit Sub End If を削除して実行してみたところ、 希望通りのものになりました。 助かりました! 本当にありがとうございました。

その他の回答 (1)

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

private sub CommandButton1_Click()  dim lastrow as long  dim c as long  with worksheets("Sheet1")  lastrow = .range("A65536").end(xlup).row  for c = 1 to 7   .cells(lastrow, c) = me.controls("TextBox" & c) ’←ここを理解   me.controls("TextBox" & c) = ""  next c  end with end sub

orange1010
質問者

お礼

ありがとうございました。 勉強になりました。

関連するQ&A

  • ユーザーフォームのテキストボックスでVLOOK

    ユーザーフォームのテキストボックスで、ご教示お願いいたします。 現在、以下のようなコードこちらで教えていただきセルに入力をしております。 上から順番に入力した際、テキストボックス5に値を入たら、 listのシートから該当するもの(項目は20個)をテキストボックス6に表示させたいと思っております。 ■現在のコード '// Private Sub CommandButton1_Click() Dim LastRow As Long 'ここはキャメル形式やパスカル形式にします/大文字は定数です。 Dim i As Long '/テキストボックスに値があるか調べる For i = 1 To 7 Next i '/セルに書き込み With Worksheets("Sheet1") LastRow = .Cells(Rows.Count, 1).End(xlUp).Row + 1 For i = 1 To 7 .Cells(LastRow, i).Value = Me.Controls("TextBox" & i).Value Next End With '/TextBox1-7をクリア If MsgBox("テキストボックスを空にしてよろしいですか?", vbQuestion + vbYesNo) = vbYes Then For i = 1 To 7 Me.Controls("TextBox" & i).Value = "" Next i End If 'TextBox1にフォーカスを移動 Me.TextBox1.SetFocus End Sub ■付け足したいコード Private Sub textbox5_change() Dim temp, x temp = Me.textBox5.Value If IsNumeric(temp) Then temp = Val(temp) x = Application.VLookUp(temp, Sheets("list").Range("a1:b20"), 2, False) If Not IsError(x) Then Me.TextBox6.Value = x Else MsgBox Me.TextBox5.Value & " はリストにありません" End If End Sub 【質問内容】 付け足したいコードは上記の通りですが、どのように付け足せばいいのかが分からず、 困っております。 度々で申し訳ありませんが、テキストボックス5の値を見て、 テキストボックス6に表示させるやり方をご教示お願いいたします。

  • エクセル ユーザーフォームでVLOOK

    ユーザーフォームのテキストボックスで、ご教示お願いいたします。 現在、以下のようなコードこちらで教えていただきセルに入力をしております。 テキストボックス5に値を入れ、 listのシートから該当する文字をテキストボックス6に表示させたいと思っております。 ■現在のコード '// Private Sub CommandButton1_Click() Dim LastRow As Long 'ここはキャメル形式やパスカル形式にします/大文字は定数です。 Dim i As Long '/テキストボックスに値があるか調べる For i = 1 To 7 Next i '/セルに書き込み With Worksheets("Sheet1") LastRow = .Cells(Rows.Count, 1).End(xlUp).Row + 1 For i = 1 To 7 .Cells(LastRow, i).Value = Me.Controls("TextBox" & i).Value Next End With '/TextBox1-7をクリア If MsgBox("テキストボックスを空にしてよろしいですか?", vbQuestion + vbYesNo) = vbYes Then For i = 1 To 7 Me.Controls("TextBox" & i).Value = "" Next i End If 'TextBox1にフォーカスを移動 Me.TextBox1.SetFocus End Sub ■付け足したいコード Private Sub textbox5_change() Dim temp, x temp = Me.textBox5.Value If IsNumeric(temp) Then temp = Val(temp) x = Application.VLookUp(temp, Sheets("list").Range("a1:b20"), 2, False) If Not IsError(x) Then Me.TextBox6.Value = x Else MsgBox Me.TextBox5.Value & " はリストにありません" End If End Sub 【質問内容】 付け足したいコードは上記の通りですが、どのように付け足せばいいのかが分からず、 困っております。 度々で申し訳ありませんが、テキストボックス5の値を見て、 テキストボックス6に表示させるやり方をご教示お願いいたします。

  • ユーザーフォーム、リストボックスに重複なしのリスト

    ユーザーフォームリストボックスに 重複なしのリストを作りたく、調べたところ以下のソースを発見しました。 記載した所思った通りに実装できたのですが ソースがのっていたのは 詳しく解説しているサイトではなくよくわからぬままソースのコピーで実装しています 出来れば、下記の解説をお願いしたいです Private Sub UserForm_Initialize() Dim f As Long Dim v As Variant Dim Lrow As Long Dim WS As Worksheet Set WS = Worksheets("Sheet1") Lrow = WS.Range("A" & CStr(Rows.Count)).End(xlUp).Row v = WS.Range("A1:A" & CStr(Lrow)).Value With CreateObject("Scripting.Dictionary")    For f = 1 To UBound(v)       .Item(v(f, 1)) = Empty    Next    ListBox1.List = .Keys End With End Sub

  • Excel VBA ユーザフォームの検索について

    添付の画像のようなユーザフォームを作っています。 TextBox1に検索ワードを入力して、CommandButton1をクリックすると、下のComboBox1に一覧が出るようにしたいと思い、ほかのサイトから下記のコードを見つけて、作ってみました。参照先のsheet2を表示しているときは大丈夫なのですが、別のシートを選んでいるとエラーになります。 sheetは3つあり、それぞれ違うリストが入力されています。今回はsheet2のリストを参照したいのですが、最初はsheet1が表示されている状態で実行したいです。 エラーの内容は 実行時エラー9 インデックスが有効範囲にありません。 コチラがコードです。 Private Sub UserForm_Initialize() Dim i As Long, imax As Long Dim tbl() As Variant imax = ThisWorkbook.Worksheets("sheet2").Cells(Rows.Count, "A").End(xlUp).Row ReDim tbl(imax) For i = 1 To imax tbl(i) = Range("A" & i).Value Next i With ComboBox1 .List() = tbl() End With End Sub Private Sub CommandButton1_Click() Dim i As Long, imax As Long Dim tbl() As Variant Dim cnt As Long, j As Long j = -1 With ThisWorkbook.Worksheets("sheet2") imax = .Cells(Rows.Count, "A").End(xlUp).Row cnt = Application.CountIf(Range("A1:A" & imax), "*" & TextBox1.Text & "*") ReDim tbl(cnt) For i = 1 To imax If InStr(.Range("A" & i), TextBox1.Text) > 0 Then j = j + 1 tbl(j) = Range("A" & i).Value ←この部分がエラーになる End If Next i End With With ComboBox1 .List() = tbl() End With End Sub どこを直せば良いか、教えてください。 よろしくお願いします。

  • 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列にも転記されて いる状態です。さらに本来は各列に入力されている場合のみ転記させたいのですが、どのような コードにしたら良いか教えてください。よろしくお願いします。

  • Excel オーダーフォームのテキストボックス入力について

    オーダーフォームを作成し、テキストボックスを2つ以上作成し、コマンドボタンを1つ作りました。 同じ行ですべてを入力できるようにしたいのですが、どうしたらよいでしょうか? テキストボックス1の値を入力するためのコマンドは、最下位の行を探してそこに入力するようなコマンドを作っているはずです…その横の列にテキストボックス2の値を入力し、その横の列にテキストボックス3の値を入力し…というようにしていきたいのです。 Private Sub CommandButton1_Click() Dim lRow As Long With Worksheets("sheet1") lRow = .Range("A" & Rows.Count).End(xlUp).Row .Range("A" & lRow + 1).Value = TextBox1.Value End With TextBox1.Value = "" TextBox1.SetFocus End Sub

  • ユーザーフォームに教えてください!

    病院に勤めている者ですが、今エクセルで患者さまデータを作成しており、ユーザーフォームを使って患者さま情報を一目みてわかるようにしています。オートフィルターとスクロールバーを同期させてテキストバックスに反映させるようにしているのですが、ユーザーフォームに入力すれば直接セルに入力できるようにするにはどうしたら良いでしょうか。記述は下記のとおりです。 Private Sub ScrollBar1_Change() SelectRow For i = 1 To 65 Me.Controls("textbox" & CStr(i)).Value = Selection.Cells(1, i) Next End Sub Private Sub UserForm_Initialize() ScrollBar1.Min = 1 ScrollBar1.Max = CountRows() ScrollBar1.LargeChange = ScrollBar1.Max \ 10 + 1 ScrollBar1.Value = 1 SelectRow For i = 1 To 65 Me.Controls("textbox" & CStr(i)).Value = Selection.Cells(1, i) Next End Sub Sub SelectRow() Dim iRows As Long iRows = 0 For i = 5 To ActiveSheet.UsedRange.Rows.Count If Not Rows(i).Hidden Then iRows = iRows + 1 If iRows = ScrollBar1.Value Then ActiveSheet.Rows(i).Select Exit For End If End If Next i End Sub Function CountRows() As Long Dim iRows As Long iRows = 0 For i = 1 To ActiveSheet.UsedRange.Rows.Count If Not Rows(i).Hidden Then iRows = iRows + 1 End If Next i CountRows = iRows End Function 具体的な記述があればありがたいです!

  • テキストボックスの数値を3桁ごとに区切りたい。

    テキストボックスの数値を3桁ごとに区切りたい。 エクセルのユーザーフォームにテキストボックスを1~7まで並べています。 テキストボックス1~6の合計を7に入れるようにしています。 テキストボックスに記入するVBAは以下のように投入しています。 合計は上手く表示されるのですが、3桁ごとに「,」の区切りを入れたいと思っています。 どのように記述したらよいのか、教えていただけないでしょうか。 -------------------------------------- Private Sub TextBox1_AfterUpdate() Dim i Dim res For i = 1 To 6 res = res + Val(Me.Controls("TextBox" & i).Value) Next i TextBox7 = res End Sub Private Sub TextBox2_AfterUpdate() Dim i Dim res For i = 1 To 6 res = res + Val(Me.Controls("TextBox" & i).Value) Next i TextBox7 = res End Sub Private Sub TextBox3_AfterUpdate() Dim i Dim res For i = 1 To 6 res = res + Val(Me.Controls("TextBox" & i).Value) Next i TextBox7 = res End Sub Private Sub TextBox4_AfterUpdate() Dim i Dim res For i = 1 To 6 res = res + Val(Me.Controls("TextBox" & i).Value) Next i TextBox7 = res End Sub Private Sub TextBox5_AfterUpdate() Dim i Dim res For i = 1 To 6 res = res + Val(Me.Controls("TextBox" & i).Value) Next i TextBox7 = res End Sub Private Sub TextBox6_AfterUpdate() Dim i Dim res For i = 1 To 6 res = res + Val(Me.Controls("TextBox" & i).Value) Next i TextBox7 = res End Sub -------------------------------------- #次の文字を書くテキストボックスの情報に加えてみましたが、 合計が狂ってうまくいきませんでした。 TextBox1.Text = Format(TextBox1.Value, "#,##0") TextBox7.Text = Format(TextBox7.Value, "#,##0")

  • VBA ユーザーフォーム

    VBA初心者です。以下の様なソースを見つけました。この場合は、文字を検索するとD1 にその該当番号が表示されます。 ※A列には番号、B列には文字列 そうではなく、そのクリックした行のA列にセルが移動し、ユーザーフォームが閉じられる様にできますでしょうか? よろしくお願い致します。 Private Sub ListBox1_Click() Sheets("Sheet1").Range("D1").Value = ListBox1.Value End Sub Private Sub TextBox1_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean) Dim v() As Variant Dim c As Range Dim k As Long ListBox1.Clear With Sheets("Sheet1") With .Range("A1", .Range("A" & .Rows.Count).End(xlUp)) ReDim v(1 To 2, 1 To .Rows.Count) For Each c In .Cells If c.Offset(, 1).Value Like TextBox1.Value & "*" Then k = k + 1 v(1, k) = c.Value v(2, k) = c.Offset(, 1).Value End If Next If k = 0 Then MsgBox "指定の値は存在しません" Else ReDim Preserve v(1 To 2, 1 To k) ListBox1.List = WorksheetFunction.Transpose(v) End If End With End With End Sub

  • excel ユーザーフォームでシートごとに転記2

    先日ユーザーフォームへの転記について質問させていただきました。 ご回答いただき、ありがとうございました。 今度はオプションボタンで選択したときに、シートごとに転記する方法を 教えていただけますでしょうか。 ユーザフォーム上で、オプションボタンを選択。 OptionButton1・・・シート1へ転記 OptionButton2・・・シート2へ転記 これをOKボタンを押したときに転記するようにしたいと思っています。 Private Sub OK_Click() Dim CLrow As Long Dim KYrow As Long CLrow = Worksheets("Sheet1").Range("A65536").End(xlUp).Row KYrow = Worksheets("Sheet2").Range("A65536").End(xlUp).Row If OptionButton1.Value = True Then Worksheets("Sheet1").Range("A" & CLrow).Value = .TextBox1.Value ElseIf OptionButton2.Value = True Then Worksheets("Sheet2").Range("A" & KYrow).Value = .TextBox1.Value End With End Sub ここまでやってみたのですが「参照が不正または不完全です」 と出てしまいます。 どなたかご教示願います。 よろしくお願いします。

専門家に質問してみよう