エクセルVBAでフォームを作成して名簿番号を元に他の値を取得できない問題
- エクセルでフォームを作成している際に、フォーム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 ---------------------
- norisukedon
- お礼率28% (4/14)
- オフィス系ソフト
- 回答数2
- ありがとう数6
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
名簿番号は恐らく数値でしょうから、 名簿番号.Textを数値に変換してからでないとダメでしょう。 例えば、Val関数で数値に変換して。。。 WorksheetFunction.VLookup( Val(名簿番号.Text), ADR, 4, False) また、CInt、CLngなどでも数値変換できます。 以上です。
その他の回答 (1)
- myRange
- ベストアンサー率71% (339/472)
またまた登場、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'が見つかりません。
- 締切済み
- Access(アクセス)
- エクセル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列の値が入るようにするにはどのようにすればいいのでしょうか?よろしくお願いします。
- ベストアンサー
- Visual Basic
- 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”のところで出てしまいます。 どなたかご教授ねがいます。
- 締切済み
- Visual Basic
- エクセル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
- ベストアンサー
- Visual Basic
- 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 エラーの部分は前回の質問の時に教えて頂いたものです。 どうしてもわからないのでお分かりの方お教えください。
- ベストアンサー
- Visual Basic
お礼
なるほど! そうだったんですね。ありがとうございます。ちゃんと出てきました。 さらに質問してもよろしいでしょうか。 テキストボックスに表示したのは金額なのですが、文字として認識されてしまっているので これをケタ区切り?カンマ区切り?というのでしょうか、これに変えて表示させるには どのような方法でできますでしょうか? すみませんが教えてください。