エクセルVBAでフォームを作成して名簿番号を元に他の値を取得できない問題

このQ&Aのポイント
  • エクセルでフォームを作成している際に、フォームAのリストボックスから選択した名簿番号を取得し、フォームBに表示されている個人の詳細を取得しようとしていますが、うまくいきません。
  • フォームAのリストボックスにはsheet1の名簿が表示されており、クリックで選択した名簿番号を取得して、フォームBに表示されている個人の詳細を出そうとしています。
  • 名簿番号はフォームBの名簿番号テキストボックスに取得できますが、それを元にVLOOKUP関数で研究名を取得しようとしてもうまくいきません。VBAのコードのどこが間違っているのか分かりません。VBA入門者であり、助けていただけると嬉しいです。
回答を見る
  • ベストアンサー

エクセルでフォームを作成しています。(VBA)

エクセルでフォームを作成しています。(VBA) フォームAで作成してあるリストボックスから選択して 取得した番号を フォームBにもってきて、その番号をもとにVLOOKUPで ほかのテキストボックスに値を持ってこようとしている のですがうまくいきません。 フォームAのリストボックスにはsheet1の名簿が 表示されています。 クリックで選択した名簿番号を取得して、フォームBにある 個人のページでその他の詳細を出そうとしています。 名簿番号はフォームBの名簿番号.Textに持ってこれたのですが その名簿番号をVLOOKUPで研究名を出そうとしてもうまくいきません。 コードのどこがだめなのか分かりません。 VBA入門者です。 よろしくお願いいたします。 --------------------- Private Sub 決定_Click() Dim ADR As Variant On Error GoTo ExitER Set ADR = Worksheets("sheet1").Range("A:F") 研究名.Text = Application.WorksheetFunction.VLookup(名簿番号.Text, ADR, 4, False) On Error GoTo 0 Exit Sub ExitER: MsgBox "一致するコードがありません" On Error GoTo 0 End Sub ---------------------

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

  • ベストアンサー
  • myRange
  • ベストアンサー率71% (339/472)
回答No.1

名簿番号は恐らく数値でしょうから、 名簿番号.Textを数値に変換してからでないとダメでしょう。 例えば、Val関数で数値に変換して。。。 WorksheetFunction.VLookup( Val(名簿番号.Text), ADR, 4, False) また、CInt、CLngなどでも数値変換できます。   以上です。

norisukedon
質問者

お礼

なるほど! そうだったんですね。ありがとうございます。ちゃんと出てきました。 さらに質問してもよろしいでしょうか。 テキストボックスに表示したのは金額なのですが、文字として認識されてしまっているので これをケタ区切り?カンマ区切り?というのでしょうか、これに変えて表示させるには どのような方法でできますでしょうか? すみませんが教えてください。

その他の回答 (1)

  • myRange
  • ベストアンサー率71% (339/472)
回答No.2

またまた登場、myRangeです。 >テキストボックスに表示したのは金額なのですが >文字として認識されてしまっているので >これをケタ区切り?カンマ区切り?というのでしょうか >これに変えて表示させるにはどのような方法でできますでしょうか?   ちょっと勘違いがあるようです。 TextBoxの値は、桁区切りにしたとしても文字列のままです。 TextBoxの値で計算をしたければ、その時点で数値に変換して計算します。 ---------------------------------------------------- ●TextBoxの桁区切り表示方法   Kingaku = 35000   TextBox3.Text = Format(Kingaku, "#,##0") 小数点2桁なら   TextBox3.Text = Format(Kingaku, "#,##0.00") ---------------------------------------------------- ●Textbox3の値をCDblで数値に変換後計算する   Gokei = Gokei + CDbl(TextBox3.Text)   TextBox3が3桁区切りの時の数値変換は、Valではダメ。 ▼CDbl,CLngなどはヘルプで調べること。 ---------------------------------------------------- 以上です。    

関連するQ&A

  • エクセル2003でフォームを作成しています(2)

    エクセル2003でフォームを作成しています(2) ネットワーク上にある社員名簿.xlsの情報を使って、フォーム上で ぶっちゃけて言えばお金を使い過ぎていないかのチェックをします。 エクセルのワークシート上でやればいいと思うかも知れませんが 社員名簿.xlsは専用端末からおとしたいくつかのcsvを加工した ものから作成するので、ファイル名だけは常に同じですが、ボタン などは設置出来ないので、フォームを作成してデータだけを ひっぱってくることにしました。 詳細画面フォーム上の検索ボタンを押すと、 社員名簿.xlsのデータを元に作成したリストボックスの貼り付いた 別フォームが開き、該当者をクリックすると別フォームは閉じられ、 詳細画面フォームに社員名簿の情報がそれぞれのテキストボックスに 反映される、ということがまずやりたいのです。 別フォームにリストボックスを貼り付けたのは、それしかやり方を 知らないからです。 ※コンボボックスで作成していましたが、変更しました。 判定額というのは、ここまではOKという金額が総計を元に計算される 仕組みになっています(これからします)。 その下の小さなテキストボックスには判定額と総計を比べてOKか否か の何かを出すようになっています(これもこれからします)。

  • ACCESS VBAについて

    accessフォームにて実験データを入力するシステムを考えています。 添付画像のように空白のフォームに3つのサブフォーム(A.B.C)を設置しています。 動きとしては空白フォームに非連結のテキストボックス(日付カレンダー)があり、日付を変えるとフォームAのリストがその日付のサンプルリストが抽出されます。 次にフォームAの帳票リストのレコード選択するとそのレコードのSampleIDを参照してフォームBおよびフォームCのリクエリをかけたいのですがフォームBは連動するのですがフォームCが連動しません。 vbaは独学でしており、コードもネットからコピペばかりです(汗) エラーが出て、どう対処していいのかわかりません、 ご教授お願いいたします。 参考コード フォームAのレコードが選択(更新)する際のイベントです。 Private Sub Form_Current() SampleIDtemp = Me.TextSampleID.Value On Error GoTo KAIHI1 Forms(Screen.ActiveForm.Name).Controls("B").Form.RecordSource = "SELECT * FROM B WHERE B.SampleID = " & SampleIDtemp & ";" Forms(Screen.ActiveForm.Name).Controls("B").Form.Requery KAIHI1: On Error GoTo KAIHI2 Forms(Screen.ActiveForm.Name).Controls("C").Form.RecordSource = "SELECT * FROM C WHERE C.SampleID = " & SampleIDtemp & ";" Forms(Screen.ActiveForm.Name).Controls("C").Form.Requery KAIHI2: End Sub ちなみにいくつか出たエラーを示します (1)実行時エラー'2475': 指定した式では、フォームがアクティブウィンドウである必要があります。 (2)実行時エラー'2450': 参照されているフォーム'A'が見つかりません。

  • エクセルVBAのユーザーフォーム上のテキストボックスについての質問です

    エクセルVBAのユーザーフォーム上のテキストボックスについての質問です。 Aのユーザーフォームの内容をBのユーザーフォームのテキストボックスへ引き継いで、Bのユーザーフォーム上で内容を編集するという仕組みにしたいのです。 Bのユーザーフォームは新規入力もかねたユーザーフォームなので、テキストボックスのイベントにAfterUpdateを使用して、テキストボックスの内容が書き換えられるとデータベースから検索して新規か既存か判断させています。 AのユーザーフォームからBのユーザーフォームのテキストボックスへ引継ぎさせるときにこのAfterUpdateを発生させたくないのですが、Application.EnableEvents=Falseなどを使ってもイベントが発生してしまいます。 また、イベントがどのタイミングで発生するかと、コードをステップで実行させると、このイベントは発生しません。そのために、いきづまってしまいました。 AのユーザーフォームからBに引き継ぐ処理  ユーザーフォームB.Load ---ユーザーフォームBのイニシャライズが実行される  ユーザーフォームB.テキストボックス = ユーザーフォームA.テキストボックス  ユーザーフォームB.Show ちょっと簡単に書きすぎですがこんな感じです。 コードをステップで実行するとユーザーフォームBのAfterUpdateは実行されません。(VBAエディタのバグ?) どなたか回答お願いします。

  • エクセル VBA フォーム設定について

    いつもお世話になっています。 エクセル VBAでユーザーフォームについて教えてください。 あるシートのデータをフォームに読み込み、違うシートにそのデータを書き込んでいます。元データの列順と書き込むシートの列順が違うので、VBAで設定して使っています。 書き込みはうまくいっています。ただ、書き込む際にフォーム上で少しデータを修正して書き込みを行うのですが、編集したいフォーム上のテキストボックスをクリックすると、データの最後のほうにカーソルが飛んでしまいます。 テキストボックスをできるだけ大きくして対応していますが、限度があります。テキストボックスをクリックした際にデータの最後(文字データで言うと文章の最後を表示してしまう)まで動かずに、クリックしても先頭のままになるようにするにはどうすればいいのでしょうか。 同じように、コンボボックスもクリックするとリストの最後から表示されます。リストの先頭から表示させる方法を教えてください。

  • エクセルvbaのフォームでエラーとなります

    ワークシートにIDと名前の対応表があります。 別のシートのA1に検索したいID欄、A2にVLOOKUP関数で結果を表示させています。 VBAの入力フォーム上で、あるIDを入れたときに前途のA1に数値を代入し、A2で得られた結果をフォーム上の欄で取得するようにしています。 この時、表の中に対応する番号と名前があればキチンと結果が出ますが、そもそもデータベースが無ければVBA自体がエラーとなってしまいます。 ワークシート上のVLOOKUPには近似値では困るのでFALSEを指定していますので、該当番号がなければここでの結果は#N/Aとなっています。 フォーム上で該当番号がなければ代わりの文字列、たとえば「なし」などを入力されるようにできるか、最低でもプロセスが中断される事がないようにしたいのですが、どのようにすれば可能でしょうか?

  • エクセルVBAについて質問です。

    エクセルVBAについて質問です。 シート1のユーザーフォームにコンボボックスとテキストボックスが各1つずつ、 シート2のA列には1行目から順に「あ」「い」「う」と文字が入っていて、B列には「1」「2」「3」と値が入っています。 コンボボックスのリストにはシート2のA列の文字が選択できる状態にあります。 この状態で、例えばコンボボックスで「い」を選んだら、テキストボックスに自動的に「2」と入る、というように、コンボボックスのリストの中から任意の文字を選択したときに、テキストボックスにB列の値が入るようにするにはどのようにすればいいのでしょうか?よろしくお願いします。

  • VBAにてフォームコントロールの変更

    VBAでフォームコントロールのチェックボックスのON・OFFを変更することは可能でしょうか。 具体的にはA.xlsmのマクロを実行して、 A.xlsmのセルA1が0ならB.xlsの"チェック 1"がOFF状態に。1ならON状態になる。 以上のような仕組みを作りたいです。 (フォームコントロールなのは様式(B.xls)がフォームコントールで作成されており、変更不可のため) ですが、同じシート内でもチェックボックスのON・OFFができずに挫折しそうです。 まずは同一シート内で作ってみようと思い下記コードを作成したのですが、 ”SubまたはFunctionが定義されていません”となってしまいます。 Public Sub test() If Range("A1") = 0 Then CheckBoxes("チェック 1").Value = False ElseIf Range("A1") = 1 Then CheckBoxes("チェック 1").Value = True Else MsgBox "無効な値が設定されています" End If End Sub エラーは”CheckBoxes”のところで出てしまいます。 どなたかご教授ねがいます。

  • エクセルVBA フォームのDropDownのリストが幾つあるか取得するには?

    いつもお世話様です。エクセル2000です。 コントロールツールボックスではなく、フォームのコンボボックス(DropDown)のリストが幾つ設定してあるかをVBAで取得する方法を教えてください。ためしに下記のようにやったらエラーでした。 Sub TEST01() MsgBox Worksheets("入力").DropDowns("Drop Down 1").ListIndexes.Count End Sub

  • EXCEL ユーザーフォームの2つのtextboxの値で検索

    久しぶりの投稿です。 今、EXCELのユーザーフォームのVBAで行き詰ってます。 お分かりの方宜しくお願いいたします。 まず、EXCELのシートが下の様にあります。   A        B         C         D 1 得+支店 得意先コード  支店コード     得意先名 2 1030401   10304         01         XXX乳業 3 20000    20000                   XXX商事本店 4 2000001    20000          01         XXX商事 A支店 (AのセルはB&Cで)   textbox1に得意先コード textbox2に支店コードを入力してコマンドボタンを押したら textbox3に得意先名を表示させるという事がしたいのですが 支店コードが入ってる時はよいのですが入ってない時 実行時エラー’1004’ WorksheetFunctionクラスのVLookupプロパティを取得出来ません。 となってしまいます。 VBAは下の様になってます  Private Sub CommandButton1_Click()   Set ADR = Worksheets("sheet1").Range("A2:C4") TextBox3 = Application.WorksheetFunction.VLookup(TextBox1 + TextBox2, ADR, 4, False) End Sub

  • Application.WorksheetFunction.VLookupがどうしても出来ないです。教えて下さい。

    前回も問い合わせさせていただいていますが 少し私の言っている問い合わせと意味合いがちがうのでもう一度投稿させていただきます。     A      B     C      D 1 15001    15001       A社 本店 2 1500101  15001    01 A社 A店 3 15002   15002       B社 本店 4 1500202    15002 02       B社 B店 上記のようにSheet1があります。  A列のセルは 式で B & CでSETしています。 ユーザーフォームのTextbox1は得意先コード textbox2は支店コード textbox3に店名 textbox1とtextbox2を入力してコマンドボタンを押すとtextbox3に店名をsetすると言うことがしたいんですが支店コードの入っている店名はひっぱってくるのですが 支店コードのないものの店名が表示されません。 Private Sub CommandButton1_Click() On Error GoTo ExitER Set ADR = Worksheets("sheet1").Range("A1:D4") TextBox3 = Application.WorksheetFunction.VLookup(TextBox1 & TextBox2, ADR, 4, False) On Error GoTo 0 Exit Sub ExitER: MsgBox "一致するコードがありません" On Error GoTo 0 End Sub エラーの部分は前回の質問の時に教えて頂いたものです。 どうしてもわからないのでお分かりの方お教えください。  

専門家に質問してみよう