• ベストアンサー

ユーザフォームを使ってのデータの書き換え(エクセル)

fumufumu_2006の回答

回答No.2

こんな方法はどうでしょうか? まず、LabelはやめてすべてTextBoxにします。 コード[TextBox1] 商品名[TextBox2] 単価 [TextBox3] 新単価[TextBox4] 改定日[TextBox5] だとします。 これはControlSourceという便利なプロパティを使うためです。 一応、商品名[TextBox2]と単価[TextBox3]は、編集禁止と自動的に移動しなくなるようにします。 商品名[TextBox2]と単価[TextBox3]のプロパティで、 Locked=True TabStop=False にします。 データがSheets("Sheet1")にあるとします。 後は以下のコードをユーザーフォームのモジュール部にコピーしてください。 Private Sub TextBox1_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean) Dim r As Variant '検索結果の行(エラー対応のためVariantにする) With Sheets("Sheet1") 'TextBox1の値をASheet1のA列で探す r = Application.Match(Val(TextBox1.Value), .Columns(1), 0) 'A列に見つからない場合 If IsError(r) Then 'エラーメッセージ MsgBox TextBox1.Value & " はありません" 'TextBox1の文字列を全選択状態にする TextBox1.SelStart = 0 TextBox1.SelLength = Len(TextBox1.Text) '更新中止 Cancel = True Exit Sub End If '各TextBoxのValueプロパティにリンクさせるセル(ControlSource)を設定(シート名付きで) TextBox2.ControlSource = .Name & "!" & .Cells(r, 2).Address TextBox3.ControlSource = .Name & "!" & .Cells(r, 3).Address TextBox4.ControlSource = .Name & "!" & .Cells(r, 4).Address TextBox5.ControlSource = .Name & "!" & .Cells(r, 5).Address End With End Sub p.s. ControlSourceを設定すると指定したセルをダイレクトに変更するため、全部入力してから[変更実行]みたいな事ができません。

cheesepie
質問者

補足

素早いお返事ありがとうございます。 ControlSourceのプロパティが便利な理由を教えていただけると嬉しいです。 おっしゃるように表示はこれでできるようになりました。 Tabキーで入力項目に行くときに表示されました。 ユーザーフォームへは希望の値がテキストボックスに返ってくるので、そのまま下に Sheets("Sheet1").Cells(r, 3) = TextBox4.Text Sheets("Sheet1").Cells(r, 4) = TextBox3.Text Sheets("Sheet1").Cells(r, 5) = TextBox5.Text と付け足したのですが、旧単価と新単価をリンクとは入れ替えて表示したいため無理でした。 ですので、r = Application.Match(Val(TextBox1.Value), .Columns(1), 0) を別のボタンクリックの所で使用して行位置を取得しようとしましたが オブジェクトが指定されていないと、エラーになってしました。 頂いた回答を参考にしてなんとかならないものかと自分なりやっては見たのですが やはり知識が少なく上手くいきません。 なにか他にアレンジできる方法があれば教えて下さい。 よろしくお願い致します。

関連するQ&A

  • エクセルVBA ユーザーフォーム 検索

    現在VBAにてユーザーフォームにて入力したデータをシート1に転記するものを作成しました。 この転記したデータを生かして作業したいと考えております。 データは商品データで A    B C E F 商品コード 商品名  区分  単価  備考 となっており ユーザーフォームも TEXTBOX1=A TEXTBOX2=B と言う様になってます。 現在考えているのがこのデータの一部を変更したい場合、コマンドボタンを押すと商品コード入力用boxがでてきて、商品コードを入力するとA列から検索し該当する商品データをユーザーフォーム上に表示するようにしたいのです。 そのデータがA75行にあったとします。 そのユーザーフォーム上で単価を変更した場合検索した行(A75行)にそのまま上書きする様にしたいです。 説明がうまくできてないかも知れませんが、どなたかご教授願います。

  • エクセル VBA ユーザーフォームで検索したいのですが

    つい昨日触り始めた大初心者です。。 エクセルシートにて 数値を記した列と、詳細を記した列があります。 ユーザーフォームにて textboxに数値を入力し、ボタンをクリックすると 検索をして、ユーザーフォーム内のlabelに詳細が表示される、といったvbaを書いているのですが、どうにもうまくいきません。 また、textboxに検索範囲にない数値が入力されたときには Labelに「なし」と表示させたいのですが、 エラーが出てしまい、その処理もやはりうまく出来ません。 どなたかご教授いただけますでしょうか。

  • エクセル ユーザーフォームからデータに書き込む

    見積書とデータを連動させて自動入力していますが、 データベースのほうをユーザーフォームを作って入力させるつもりです。 その時、物件名は1つで製品名(内訳)が1種類から6種類くらいまで記入しなければいけない場合、 データベースのほうに、内訳の数だけ行を増やして書き込むにはどのようにしたらいいのでしょうか? 行を増やすという考えも、素人考えなので他に効率のいい方法が思いつかないのですが・・・。 ちなみにデータベースは、Aから 見積/請求/物件No/見積日付/正式名称/担当者/受注日/納品日/物件名/ 製品名/ 数量/単価/合計 製品名ごとに数量、単価、合計があるのでこちらにも反映してきます。 初心者のため、質問自体ちゃんとできているか不安ですがご教授くださいませ。

  • エクセルユーザーフォームのカーソル位置

    どうしても分からないのでお助け下さい(>_<) エクセルでユーザーフォームを作っています。 TextBox1に品番を入れたら、Label1に品名を表示させています。 このとき、TextBox1に存在しない品番を入力した場合は、 再度入れなおしをさせたいのです。 そこで、カーソルをもう一度TextBox1に持っていきたいのです。 しかし、どうやってもタブオーダーでTextBox1の次にあるTextBox2に カーソルが行ってしまいます。 どうしたらもう一度TextBox1にカーソルを持っていくことができますか? ちなみに品名を表示するモジュールを書いておきます。 このSetFocusが違うということは分かるのですが・・・。 Private Sub TextBox1_AfterUpdate() Dim tmp As Range, a a = Me.TextBox1.Value   Set tmp = Sheets(1).Columns(1).Find(a, , xlWhole)   If tmp Is Nothing Then     Me.Label1.Caption = "品番が誤っています。再度入力して下さい"     Me.TextBox1.SetFocus     Exit Sub   Else     Me.Label1 = tmp.Offset(0, 1)   End If End Sub

  • VBA_ユーザーホーム内の処理について

    エクセルでVBAを使用して、データ整理のためのツールを作っています。ユーザーホームを使って、作っているのですが、例えば、複数のCOMBOBOX(例:combobox1~3とします。)の選択値(例:1~3とします)の和をTEXTBOXかLABELでユーザーホーム内に表示したいのですが、どうも、うまくいきません。sheet(セル)にUPDATEした数字を読んできた和を表示するのではなく、単純に入力値の和を一時的に表示してくれればいいのです。つまり、何も入力されていない場合は、”0”と表示していて欲しいのです。同様に複数のTEXTBOX(例:TEXTBOX1~3とします)の入力値(例:1,3,5とします)の和(=9)をTEXTBOXかLABELでユーザーホーム内に表示したいのです。よろしくお願いします。コードを頂けると助かります。

  • ユーザフォーム上のVLookUp関数について教えていただきたいのですが。

    UserForm1にTextBox1とTexrBox2があり、 TextBox1に顧客コードを入力すると、勝手にTextBox2に顧客名が入るということがしたいのです。引っ張ってくるデータは実際UserForm1を実行するbook1のアクティブシートではなく、別のbook2.sheets("顧客リスト")から反映させたいのですが、可能でしょうか。TextBoxでなく、Labelでないと不可能なんでしょうか。 検索値=TextBox1.Value 検索範囲=Workbooks("顧客情報").Sheets("顧客リスト").Range("A:B") 列番号=2 計算方法=False といったかんじなのですが、どうかよろしくお願いいたします。

  • エクセル ユーザーフォームで小数点以下を・・・

    エクセルのフォームのTextboxで消費税の計算をしています。 その際に小数点以下を切り上げ及び切り捨てにしたいのですがどうしたらよろしいでしょうか? ちなみに入力と結果の出力はユーザーフォームのTextBoxにすべて表示しています。 TextBox1 入力する価格 TextBox2 消費税額 TextBox3 消費税込み価格 といった形です  よろしくお願いいたします。

  • ユーザーフォームへのデータ入力を繰り返す方法

    宜しくお願い致します。 ユーザーフォームへのデータ入力を繰り返したいのですが、うまく動いてくれません。 登録件数分データを入力(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にデータを入れることができません。 初歩的な質問で誠に恐縮ではございますが、どこを正せば動くようになるのか、ご指導の程宜しくお願い致します。

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

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

  • エクセルでユーザーフォームを開いても入力できません

    エクセルでユーザーフォームを作成し、商品コードを入力してマスタより内容の表示をさせるマクロを作成しました。 実行させるとフォームが開き商品コードでカーソルが点滅しているのですが商品コードが入力できません。しかしタイトルバーのところをクリックすると入力できます。どうもフォームが非活 性になっているように思えます。 ユーザーフォームはマクロでUSERFORM1.SHOWで開いています。原因がどこにあるかアドバ イスいただければ幸いです。 エクセルは2016、OSはWINDOWS7です。 宜しくお願い致します。