• 締切済み

ユーザーフォームへの文字の表示方法について

VBAを始めたばかりの超初心者です。単純にユーザーフォームを作って検索ボタンを付け、検索結果を表示させる。こんな単純な事がわからずに困っています。 問題は何行もヒットしたらスクロールバーはどうするのか? 検索結果だけの部分をスクロールさせたい。 コントロールは何を張るのか?ラベル?テキストボックス? 検索したい情報はエクセルで有るのでそれを引っ張ってきたいだけなですが。。 出来れば同一のユーザーフォームに表示させたいです。 どなたか教えて下さい。宜しくお願い致します。

  • yocya
  • お礼率46% (6/13)

みんなの回答

  • Masa2072
  • ベストアンサー率51% (94/182)
回答No.4

そこまでフォームにこだわる理由は何なんでしょうか Excelのユーザーフォームってあまり大量データの表示に適したコントロールがありません。 コマンドボタンなどはワークシートに貼ることが出来ますので、一つのシートをフォームに見立てれば、データの表示に使うコントロールのことに頭を悩ませる必要がありません。 > コントロールは何を張るのか?ラベル?テキストボックス? この辺は結果をどう表示するか、どう扱うかに関わってきます。 ユーザーに編集させる必要があればラベルというわけにはいきませんよね。 ワークシートに「データ」という名前のシートを作り 名前,金額,日付 aaa,100,1月1日 bbb,284,4月3日 ccc,343,3月4日 ddd,322,4月7日 aba,245,7月4日 bcb,234,4月7日 cdc,444,8月3日 ded,1234,5月5日 aac,3435,9月21日 bba,234,12月24日 ccd,765,7月31日 ddc,543,8月16日 のデータをA1から順番に入力 UserFormを作成し テキストボックスを4つ、リストボックスを1つ(横幅を広めに) コマンドボタンを3つ、作成してください。 コードを表示し以下のソースを Dim Data As Object Dim RC As Object Dim Fst As Object Private Sub CommandButton1_Click()   Set RC = Data.Find(Me.TextBox1.Value, LookIn:=xlValues)   If RC Is Nothing Then     MsgBox "条件に一致するデータが見つかりません"     Me.TextBox2 = ""     Me.TextBox3 = ""     Me.TextBox4 = ""   Else     Set Fst = RC     Me.TextBox2 = RC.Offset(0, 0)     Me.TextBox3 = RC.Offset(0, 1)     Me.TextBox4 = RC.Offset(0, 2)     Me.CommandButton2.Visible = True   End If End Sub Private Sub CommandButton2_Click()   Dim YesNo As Integer   Set RC = Data.FindNext(RC)   If RC = Fst Then     YesNo = MsgBox("最終データです" & vbCrLf & "先頭から検索しますか?", vbYesNo)   End If   If YesNo = vbYes Then     Me.TextBox2 = RC.Offset(0, 0)     Me.TextBox3 = RC.Offset(0, 1)     Me.TextBox4 = RC.Offset(0, 2)   End If End Sub Private Sub CommandButton3_Click()   Set RC = Data.Find(Me.TextBox1, LookIn:=xlValues)   Set Fst = RC   Me.CommandButton2.Visible = False   With Me.ListBox1   If Not RC Is Nothing Then     .AddItem     .Column(0, 0) = RC     .Column(1, 0) = RC.Offset(0, 1)     .Column(2, 0) = RC.Offset(0, 2)     Set RC = Data.FindNext(RC)     Do Until RC = Fst       .AddItem       .Column(0, .ListCount - 1) = RC       .Column(1, .ListCount - 1) = RC.Offset(0, 1)       .Column(2, .ListCount - 1) = RC.Offset(0, 2)       Set RC = Data.FindNext(RC)     Loop   Else     MsgBox "条件に一致するデータが見つかりません"   End If End Sub Private Sub UserForm_Initialize()   Dim DataStart As Long   Dim DataEnd As Long   Me.CommandButton1.Caption = "検索"   Me.CommandButton2.Caption = "次へ"   Me.CommandButton3.Caption = "抽出"   Me.CommandButton2.Visible = False   DataStart = 2   With Sheets("データ")     DataEnd = .Range("A65536").End(xlUp).Row     If DataEnd = 1 Then       DataEnd = 2     End If          Set Data = .Range(.Cells(DataStart, 1), .Cells(DataEnd, 3))   End With End Sub 検索で Textbox1に入力された文字列が含まれたデータ(A列)を検索し Textbox2以下に表示します。 次へで 次に一致するデータを表示します。 抽出で Listboxにデータを抽出します。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

>ユーザーフォームに表示をさせたいだけなんです ばかり言っているが、それぐらい言うなら自分でやってみたら。 既出回答もそれなりのことを考えていっていますよ。 私がやってみてにヒント (1)テキストボックスでも、リストボックスでも出来る (2)テキストボックスの場合 プロパティで下記設定に注意    ・MultoLines=True ・EnterKeyBehavior=True ・ScrollBars=2 fmScrollBarsertical またはBoth ーーーーー 説明のためのテストをやってみました。 フォームのコマンドボタンのクリックイベントに Private Sub CommandButton1_Click() For i = 1 To 40 TextBox1.Text = TextBox1.Text & Cells(i, "F") & vbCrLf Next i End Sub を入れてクリックする。 その前に、F列に1-40行のデータを入れておく。そしてクリック。 テキストボックスには aaa bbb ccc ・・・ のように (1)明細は改行されて (2)明細が追加される (3)垂直スクロールバーも出てきた が出来ました。 ーーー 実際には コマンドボタンをクリックで、検索処理を始めて、検索して該当が見つかった都度 TextBox1.Text = TextBox1.Text & 検索結果 & vbCrLf をやって行けばよいでしょう。 >スクロールバーはどうするのか? 上記のようにプロパティを設定すると、多分該当行数が少なくても(Height=50で明細が4行でもバーが付いた)Vスクロールが付くようだ。 ーー 以上で聞きたいことは判ったかな。 >始めたばかりの超初心者です には先へ行き過ぎと思う。

  • Masa2072
  • ベストアンサー率51% (94/182)
回答No.2

条件にあったデータを抽出する方法はいくつかありますが ・1件毎にチェックしていく総当り ・オートフィルタの操作をマクロ化する ・データ表をデータベースとしてみなしADO接続でSQL文による抽出 などなど 結果はフォーム上に出すよりも、新規にワークシートを追加し、そこに転記するとスクロールバーなどの心配が要らなくなります。 初心者とのことですので、一度に欲張らずまずはワークシート上で全てを行う方法などから試していかれてはどうでしょうか http://www.google.co.jp/search?q=Excel+VBA+%E3%83%9E%E3%82%AF%E3%83%AD&lr=lang_ja&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ja:official

yocya
質問者

お礼

すみません。検索と書いたので誤解されてしまいました。 例えば、検索方法では無く、任意の検索では無いデータをエクセルに記載されてるデータを変数等に格納し、格納したデータを加工し同一のユーザーフォームに表示をさせたいだけなんです。 加工と行っても1+1をするくらいの単純な物で100行位あります。 それをユーザーフォームに表示をさせたい。のです。 引き続き宜しくお願いします。 説明が下手で本当に申し訳有りません。

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.1

>検索結果を表示させる。こんな単純な事がわからずに困っています。 何をどのように検索して表示するのか解りませんが、はっきり言ってそんな面倒な事はやりたくないです。 単純にやるなら、シートにオートフィルタを設定する方が遙かに簡単です。 まずは、検索マクロの動作を確認して、そこならどのようにしたら必要な情報を得る事ができるかを覚えましょう。 http://www.geocities.jp/happy_ngi/YNxv98c23.html

yocya
質問者

お礼

すみません。ワークシート等のシートは使わない方向です。 検索の方法では無く、単純にユーザーフォームに表示をさせたいだけなんです。早速のお返事有難う御座いました。引き続き宜しくお願い致します。

関連するQ&A

  • ユーザーフォームについて

    エクセル2002です。 ユーザーフォーム内のテキストボックスを使用して、 (1)A1のセルに1と入力されている状態でマクロを起動した場合、 (2)ユーザーフォーム内のテキストボックスには2と表示される (3)ユーザーフォーム内のボタンを押すと、A2のセルに2と入力される。 このような流れで、A列のデータ最終行に番号をふっていきたいです。 (A列のデータ最終行がA30なら、A31に31と番号をふる) ユーザーフォームのテキストボックスとボタンは作ってあるのですが、 それぞれに入れるコードを教えていただけないでしょうか。 よろしくお願いします。

  • ユーザーフォームのスクロールについて(エクセル2000VBA)

    お世話になります。 上下に長いユーザーフォームを作成し、スクロールして使っています。 1~4まで項目があり、ボタンをクリックするとその項目の先頭まで自動的にスクロールするような仕組みを作りたいのですがどうしたらよいでしょうか? Private Sub CommandButton1_Click()  TextBox1.SetFocus  '項目の先頭にあるテキストボックスに移動する End Sub という風なコードはできたのですが、ボタンの位置よりテキストボックスが下にあると、フォーカスしたテキストボックスがユーザーフォームの一番下に表示されてしまいます。 また、上方向にいく時も、テキストボックスの1行上に配置してあるタイトル(ラベルで作成しました)が表示されないので少し不便な気がします。 例えば、FAQサイトによくあるような、目次をクリックするとその項目が一番上に表示され、「Top」をクリックしてページ先頭にジャンプするような感じにしたいのですが…。 よろしくお願いします。

  • VBA ユーザーフォームを使って

    簡素化して書きますがエクセルシートのA1からZ100までデータがあります。(行は増え続けます) A1からZ1までの1行のデータをまとめて1画面に表示したくてユーザーフォームで作ってみました。(ラベル使用) ユーザーフォーム上で「次へ」ボタンを作成し、それをクリックすると次は A2からZ2までを表示させたいのですがやりかたがわかりません。 (また、「戻る」ボタンを作成し、それをクリックすると1行上へ戻るようにしたいです) VBAは初心者もいいところでネットで調べまくってやっています。 が、なかなか思うような結果にならずみなさんのお力をお貸しいただきたいと思います。 実際のデータは色々複雑なのでソースをあえて載せていませんのでご了承ください。 こういうやり方があるよって事を教えて頂けたらと思います。 よろしくお願いします。

  • ユーザーフォームのテキストボックスの内の値を検索する方法

    エクセルVBAのユーザフォームでテキストボックス内の値を検索したいのですが、どのように書いたら検索できるかわかりません。 検索をできるかもわかりません。 ※ユーザフォームの値はセルにセットしない形でお願いします。  直接テキストボックスの値を検索したいです。  検索の結果として返ってくる値は特になんでもいいです。 ご存知でしたらよろしくおねがいいたします。

  • ExcelVBAでセルをクリックしてユーザーフォームを表示するには

    OfficeExcel2003を使用しています。 ユーザーフォームのテキストボックスやコンボボックスに文字や数値を入力し、OKボタンを押せばエクセルのセルに記入できるようにしようと思ってます。 フォームはなんとか(形だけですが..)作成できたのですが、そのフォームを呼び出す方法として、入力したい行のA列のセルをクリックすればユーザーフォームが表示されるようにしたいのです。 ネット上でいろいろ検索してみましたがなかなか見つけることができませんでした。 初歩的な質問かもわかりませんが、教えて頂けないでしょうか。 宜しくお願い致します。

  • エクセルのユーザーフォームについて

    エクセルのユーザーフォーム上で テキストボックスなどはフォーカス移動すると 入力バーが出ますがチェックボックスに来ると選択されているのがわかりません ちなみにチェックボックスはチェックのみ表示(レ点部分)文字はラベルで表示(上に表示させたかったので) 選択されているかどうか網点?など解るようにするにはどうすればいいのでしょうか?ご教授お願い致します。。

  • ユーザーフォームを使った検索について

     仕事で使うために、VBAを勉強中ですが、検索の段階でつまずいてしまいました。自分なりに色々やってみたのですが、どうしてもうまくいきません。自分の知識不足が原因なのですが、どこをいじったらよいのかわからないでいます。  シート"一覧"にA列から整理No、職員番号、職種、氏名・・・・という風に、40列、130行程度データが入ります。 ユーザーフォームに複数のテキストボックスを作り、氏名を入力することで、任意のテキストボックスにその行のデータを返すようにしたいのですが、検索すると、アクティブセルの値が表示されます。  よろしくお願いします。

  • ユーザーフォームで教えてください。

    ユーザーフォームで教えてください。 エクセルシートで、A列に1から100までナンバーがあり、 B列~E列までデータが入っている表があります。 テキストボックスにナンバーを入力(もしくはスピンボタン)して 「検索」のコマンドボタンを押すと、B列以降のデータが各テキストボックスに表示される。 という形にしたいのですが、やり方が分からず困っています。 これまでは表の外に最初の行と最後の行を表示させて、 それを変数として扱い、「前」、「次」のコマンドボタンで1ずつ増減させて 表示していたのですが、ナンバーから直接表示させたほうが効率が良いと思いました。 (データが少ないときはよかったのですが。) 希望としては、 例としてテキストボックス1に「50」と入力する。(またはスピンボタンで50を選択) コマンドボタン「検索」でナンバー50のB列~E列のデータをテキストボックス2~5へ表示。 コマンドボタン「前」「次」を配置し、「前」でナンバー49、「次」でナンバー51のデータを表示。 1もしくは100(最後のナンバー)のときに「前」「次」を押してもデータは表示せず、 メッセージで「これが最初(最後)です」と表示。 という感じです。 できればでいいのですが、 ナンバー50のデータが表示された状態で、 B列以降のデータを直してナンバー50の行に上書きする「修正」、 表示された行を削除して1行上にずらす「削除」の コマンドボタンがあると助かります。 長くなってしまいましたが、よろしくお願いします。

  • Access VBA サブフォームのサイズ変更

    Access の VBA についてご質問させていただきます。 親フォーム名:F05_親画面 サブフォーム名:F03_入力画面 サブフォームには、左からラベルが1列、テキストボックスが10列の計11列で、50行分配置されています。 つまり、11列 × 50行の表みたいにしてあります。 親フォームにスクロールバーを配置しており、親フォームのスクロールバーから入力画面を上下にスクロールできるようにしています。 サブフォームのテキストボックスに内容を表示したあと、 内容を表示した最後の行 +1から50行目までを非表示にしたのですが、 非表示にした場所にスクロールが出来てしまい、何もない画面が出来上がってしまいました。 何もない部分にスクロールできないようにしたいのですが、どのようにすればいいですか?

  • VBA ユーザーフォームを速く開く方法について

    VBA ユーザーフォームを速く開く方法について 現在Excel2000を使用しています。 VBAにてユーザーフォーム1と2を作成して、ユーザーフォーム1のコマンドボタンを押すと userform2.showが実行されてユーザーフォーム2が開きますが、フォーム2にはテキスト ボックスなどが約400個程設置してあり、そのせいかフォーム2が開くのに約8~10秒程かかり ます。 そこでそのフォームを速く開きたいのですが、(1秒~2秒程で)どうしたら速く開くでしょうか? Application.DisplayFullScreen = Falseなどを使用しても余り効果がありません。 パソコン自体の処理速度もあると思いますが、できるだけ速くしたいです。 よろしくお願いします。

専門家に質問してみよう