• ベストアンサー

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

redfox63の回答

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

コードのテキストボックスのChangeイベントで検索すればいいのでは たとえば コードテキストボックス : CodeText 新単価テキストボックス : NewPriceText 改定日テキストボックス : UpdateDateText 商品名ラベル      : NameLabel 単価ラベル       : PriceLabel データの記述してあるシート: 商品マスター といった名前だとします Sub CodeText_Change()   ' 検索二一致したセルを記憶する変数   dim r as Range   Set r = Worksheets("商品マスター").Range("A:A"). _     Find( CodeText.Text, MatchCase = False )   if r is nothing then     ' 検索したが コードが見つからなかった場合     Name.Label.Caption = "---"     PriceLabel.Caption = "---"     NewPriceText.Text = ""     UpdateText.Text = ""   else     ' 該当コードがある場合     ' 見つかったセルの隣のセルの内容をコントロール設定     ' この場合に Rangeオブジェクトの Offsetメソッドで指示     Name.Label.Caption = r.Offset(0,1).Value     PriceLabel.Caption = r.Offset(0,2).Value     NewPriceText.Text = r.Offset(0,2).Value     UpdateText.Text = r.Offset(0,4).Value   end if End Sub といった具合で検索出来るともいます 改訂 などのボタンを準備しておいて Sub Kaitei_Click() dim r as Range   Set r = Worksheets("商品マスター").Range("A:A"). _     Find( CodeText.Text, MatchCase = False )   if r is Nothing then     MsgBox "コードが見つかりません"     Exit Sub   end if   ' 単価を更新   r.Offset(0,2).value = NewPriceText.Text   ' 旧単価列を更新   r.Offset(0,3).Value = PriceLabel.Caption   ' 改訂日を更新   r.Offset(0,4).Value = DateValue( UpdateText.Text ) End Sub # エラー処理を何もしていないので 適宜書き加えてください # 日付がありえない日付であるとか、単価が金額として意味を成さない文字列であるとか # 必要な箇所のデータが入力されていないなど

cheesepie
質問者

お礼

何度か試行錯誤してきちんと指定ができていないのを発見しました。 ありがとうございました。

cheesepie
質問者

補足

素早いご返答ありがとうございます。 まさに改定ボタンを作って書換えしようと試みておりました。 そのため、検索するコードの行位置が欲しかったのです。 セル位置を検索して、Offsetを使うことは大変勉強になりました。 教えていただいたのをコピーして試したところ   Set r = Worksheets("商品マスター").Range("A:A"). _     Find( CodeText.Text, MatchCase = False ) のところで"型が一致しません”というエラーになるのです。 商品の追加のsheet1の商品のコードは数値の指定をして入ってる為かと思い、 Find の後の「CodeText.Text」をValやCIntやCLngでくくってみましたがどれも失敗しました。 どうしたらいいのでしょうか? またChangeイベントでコードが見つからなければ、変更のユーザーフォムは終了なのですが、 一文字入力するごとにイベントが発生するわけですからメッセージをだすと面倒になりますよね? 変更する商品のコードが見つからなければ、 商品追加のユーザーフォームをロードできたらと思っているのですが、 メッセージボックスと同じ理由で難しいのかなとあきらめています。 まずは、最初の所を何とかしなければなりませんのでお力を貸してください。 よろしくお願い致します。 ※補足ですが、sheet1のA~E列の商品のデータが入ってる部分には”商品一覧”と名前を入れてあります。

関連する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です。 宜しくお願い致します。