• 締切済み

テキストボックスの文字列の変更

windows7 excel2007でマクロ作成中の超初心者です。 エクセルファイルを開くと、ユーザーフォームが表示され そこにテキストボックスとコマンドボタンがあります。 ーーーユーザーフォームーーーーー Private Sub UserForm_Initialize() With TextBox1 TextBox1.Value = Range("Z1").Value End With End Sub ーーーテキストボックスーーーーー Private Sub TextBox1_Change() Range("Z1") = TextBox1.Value End Sub ーーーコマンドボタンーーーーー Private Sub CommandButton83_Click() Range("Z1").Value = TextBox1.Value ActiveWorkbook.Save End Sub 以上のコード四苦八苦して考えました。 そして、常にZ1の文字列が、表示され その文字列を変更して コマンドボタンをクリックすると、変更された文字列が表示されます。 自分の思うとおりにできました。 しかし、あまりに稚拙なコードで、特に ActiveWorkbook.Save なんていうコード使用したくないのです。 もっと効率的なコードはどうしたらよろしいでしょうか。

みんなの回答

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.1

>ActiveWorkbook.Save なんていうコード使用したくないのです。 全般的にどういう目的でこの仕組みを作っているのか、書かない初心者の質問者が多い。 そのアイデアがへんちくりんだったりすることもある。たまたま初心者で知っていることを使おうとするが、外に常識的な方法(仕掛け)がある場合もある。 これなども初心者が作ったコードで、目的に照らして、常識的かどうか、もう少し広い目的が書いてないので判らない。 >CommandButton83 沢山コマンドボタンを貼り付けているのかな。消したり作ったりで83になったのかな。もしコマンドボタンを何十も作っているなら、初心者のアイデアではないかな。 自分の作ったコードの土俵で質問するのでなく、y足りたいことを文章で表現して、こういう場合は「どういう仕組みでやったら良いか」という質問をして、識者のアドバイスを受けることも必要でしょう。 -- 細かい点だが With TextBox1 TextBox1.Value = Range("Z1").Value End With なども、なぜWith End Withをここで使う必要があるのか。 Private Sub UserForm_Initialize() UserForm1.TextBox1.Value = Range("D1").Value End Sub で良いのでは。これなども何処かの本の引き写しに「拘っているのでは。

aitaine
質問者

お礼

詳しくご回答いただき感謝いたします。ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 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

  • テキストボックス値をシートセルに連続して入力

    リストボックスあ行氏名より選択しテキストボックス1~6の値を実行2クリックでsheet1"E1"から順番に入力されるがか行選択のテキストボックス値1~4を順番に"E7"から入力させたいができるでしょうか。ちなみに下記の方法しかわかりません。また、実行2を押すと同時にテキストボックスを空白にしたいのですが。どなたかコードが解る方よろしくお願いします。 Private Sub 実行2_Click() With Worksheets("入力") .Range("E1") = TextBox1.Value .Range("E2") = TextBox2.Value .Range("E3") = TextBox3.Value .Range("E4") = TextBox4.Value .Range("E5") = TextBox5.Value .Range("E6") = TextBox6.Value .Range("E7") = TextBox7.Value .Range("E8") = TextBox8.Value .Range("E9") = TextBox9.Value .Range("E10") = TextBox10.Value End With End Sub

  • VBA 年月日から日曜日に当たる日の文字を赤くする

    よろしくお願いします。 TextBox2に年号(西暦) ComboBox1に月 TextBox7に日 を、入力します。 入力方法は、Label1からLabel31を押下して日付けを入れます。 したときに各Labelの内、日曜日に該当するLabelならCaptionの文字を赤くする。 Private Sub Label1_Click() TextBox7.Value = 1 ’もし1日が日曜日ならLabel1のCaptionの文字を赤くする End Sub Private Sub Label2_Click() TextBox7.Value = 2 End Sub Private Sub Label3_Click() TextBox7.Value = 3 End Sub ~ Private Sub Label29_Click() TextBox7.Value = 29 End Sub Private Sub Label30_Click() TextBox7.Value = 30 End Sub Private Sub Label31_Click() TextBox7.Value = 31 End Sub 追 ComboBoxで日付けをダウンリスト表示したかったのですが、1列表示で 長くなってしまいます。 ※2列に表示する方法を知らないもので、Labelで2列表示にしました。 もし、ダウンリストを2列表示できるのであれば、ぜひともご教示をお願いします。 無識なものですみません。 何卒宜しくお願い致します。

  • エクセルVBA テキストボックス

    いつもお世話になっております。 エクセルでVBAを使いユーザーフォームのテキストボックスで 文章入力をしようと思っているのですが、少しトラブルがありましたのでお教え願います。 エクセルシートの横がa~k、縦を9~34までのシートを結合して その中にテキストボックスで入力した文章を入れるように作っています。 MultiLineとEnterKeyBehaviorをTrueにして Private Sub CommandButton1_Click() Unload Me End Sub Private Sub TextBox1_Change() Sheets("sheet1").Range("a9") = UserForm1.TextBox1 End Sub Private Sub UserForm_Initialize() TextBox1.Value = Range("a9").Value End Sub Private Sub UserForm_Activate() With Me .Left = Application.Left .Top = Application.Top .Left = .Left + 350 .Top = .Top + 80 End With End Sub という状態になっているのですが、文章を入力して16行目で改行するとシートの方で「#VALUE!」と出てきてしまうので一旦ユーザーフォームを閉じてもう一度フォームを立ち上げると 「実行時エラー’-2147352571(80020005) Valueプロパティが設定できません。種類が一致しません。」 と出てきます。 デバッグすると  Private Sub CommandButton1_Click() → UserForm1.Show  End Sub と出てきます。 なにがおかしいのでしょうか? 今回初めてVBAを作っているので初歩的な間違いかもしれませんがよろしくお願いします

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

    テキストボックスからセルへの入力について教えていただきたいのですが、 ネットからサンプルを落として勉強しております。 以下のコードを下の画像のように見出しを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

  • ユーザーフォーム上にある「テキストボックス」に小数が入力できない

    以前にユーザーフォーム上のテキストボックスにセル値反映する方法を下記(サンプル1)のようにお教えいただいたのですが、下記のようにマクロを組むとテキストボックスに小数が入力できなくなってしまいます。 どのようにしたら、テキストボックスに小数が入力できるようになるのでしょうか? お教えください。 事例)「1.234」とテキストボックスに打ち込むと「1」    「0.856」とテキストボックスに打ち込むと「0」と    なってしまいます。 (サンプル1) 'A1のデータを反映するとした場合 'OptionButton1のコード Private Sub OptionButton1_Click() TextBox1 = Sheets("Sheet1").Range("a1") End Sub 'B1に反映するとして 'OptionButton2のコード Private Sub OptionButton2_Click() TextBox1 = "" End Sub 'TextBox1のコード Private Sub TextBox1_Change() If OptionButton2 = True Then Sheets("Sheet1").Range("B1") = TextBox1.Value End If End Sub

  • コンボボックスとテキストボックスをセルへ

    コンボボックスのデータを行へ表示されるよう下記の通りやりました。 続けてテキストボックスを指定した同じ行のセルへ入力されるように したいのですが、いろいろ調べたのですが、解決できず ここで助言いただけたらと思います。 また textbox1はA列 textbox2はB列 textbox3はM列 へとコンボボックスのデータを挟む形での入力となります。 ちなみにテキストボックスのプロジェクト名は変更してあります。 Private Sub CommandButton1_Click() Dim lrow As Long, i As Long With Worksheets("製品化") lrow = .Range("F" & Rows.Count).End(xlUp).Row For i = 0 To 6    .Cells(lrow + 1, i + 6).Value = itemname.List(listno, i) Next i End With End Sub

  • ユーザーフォームの内容が一部だけ残らない。

    VBAを始めてまだ1週間ほどなのでどの部分を変えればよいのかわかりません。 どなたかわかる方が居れば回答をお願いします。 問題:下記の構文でTextBox2の内容だけが残らない。 UserFoem1で記入場所が7つあり、ボタン1(入力)を押すと 7つの内容がSheet(履歴表)に転記されます。 ボタン2(終了)を押すとUserFormが消えます。 そして転記された後、内容をそのまま7つのTextBoxに残したいと思っています。 TextBox1(txtDate)日付を自動で表示して、 TextBox3~7までは転記後も内容は残るのですが、 TextBox2の内容だけが残らないのです。 下記の構文はネット上でいろんな方のものをコピペして製作したので、 訳の分からない文字がたくさんあり理解をしていない部分はあります。 ですので回答をいただけるならTextBox2の問題解決と 下記の内容をもっとスマートな形に変えて 不要な部分を削除して頂けたらと思っています。 宜しくお願い致します。 Sub ユーザーフォームで履歴表へ入力する() End Sub Private Sub CommandButton1_Click() Dim n As Long With Worksheets("履歴表") n = .Range("B" & Rows.Count).End(xlUp).Row  'Bの一番下を検索する Cells(n + 1, 2).Value = txtDate.Value    'テキストボックス2に自動で日付を入れてB列へ Cells(n + 1, 3).Value = TextBox2.Value 'C列へ代入 Cells(n + 1, 4).Value = TextBox3.Value 'D列へ代入 Cells(n + 1, 5).Value = TextBox4.Value 'E列へ代入 Cells(n + 1, 6).Value = TextBox5.Value 'F列へ代入 Cells(n + 1, 7).Value = TextBox6.Value 'G列へ代入 Cells(n + 1, 8).Value = TextBox7.Value 'H列へ代入 Range(Cells(n + 1, 2), Cells(n + 1, 2)).Offset(, -1).Value = Range(Cells(n + 1, 2), Cells(n + 1, 2)).Row - 4   'A列に番号を順番に入れる End With TextBox2.Value = "" TextBox2.SetFocus End Sub Private Sub TextBox2_Change() '商品名 End Sub Private Sub TextBox3_Change() '型式・形式 End Sub Private Sub TextBox4_Change() '数量 End Sub Private Sub TextBox5_Change() '客先 End Sub Private Sub TextBox6_Change() '担当 End Sub Private Sub TextBox7_Change() '備考 End Sub Private Sub txtDate_Change() End Sub Private Sub UserForm_Click() End Sub Private Sub UserForm_Initialize() UserForm1.txtDate.Value = Date End Sub Private Sub CommandButton2_Click() Me.Hide End Sub

  • テキストボックスを配置したいのですが

    以下のコードですと、失敗します。 Private Sub CommandButton3_Click() Dim nu7 As MSForms.TextBox Set nu7 = UserForm1.Controls.Add("Forms.TextBox.1", "TextBox1", True) With nu7 .Left = 20 .Top = 50 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列にも転記されて いる状態です。さらに本来は各列に入力されている場合のみ転記させたいのですが、どのような コードにしたら良いか教えてください。よろしくお願いします。