- ベストアンサー
[エクセルVBA]セルの値をテキストボックスに表示
- ユーザーフォームを使ってコンボボックスで指定した名前を検索値として、シートからセルの値を取得し、テキストボックスに表示する方法について教えてください。
- 現在、セルに入っている値の書式が「[h]:mm」の時間形式で表示されています。しかし、テキストボックスに表示すると小数点で表示されてしまいます。セルと同じ形式でテキストボックスに表示する方法を教えてください。
- format関数を使用してセルの値をテキストボックスに表示する方法を試してみましたが、うまくいきませんでした。どのように考えれば良いでしょうか?
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
方法1 textbox1 = format(application.vlookup(combobox1, worksheets("シート名").range("検索対象範囲"),列,false), "[h]:mm") 方法2 dim r as long r = application.match(combobox1, worksheets("シート名").range("左端列:列"), 0) ’★ textbox1 = worksheets("シート名").cells(r, "欲しい列番号").text ★言わずもがなですが range("A:A")のように列:列指定して検索すれば直接の行番号が取得できる range("A4:A10")のように範囲指定したときは,勿論その先頭セルからの移動量が取得される 方法3 dim h as range set h = worksheets("シート名").range("左端列").find(what:=combobox1, lookin:=xlvalues, lookat:=xlwhole) if not h is nothing then textbox1 = h.offset(0, 列数).text end if #各方法共通: Comboboxの値は「文字列」なので,シート上の「数値」を検索する場合は変換が必要です
その他の回答 (3)
- mt2008
- ベストアンサー率52% (885/1701)
ANo.1です。 何に困っているのかようやく判りました。 セルでは表示書式で24時を超える時間を表示できるが、VBAでは出来なくって困っているって事ですよね? 案1.Vlookupをワークシート上でやって、その結果セルのTextプロパティをTextBoxに入れる 案2.Application.WorksheetFunctionで24時を超える表示にしてしまう。 nRtn = Application.WorksheetFunction.VLookup(ComboBox1.Value, Sheets("○○○").Range("A3:G200"), 3, False) TextBox1.Value = Application.WorksheetFunction.Text(nRtn, "[h]:mm")
お礼
たびたびお手数をおかけしました、ありがとうございます。 案2がすごくわかりやすかったです。一度変数に格納してそれをのちに変更するという形ですね。 こういったこともできるのかと目からうろこが落ちる思いです。 今回はN0.3さんの案をいただきましたが、こういったアプローチも今後必要になってくるかもしれませんので、大切に脳内にとどめておきたいと思います。 ありがとうございました!
- imogasi
- ベストアンサー率27% (4737/17070)
VBAの質問らしいが、エクセルの基礎が判ってないのに、VBAなどやろうとしている。 (1)エクセルの時刻データの「セルの値」は24時間を1とする、小数点の値なのだ。 0.79166など当たり前。日付・時刻シリアル値のことが判ってない。 Googleででも照会して勉強のこと。 (2)関数でも出来ることをVBAなどでやってないか。関数は「セルの値」を判別・加工・計算するもの VBAでセルの値などを触るときも、普通は「セルの値」を扱っていることが多いので認識すること。 セルの持つ情報の多畳性(セルの値、標示形式、コメントなど色々あるのだ)を判っていなくて、セルの値と表示形式が分けて理解されていないのでは。 書式については関数では触れられない。だから書式は式を入れたセルに別途設定しないとならない。 ただしTEXT関数(VBAではFormat)で表示形式を適用した結果にすることは出来る。 例 A1:A2 1 00:30 1 0:30:00 2 01:30 2 1:30:00 D1:E2 1 0:30:00 2 1:30:00 ーーー B1セルに =TEXT(VLOOKUP(A1,$D$1:$E$2,2,FALSE),"hh:mm") 下方向に式を複写。 ,"hh:mm"の部分は自由に。 但しTEXT関数を使うと、全体が文字列になる。 そうしないでセルの標示形式の設定をやるほうが良い場合が多いと思う。
お礼
正直なところ、基礎がわかっていればこんな質問はしていませんし、あなたの仰っていることはわかっています。セルの値を扱っていることがわかっているが、セルの値をどう時刻表示に変えるかがわからないので教えてほしいということです。 そして、フォームを使ってきわめて一般的に表示をしたいので、エクセル上でVLookupを使うことができないんです。というかできればやっております。 ともあれ、ありがとうございました。
- mt2008
- ベストアンサー率52% (885/1701)
セルに表示したままの文字列をTextboxに入れたいなら TextBox1.Value = Worksheets(1).Range("A1").Text こんな感じでTextプロパティを使ってみてください。
お礼
早速のご返答ありがとうございます。 現在以下のような形になっております。 TextBox1.Value = Application.WorksheetFunction.VLookup(ComboBox1.Value, Sheets("○○○").Range("A3:G200"), 3, False) Textプロパティの挟みかたがわからず困っております。
お礼
ありがとうございます。 方法1が一番しっくりきましたので試してみたところばっちり動きました。VLOOKUP全体をフォーマット関数で規定すればよかったんですね!これで今後も応用できそうです。 方法2と3は、今回は上記操作を複数回行わなければいけない関係上、長さの面から私にはまだ早いと感じました。今後コードを熟読して理解していきたいと思います。 本当にありがとうございました! 追記 コンボボックスでは文字列を扱っているため、今回は問題なく検索できました。今後の参考にさせていただきます。