• 締切済み

Excel2003 VB コマンドボタン

Excel2003 VB コマンドボタン VB初心者です。コマンドボタンをクリックしたら、テキストボックス1に入力してあるコードと一致する値を別シートのデータTBからvlookupで呼び出してテキストボックス2に表示したいのですが、うまくいきません。コードの例を教えていただけると助かります。よろしくお願いします。

みんなの回答

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.3

コードを拝見しましたが、特にエラーになりそうな箇所はないと思うのですが データTBですが A列は数値でしょうか?もしそうであれば txtname = Application.VLookup(txtcode * 1, Worksheets("材料TB").Range("A2:C65000"), 2, False) とtxtcode * 1 と無意味な掛け算でもしてみてください。 単に、txtcode が文字列で A列が数値だったりして?

全文を見る
すると、全ての回答が全文表示されます。
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

どこまでやってみたのでしょうか。判らないと早々に投げ出した感じです。 データ例も挙げてありません。判りやすい説明のためには、回答者が考えないといけないことになる。 「>vlookupで呼び出して」という考えが、関数を使う思考に囚われていると思われ、適当ではない。 VLOOKUPは指定範囲の該当の最初の行しか捉えられませんよ。 ーー ユーザーフォームにテキストボックス2つとコマンドボタンを1つ貼り付け、コマンドボタンのクリックイベントに Private Sub CommandButton1_Click() x = TextBox1.Text MsgBox x d = Range("A65536").End(xlUp).Row MsgBox d For i = 2 To d If Cells(i, "A") = Val(x) Then t = t & Cells(i, "B") & vbCrLf End If Next i TextBox2.Text = t End Sub のようなコードを書き実行する。 d = Range("A65536").End(xlUp).Row は最下行番号をさがす常套的なコードです。 ーー データ例は A,B列で コード 氏名 1 山田 2 大坂 3 木村 2 古谷 1 木曽 3 高山 2 志村 1 大津 と仮定して、 実行後テキストボックスに、例として「1」を入れてコマンドボタンをクリック。 確認用に(コードの)1や9(行)は表示され、テキストボックス2に 山田 木曽 大津 と表示されると思います。 ーー 注意事項はテキストボックスの値が文字列で返されること。 セルの値が数値ならテキストボックスの条件値をVALで数値化して比較すること。 上例では簡単のために該当分のB列データだけを表示しているが、それ以上を望むとか、 コード指定のチェックとかシートの指定とか、いろんなことが考えられるが、そういうことまでを 考慮して、質問文に表現し質問できてないですね。 該当行を探索する方法として、上記は基本的で初歩的な方法ですが、他にも考えられるので勉強のこと。 (フィルタなど)。 質問もExcelVBA(Aを入れる)の質問と表現したほうが良いと思う。

torikeratopusu
質問者

補足

ご回答ありがとうございます。 不慣れで具体的な質問をできず、申し訳ございません。なお、現状は次の通りです。 Sheet2(材料TB) A列 B列  C列 1  材料A  東 2  材料B  西 3  材料C  南 以下数百種 ユーザフォームに3つのテキストボックス(txtCode,txtName,txtClass)とコマンドボタンを配置 コマンドボタンに以下のコードを書いたところデバッグされてしまいます。 Private Sub CommandButton1_Click() '材料コードに一致する材料名と分類を表示 If Application.CountIf(Worksheets("材料TB").Range("A2:A65000"), txtCode) = 0 Then MsgBox "材料コードに一致する材料がありません。" Else txtName = Application.VLookup(txtCode, Worksheets("材料TB").Range("A2:C65000"), 2, False) txtClass = Application.VLookup(txtCode, Worksheets("材料TB").Range("A2:C65000"), 3, False) End If End Sub よろしくお願いします。

全文を見る
すると、全ての回答が全文表示されます。
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

コードの例は一つ,前回のご質問で書いておきました。 じゃぁ,また違う例を一つ書いてみましょうか。 Sheet1: A列 B列 ID 名前 private sub commandbutton1_click() textbox2 = application.vlookup(val(textbox1), worksheets("Sheet1").range("A:B"), 2, false) end sub あなたが今いったい ・シートとテキストボックスにそれぞれどんなデータを入れているのか ・どんなマクロを書いたのか ・実行してみたら意図と違うどんな結果が現れたのか そういった「今現在の具体的なエクセルの姿」を手抜きせずにご相談に書くようにしてみると,回答者側にも「あぁここで失敗してるな」とか「ここが合ってないな」といった事が判って「それだとここに問題があるからこうしましょう」と的確なアドバイスもすぐに寄せられます。 事実とは違う嘘情報を質問に書いてみたり,そもそも情報提供が無ければ,偶然上手く行っても次に失敗するか,何時までたってもあっちこっち迷走するだけです。

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

関連するQ&A

  • エクセル コマンドボタン

    1)Sheet1でコマンドボタンを作成。クリックするとフォームが表示さ  れます。そのフォームの中のテクストボックスに数字を入れ、それ  をSheet2のB2に挿入したいです。どうすればいいのですか? 2)Sheet2にコマンドボタンを作りました。Sheet2へ戻るようなボタン  を作りたいのですがどうすれば良いですか? 以上2つの質問です。是非教えてください。

  • VBでDosコマンドを動かすには

    VB6でDosのコマンドを入力して実行させたいと思っているのですが、どのように設定すればいいのでしょうか? わざわざVB6からDosプロンプトを起動させるわけではございません。 理想ではテキストボックスにコマンドを入力してボタンを押すと実行すると言う形にしたいのですが・・・。 ご存知の方ご指導よろしくお願いします たぶんAPIを使うのだと思いますがAPIまだまだ知識不足なので、分かりやすく解説していただければ助かります。 よろしくお願いします。

  • VBについて質問です

    VB2010でフォームデザイナーに、ツールBOXからテキストBOXとボタンを挿入します。テキストBOX内に数字を入力し、ボタンクリックで線がかけるようなプログラムを作成したいのですが、初心者で分かりません。コード等詳しく教えていただけないでしょうか。

  • Excel2003 コマンドボタンのプロパティ

    Excel2003 の vba の初心者です。 (Access2003 の vba の方が得意です。) 既に出来上がっているExcelのvbaを編集したいのですが、 コマンドボタンのプロパティが表示できません。 Accessであれば、コマンドボタンを選択して右クリックするとプロパティがあります。 しかし、Excelでは、コントロールツールボックスでデザインモードを押下し、 コマンドボタンを選択してコントロールツールボックスのプロパティを押下しても、 プロパティの一番上のプルダウンの所は「Sheet1 Worksheet」となっていて、 ▼を押下しても、他には何もありません。 どうも、Worksheetのプロパティが表示されているようです。 コマンドボタンのプロパティを表示させるには、どうすればよいのでしょうか。 基本的なことでお恥ずかしいですが、 ご教授いただければ幸いです。 よろしくお願いいたします。

  • VBで、開いているExcelシートのアクティブセルの情報を取得

    VBのモジュールで、開いているExcelシート上のアクティブセルの座標、値を 取得するにはどうすればよろしいのでしょうか。まずVBモジュールと参照対象のExcelシートを起動します。次ににExcelシート上のあるセルを選択し、VBモジュールの[セル情報]等のボタンにより、選択されているセルの座標、値をメッセージボックスに表示したいのです。よろしくお願いいたします。

  • VB.NETで起動したExcelの閉じ方について

    VB.NET(2003)でExce(2003)を起動し、そのシートに動的コマンドボタンを貼り付けました。 このコマンドボタンには、Excelを閉じ、COMオブジェクトの開放を行うコードを記述しています。 これでうまくExcelは閉じることが出来き、Excelのプロセスも残らないのですが、直接Excelの[×]閉じるボタンで閉じるとExcelのプロセスが残ってしまいます。 これを防止するにはどのようにすればよいでしょうか? どうかよろしく御教示ください。

  • コマンドボタン名の設定で

    お世話になります。 現在EXCELシート上に複数のコマンドボタンを置き、 そのコマンドボタン名をセルの値からとってこようとしています。 これがVBの考えでしたら ************************************************* Dim i as integer 'ループ用変数 '対象セルに値が存在しなくなるまでループ Do While Worksheets("Sheet1").Cells(i, 1) <> "" 'セルの値をコマンドボタン名に代入 Worksheets("Sheet1").CommandButton(i).Caption = Worksheets("Sheet1").Cells(i, 1).Value i = i + 1 Loop ************************************************* のようにできるのではないかと考え、いろいろと試行錯誤しているのですがうまくいきません。 VBAではこのようなやり方はできないのでしょうか? vbのように変数名でループさせるということは出来ないというような情報もあるのですが、出来ればこの考えに似たような感じのプログラムの組み方がしたいと考えております。 どなたかご教授よろしくお願いいたします。

  • EXCEL2003 VBAのテキストボックス

    ユーザーフォームからの入力・操作のみでシート上の住所録を編集出来るものを作ろうとしております。 テキストボックスの値の操作についての質問なのですが、端的に説明しにくいので自分で記述したコードと共に説明させていただきます。 シートはA列に氏名、B列に住所が入るようにし、100件のデータを格納出来るようにします。1行目はタイトルです。 セル範囲の名前は以下のように定義付けしています。  A2:A101 「氏名」  A2:B101 「住所録」 ユーザーフォームには以下のオブジェクトを配置しております。  「名前」入力・出力用テキストボックス(オブジェクト名:TB1)  「住所」入力・出力用テキストボックス(オブジェクト名:TB2)  名前検索用コンボボックス(オブジェクト名:CMB)  「追加」コマンドボタン(オブジェクト名:CB1)  「訂正」コマンドボタン(オブジェクト名:CB2) まずは新規データの入力。テキストボックス(TB1, TB2)に入力した後の「追加」コマンドボタン(CB1)クリック時の処理は以下のコードでうまくいっております。 Private Sub CB1_Click() Range("A65536").End(xlUp).Select Selection.Offset(1, 0).Select Selection = TB1 Selection.Offset(0, 1).Select Selection = TB2 Range("住所録").Sort _ Key1:=Range("A2"), _ Order1:=xlAscending, _ Header:=xlNo, _ OrderCustom:=1, _ MatchCase:=False, _ Orientation:=xlTopToBottom, _ SortMethod:=xlPinYin End Sub 同じテキストボックス(TB1, TB2)を使いデータの訂正をする為、コンボボックス(CMB)に以下のコードを記載しました。 尚、コンボボックスのRowSourceは「氏名」です。 Private Sub CMB_Change() Dim AA As String AA = CMB.Value TB1.Value = Application.WorksheetFunction.VLookup(AA, Range("住所録"), 1) TB2.Value = Application.WorksheetFunction.VLookup(AA, Range("住所録"), 2) End Sub これでコンボボックスで選択した名前からテキストボックスに名前と住所を表示することができました。 ここからが上手くいきません テキストボックスに表示された文字を同じテキストボックス上で変更し、変更後の情報を「訂正」コマンドボタン(CB2)クリックでシート上に送るために以下のコードを記述しました。 Private Sub CB2_Click() Dim BB As String BB = CMB.Value Dim CC As Range Set CC = Range("氏名").Find(what:=BB, LookIn:=xlValues, _ LookAt:=xlWhole, SearchOrder:=xlByRows) Cells(CC.Row, CC.Column).Select Selection = TB1 Selection.Offset(0, 1).Select Selection = TB2 Range("住所録").Sort _ Key1:=Range("A2"), _ Order1:=xlAscending, _ Header:=xlNo, _ OrderCustom:=1, _ MatchCase:=False, _ Orientation:=xlTopToBottom, _ SortMethod:=xlPinYin CBM.ListIndex = -1 End Sub これを実行してもシートには訂正後の情報が反映されず訂正前の情報が入ってしまいます。 ここで訂正後の情報を反映させるためにはどうしたらよろしいのでしょうか。

  • Excel2010のシート上にあるコマンドボタン等を右クリックすると

    Excel2010のシート上にあるコマンドボタン等を右クリックすると ここにコピー ここに移動 とか出て煩わしいです。 これを出なくする方法を教えて下さい。

  • VB6 コマンドボタン クリックイベントについて

    教えてください。 フォームに貼り付けているコマンドボタンのクリックイベントについてですが、クリックイベント内の処理で処理に時間がかかります。コマンドボタンを1度クリックすると、この処理を実行します。この状態であれば、問題ないのです。ところが、コマンドボタンを押して、処理している間にコマンドボタンを連打すると、ずーっと同じ処理を繰り返してしまいます。 クリックイベントが待ち行列にたまっているように思えるのですが、 これを回避する方法などがあれば教えてください。 ・待ち行列をクリアするとか ・待ち行列にイベントがたまっていても、1度しか実行しない。 などなど、具体的な方法とサンプルコードなどを教えていただけないでしょうか。お願いします。 環境VB6 WIN2K です。

T-P710BPT シリアル番号入らない
このQ&Aのポイント
  • パソコンにインストールできないトラブルの解決方法を探しています。
  • Windows10を使用しており、無線LANで接続しています。
  • ブラザー製品のT-P710BPTのシリアル番号が入力できません。
回答を見る

専門家に質問してみよう