• 締切済み

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

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

みんなの回答

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

こんばんは! 外していたらごめんなさい。 ↓のような感じでしょうか? Private Sub CommandButton1_Click() If TextBox1 = "" Then TextBox2 = "" TextBox3 = "" TextBox4 = "" TextBox5 = "" Else TextBox2 = Cells(TextBox1 + 1, 2) TextBox3 = Cells(TextBox1 + 1, 3) TextBox4 = Cells(TextBox1 + 1, 4) TextBox5 = Cells(TextBox1 + 1, 5) End If End Sub Private Sub コマンド次へ_Click() If TextBox1.Value = 100 Then Exit Sub TextBox1.Value = TextBox1.Value + 1 If TextBox1.Value = 100 Then MsgBox "これが最初のデータです。" End If End Sub Private Sub コマンド前へ_Click() If TextBox1.Value = 1 Then Exit Sub TextBox1.Value = TextBox1.Value - 1 If TextBox1.Value = 1 Then MsgBox "これが最小のデータです。" End If End Sub 勝手にコマンドボタンのプロパティから オブジェクト名を「コマンド前へ」と「コマンド次へ」 にしています。 以上、参考になれば良いのですが 的外れならごめんなさいね。m(__)m

  • end-u
  • ベストアンサー率79% (496/625)
回答No.1

>「検索」のコマンドボタンを押すと、B列以降のデータが各テキストボックスに表示される。 これだけ。 Private Sub CommandButton1_Click()   Dim i As Long   Dim x, y   x = Me.TextBox1.Text   If Not IsNumeric(x) Then Exit Sub   x = CLng(x)   y = Application.Match(x, Columns("A"), 0)   If IsError(y) Then Exit Sub   For i = 2 To 5     Me.Controls("textbox" & i).Text = Cells(y, i).Value   Next End Sub こんな感じです。 >A列に1から100までナンバーが... これが行と対応してるならMatch関数を使わなくてもいいのでもっと簡単です。 ...Cells(x + 1, i).Value みたいにすれば良いでしょう。 いろいろと要望があるみたいですけど、 自分で理解しながら少しずつ工夫していくのも大事。 メンドくさいならユーザーフォームなんか使わない事です。 '標準モジュール Sub try()   Dim r As Range   With ActiveSheet     Set r = Intersect(.UsedRange, .Columns("A:E"))     If r Is Nothing Then Exit Sub     r.Name = "Database"     .ShowDataForm     Set r = Nothing   End With End Sub

関連するQ&A

  • Excelユーザーフォームでのデータ検索

    現在Excelマクロの勉強中ですが、ユーザーフォームでテキストボックスを4個とコマンドボタン1個を作成し、テキストボックス1にコードを入力してコマンドボタンを押すと、ワークシート(ワークシート名、住所録)に作成されたデータのA列からコードを検索(データは2行目から始まる)し、一致したデータのB列にある「名前」をテキストボックス2、C列の「住所」をテキストボックス3、D列の「電話番号」をテキストボックス4に表示する。 というマクロが書けず困っています。 わかる方教えてください。

  • エクセルのユーザーフォームについての質問です。

    エクセルのユーザーフォームについての質問です。 かなりの初心者です。 テキストボックスを3つ、チェックボックスを10個作りました。 チェックボックスは複数チェックすることができます。 コマンドボタンをクリックすると、テキストボックスに入力された値とチェックされた チェックボックスがsheet1に自動入力できるようにしたいです。 たとえば、 テキストボックス1には「あいう」 テキストボックス2には「かきく」 テキストボックス3には「さしす」と入力。 チェックボックス1から10のうち、「1」「2」「3」にチェック。 この状態でコマンドボタンをクリックすると、Sheet1には     A列       B列       C列        D列 1行目 テキスト1    テキスト2    テキスト3     チェックボックス 2行目 あいう      かきく      さしす       1 3行目 あいう      かきく      さしす       2 4行目 あいう      かきく      さしす       3 このように、チェックボックスにチェックがあった数だけ、テキストボックスも コピーされて、次々と下の行に入って行くようにしたいのです。 こんなことができるのでしょうか? できるのなら、コードを教えてください。 お願いします。

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

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

  • Excelユーザーフォームでのデータ検索

    初心者の質問で申し訳ございません。 ユーザーフォームを利用して検索ボタンを作ろうと考えています。 ユーザーフォームでテキストボックスを2個と コマンドボタン1個を作成し、 テキストボックス1に検索したい氏名を入力して コマンドボタンを押すと、 ワークシート(ワークシート名、データ)に作成されたデータのD列から 一致するものを検索し、 一致したデータのA列にある「番号」をテキストボックス2、 表示する。 というマクロが書けず困っています。 よろしくお願いします。

  • VBA; ユーザーフォームからの処理

    Excel 2007を使用しています。 下記のようなことを考えています。 1. テキストボックスにYYYY/M形式の日付データを入力 2. コマンドボタンを押下。 3. 日付データを確認 4. オリジナル(sheet1)の列値、日付データ(A列)、商品番号(B列)、商品名(C列)から条件に 該当した行をサマリー(sheet2)にコピー。 オリジナルの3行目のベッダー情報は先頭に置いて、その下に該当行を付ける。 オリジナルデータ; 注文日付 商品番号 商品名 2010/9 312000 ノコギリ 2011/12   542000 ハンマー . . . . . . 2014/5 312000 ノコギリ サマリー; 注文日付 商品番号 商品名 2010/9 312000 ノコギリ 2014/5 312000 ノコギリ ご質問; 1. 上記3、4の処理はコマンドボタンのクリックイベント処理として、まとめて 記述すれば 良いのでしょうか? 2. 日付データのオブジェクト名を"TextBox1"として、コマンドボタンのクリックイベント処理 など、これらの処理を行うにあたりサンプルなるコードはありませんか?   オリジナルの行数は変動します。 3. ユーザーフォームを作らずにシート上(shhet1)にテキストボックス、 コマンドボタンを作成できますか?   ありましたら方法を教えてください。 以上、宜しくおねがいします。

  • VBAのユーザーフォーム・・

    教えてください。 ユーザーフォームのテキストボックス・コンボボックスに入力した文字列をコマンドボタンを押したら、セルC1・B1に反映させたいのですが、できません。 このコマンドボタンには他のプログラムも入っており、同時にプログラムを実行したいのですが。

  • ユーザーフォームで登録する前に重複があるかチェック

    売上をユーザーフォームで登録出来るようにしたいのですが、テキストボックスを10個配置して、ボックス毎にシートに入力。 A列に登録ID、B列に日付、 C列に担当者番号 、D列からJ列まで他にデータを登録して、コマンドボタンで登録させてB列からD列が重複していたら、メッセージボックスに警告を表示させて登録せずに終了させたいのですが、出来なくて困っています。初心者なので解説付きでご教授いただければ幸いです。よろしくお願いします。

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

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

  • ユーザーフォームでの任意の文字を含む検索について

    初心者の質問で申し訳ございません。 ユーザーフォームを利用して検索ボタンを作りました。 ユーザーフォームでテキストボックスを2個と コマンドボタン1個を作成し、 テキストボックス1に検索したい氏名を入力して コマンドボタンを押すと、 ワークシートに作成されたデータのD列から 一致するものを検索し、 一致したデータのA列にある「番号」をテキストボックス2、 表示する。 このサイトで教えていただき、以下のようなプログラムで 検索することができました。 しかし、テキストボックス1の文字が完全に一致すれば結果は出るのですが、 文字を含むものを検索するように改良したいのですがどのようにすればいいのか 分からず困っています。 よろしくお願いいたします。 ************************** Private Sub CommandButton1_Click() Dim res  If TextBox1.Text <> "" Then   res = Application.Match(TextBox1.Text, Sheets("データ").Columns(4), 0)   If IsNumeric(res) Then    TextBox2.Text = Sheets("データ").Cells(res, "A").Value   Else    TextBox2.Text = "Not Found"   End If  Else   TextBox2.Text = ""  End If End Sub

  • VBA ユーザーフォーム

    エクセルVBAのユーザーフォームのInitializeでnに値を代入し Private Sub UserForm_Initialize() Dim n As Long n = 19 ・・・・・ End Sub 同じユーザーフォームのボタンコマンドが押されたら Private Sub CommandButton2_Click() MsgBox n Worksheets("AAA").Cells(n, 3).Value = Me.テキストボックスの値.Text n = n + 1 End Sub nの値を用いてセルにテキストボックスの値を入れるというプログラムです。 値をいれたら、nをひとつ増やして次に備えるようにしたいのですが。 そもそも最初にnの値が受け渡しできません。 ボタンコマンドの最初の行でメッセージボックスにnの値を表示して確認しても何も数字が表示されません。 nの値の受け渡しを方法を教えてください。

専門家に質問してみよう