• ベストアンサー

UserFormにテキストボックスを作成してその内容をExcleに反映

初めまして。ExcelのVBAをチャレンジしています。 初心者なので良くわからないため質問させて頂きました。 今、商品登録用のユーザーフォームを作成しています。 ユーザーフォームには TextBox1=「商品No.」 TextBox2=「商品名」 TextBox3=「単価」 TextBox3=「仕入先」 CommandButton1=「登録」 CommandButton2=「終了」 があります。 「商品No.」,「商品名」,「単価」,「仕入先」を入力し、「登録」をクリックしたらExcelに横一列(参考1)に反映させ、入力・登録を繰り返し行い(商品が入ったら随時入力)下に追加していきたいのですが、どの様にすれば宜しいでしょうか? <参考1>   A    B   C   D 1 商品No. 商品名 単価 仕入先 2 001   ○○○ 10円 △△  3 ・     ・   ・  ・ 4 ・     ・   ・  ・ 5 ・     ・   ・  ・

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

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

必要最低限のコードです。 実情に合わせて変更してください。 Private Sub CommandButton1_Click()  Dim i As Long  i = Range("A65536").End(xlUp).Row + 1  Range("A" & i) = Format(UserForm1.TextBox1.Value, "000")  Range("B" & i) = UserForm1.TextBox2.Value  Range("C" & i) = UserForm1.TextBox3.Value & "円"  Range("D" & i) = UserForm1.TextBox4.Value End Sub

noname#168961
質問者

お礼

早速の回答有難うございます。 上記コードで無事出来ました! とても、助かりました!

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

その他の回答 (1)

  • popesyu
  • ベストアンサー率36% (1782/4883)
回答No.1

まず第一に原理的には下記になります。 Range("A2")=商品No Range("B2")=商品名 Range("C2")=単価 Range("D2")=仕入先 1.Range("A1")の部分は動的に変わるので変数化した方が楽になります。 例えば下記のようにして Cells(x,y)=商品No xとyの値をその都度設定します。 2.Forなどのループ処理を入れるとコード的に美しくなります(修正も楽になります)。 3.常に最終行の次の行に入力するということになるので、最終行の取得を自動化することも必要です。 利用するのはUsedrangeやEnd(xlUp)になります。 参考 http://www.k1simplify.com/vba/tipsleaf/leaf23.html 最終的には上記内容をそれぞれ組み合わせて一本化します。 最初の部分以外は別に必須というわけでもないです。幾らでもやりようがあるので(例えば最終行はActiveCellのある行をそれとみなすとか、挿入する行はその都度ユーザーに選択させるとか)、泥臭い方法だけでも一応形にはなります。 正解が別にあるわけではないので、ヘルプや色々な参考サイトをまわって理解しやすいコードをコピペして、それを修正しながら作っていきましょう。

noname#168961
質問者

お礼

早速の回答有難うございました! そうなんですよね、正解がある訳ではないので色々試してはみるのですが、なかなか上手くいかずいつも苦労しております。 参考サイトも教えてくださって有難うございました。

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

関連するQ&A

  • セルの内容をテキストボックスへ反映

    ユーザーフォームを用いて勤怠打刻のシステムを作っています。 ユーザーフォームの構成は下記の通りです。 TextBox1に時間(hour)を入力 TextBox2に分(minits)を入力 →TextBox3に入力した時間分を表示させ、G列H列に反映 TextBox4に打刻する年月日をB列から拾う シート   A   B ・・・ G   H 1     2019/10/1   08:00 19:00  2     2019/10/2 08:00  17:00 3     2019/10/3 08:00 17:00 ユーザーフォームはG列とH列に入力し、 G列に入力するとH列に移動、 H列に入力すると一つ下のG列へ移動と コマンドボタンを押すと自動でジグザグに動くようにしています。 TextBox4にG列・H列に対応するB列の値を表示させたいと思っています。 例えば、G1を選択しているとTextBox4に2019/10/1を表示、H2を選択していると2019/10/2を表示などです。 年月日は表示されるものの、セルの選択が変わっても TextBox4の値が変わらない状況です。 ご教授いただければ幸いです。

  • 検索結果の指定列をリストボックスに反映したい

    ユーザーフォームにTextbox、検索ボタン、Listboxを配置しました。 Textboxに「E列」の大分類(例:「35」)を入力して、検索ボタンを押すと、「35」のレコードのA列とB列だけListboxに反映させるようにしたいです。 皆さん、教えて下さい!宜しくお願いします。  A列     B列    C列      D列    E列 商品コード/商品名/仕入先コード/仕入先名/大分類 123456 りんご 011 AAA 35 456789 ばなな 012 BBB 35 234567    テーブル  013 CCC 23

  • ExcelのテキストBOXについて教えて下さい。

    おはようございます。 Excelの Sheet1 に次の様な表があり、 (Sheet1)   A   B      C     D E   F      G 1 (1) 部品名  「TextBox1」  (5) 標準価格 「TextBox5」 2 (2) 型式   「TextBox2」   (6) 標準価格 「TextBox6」 3 (3) 仕様   「TextBox3」 4 (4) メーカー 「TextBox4」 「TextBox1~6」にそれぞれ情報を入力して「CommandButton1」を押すと、 Sheet2 にデータが書込まれる様にしたいのですが可能でしょうか? (Sheet2)    A     B   C   D       E     F  1 部品名 型式 仕様 メーカー 標準価格 仕入価格 2  ↓     ↓   ↓  ↓      ↓    ↓ ど素人なもので上手く説明できませんが、どなたか教えていただけないでしょうか? 宜しくお願いします。 Excel2000を使用しています。

  • UserFormを利用してシートからシートへコピー

    お世話になっています。 UserFormに日付を入力したら、シート1に入力してあるデータをシート2にコピーをさせたいのですが出来ますでしょうか? シート1には、下記のようなデータがあります。 UserFormを作成し、その中には【TextBox】・【CommandButton】があり【TextBox】に日付を入力し【CommandButton】をクリックすると、シート2にそのデータがコピーされるようにしたいのですが・・・ (ちなみに、日付はバラバラに入っています) シート1   A   B      C     D    E ・ ・ ・ 7 No.   日付    商品名    金額   仕入先 8 1  2008/03/10   ○○○ 9 2  2008/03/10   ○○○ 10 3  2008/03/14   ○○○ 11 4  2008/03/13   ○○○ 12 5  2008/03/12   ○○○ 13 6  2008/03/11   ○○○ 14 7  2008/03/12   ○○○ 15 8  2008/03/13   ○○○ ・ ・   ・ ・ ・   ・ ・ ・   ・ 2008/03/12を入力した場合、 シート2   A   B      C     D    E ・ ・ ・ 7   日付    商品名    金額   仕入先 8  2008/03/12   ○○○ 9  2008/03/12   ○○○ 10 11 12 13 14 15 ・ ・   ・ ・ ・   ・ ・ ・   ・

  • エクセル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を作っているので初歩的な間違いかもしれませんがよろしくお願いします

  • EXCEL VBAのユーザーフォーム上のテキストボックスの入力方法について

    すいません教えていただきたいことがあります。 EXCEL VBAのユーザーフォームについて、 コマンドボタンにタグを設定して、これにキーボードと同じ機能を持たせて テキストボックス内に入力することは可能でしょうか。 例えばコマンドボタンを「あ」~「ん」まで作り、それぞれのボタンに「あ」~「ん」までのタグを設定する。 Private Sub UserForm_Initialize() CommandButton1.Tag = "あ" CommandButton2.Tag = "い" ・・・・「ん」までボタンを作成する。 次に、 Private Sub CommandButton1_Click() TextBox1.Value = TextBox1.Value & CommandButton1.Tag End Sub Private Sub CommandButton2_Click() TextBox1.Value = TextBox1.Value & CommandButton3.Tag End Sub ・・・「ん」まで作成する。 この設定では、コマンドボタンのクリックで文字の追加はできますが、ボタンを押すと常に文字が一番後ろに追加されるため、 テキストボックスをクリックしても文章の途中に文字を挿入することが出来ません。 通常のキーボードの入力と同じようにテキストボックス内でクリックした箇所からコマンドボタンで入力を開始するような設定は可能でしょうか。 よろしくお願いします。

  • エクセル 複数条件による検索・抽出 マクロ

    ユーザーフォームに5つのTextBoxを用意しまして、TextBox1に取引先会社名、TextBox2に商品名を入れると、(できれば自動的に)TextBox3に単価、TextBox4に商品番号、TextBox5に材料名が入るようなマクロを組みたいと考えております。 当社は、取引先相手が一次卸か二次卸かで、同じ商品でも単価が変わってくるので、二つの条件が必要となり、初心者の私には、どのようなマクロを組めば良いのかわかりません。 できれば、ユーザーフォームを立ち上げるSheet1とは、別のSheet2などに各会社名・対応する商品名、そして各々の単価などの表を作りたいと考えております。 分かりにくい質問かと思いますが、宜しくお願いします。 上記に書いた方法以外に、もっと良いアイデアなどありましたら、是非とも宜しくお願いします。

  • ユーザーフォーム内のテキストボックス内の書式設定

    A1セルに12.345と入力してあり、書式は「数値」で小数点以下の桁数2にしてあり、 「12.35」と表示されます。 VBAを起動して、ユーザーフォームを挿入し、 テキストボックスを作成し、 TextBox1の「ControlSource」にA1と入力すると TextBox1には「12.345」と表示されます。 エクセルのA1と同じ様に TextBox1も「12.35」と表示したいのですがどうすればいいのでしょうか? エクセル2003です。 よろしくお願い致します。

  • エクセルVBA テキストボックス 金額の入力

    エクセルVBA ユーザフォームにて「商品登録」を作成しています。 単価を設定するテキストボックスについて2つ質問させてください。 1.単価が小数点以下の場合の処理 2.小数点なしの単価を小数点ありの単価に修正する方法 1.以下の方法で小数点ありとなしを判断しているのですが、 もっと簡単な方法があれば教えていただきたいです。 Set mytxt = Me.Controls("txt4") If mytxt.Text <> "" Then   tanka01 = mytxt.Text   tanka02 = Application.WorksheetFunction.RoundDown(tanka01, 0)   If tanka01 = tanka02 Then     mytxt.Text = Format(tanka01, "#,##0")   Else     mytxt.Text = Format(tanka01, "#,##0.0")   End If End If 2.上記方法で、単価をデータに設定後、変更を行うため、 TextBox内に単価を出力し変更できるようにしているのですが、 1度小数点なしで設定してしまうと、小数点以下が単価のTextBox内に 入力できなくなってしまいます。 小数点が再度入力できる方法は存在するでしょうか? 以上です。 色々と調べてみたのですが、見つからず、質問させていただきました。 よろしくお願いいたします。

  • テキストボックスの値をセルに反映させたい。

    はじめまして、いつもお世話になっております。 EXCEL VBAの質問です。 下記(1)(2)の質問にお答えいただきたく、お願いいたします。 (1)ユーザーフォームのテキストボックスの値をEXCELのデータが入力されている 最終行の下の空白にユーザーフォームのボタンをクリックして反映。 (2)(1)の逆で特定のセルの値をユーザーフォームのテキストボックスに反映。 色々なサイトのプロシージャをコピペしましたが、うまくいきません。 見づらいかもしれませんが、ユーザーフォームの画像を添付します。 皆様、よろしくお願いいたします。