プロが教えるわが家の防犯対策術!

書籍やインターネットををみながらユーザーフォームを作成し、前後への移動、
データ修正、新規作成、削除を行うことは無事にできるようになりました。

しかし、このままでは閲覧、修正がメインとなってしまい、
検索ができない為何とかできないものかと考えています。

A列 B列 C列    D列  E列
1  A  タイトル1 本文1 更新日
2  B  タイトル2 本部2 更新日
3  A  タイトル3 本部3 更新日

上記のようにシートに追記されていきます。
H2がデータ最終行となります。H1がユーザーフォームに表示されてる行です。

ユーザーフォームの情報は以下の通りです。
TextBox4・・・A列
ComboBox1・・・B列
TextBox1・・・C列
TextBox2・・・D列
TextBox3・・・E列

CommandButton1・・・前に移動
CommnadButton2・・・後ろに移動
CommandButton3・・・データ修正
ToggleButton1・・・新規作成
CommandButton5・・・削除
ToggleButton2・・・検索(を予定)


ユーザーフォームを起動するとSheetは非常時となります。
その中で各項目の入力や修正を行っております。
「検索」ボタンを取り付けてありますが、機能はしていません。


現在、希望している動作としまして、以下の通りです。

1.可能であればもう1つの検索ユーザーフォームを表示
 検索欄は1つ、ボタンも1つ。

2.入力した検索キーワードが含まれているデータを
 C列、D列から検索する。

3.最初のユーザーフォームに戻り、検索結果を確認が可能。

A 回答 (2件)

ユーザーフォーム上に、検索結果を表示するためのListBOXを配置した例です。


AddItemでリストに追加できます。
Private Sub CommandButton1_Click()
ListBox1.Clear'リストの内容をクリア
For i = 1 To 100
If Cells(i, 1) = 1 Then'A列が 1の場合
ListBox1.AddItem Cells(i, 2).Value'リストボックスにB列の値を追加
End If
Next
End Sub
    • good
    • 2

userform1のcommandbutton1 をクリックすると


userform1のtextbox1に書いたものを検索する例です。
 ここではなく標準モジュールに書いておいて
commandbuttonから呼び出すように変更することもできます。
検索でヒットするものが複数ある場合は
After:=Range("C2")ではなくAfter:=Activecell
などにしておかないと最初のものしか検索しません。

Private Sub CommandButton1_Click()
Sheets("sheet1").Range("C2:D8").Find(What:=UserForm1.TextBox1.Text, After:=Range("C2"), LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, MatchByte:=False, SearchFormat:=False).Activate
End Sub

この回答への補足

2つめのURLを削除されてしまいました。
今現在のコードは以下の通りです。
-----
Private Sub CommandButton1_Click()

If Cells(1, 8).Value > 2 Then
Cells(1, 8).Value = Cells(1, 8).Value - 1
End If

データ表示

End Sub
Private Sub CommandButton2_Click()

If Cells(1, 8).Value < Cells(2, 8).Value Then
Cells(1, 8).Value = Cells(1, 8).Value + 1
End If

データ表示

End Sub
Sub データ表示()

表示行 = Cells(1, 8).Value

ComboBox1.Value = Cells(表示行, 2).Value

TextBox4.Value = Cells(表示行, 1).Value
TextBox1.Value = Cells(表示行, 3).Value
TextBox2.Value = Cells(表示行, 4).Value
TextBox3.Value = Cells(表示行, 5).Value

End Sub

Private Sub CommandButton3_Click()

入力結果 = MsgBox("データを登録しますか?", vbYesNo)

If 入力結果 = 6 Then

If ToggleButton1.Value = True Then
表示行 = Cells(2, 8).Value + 1
Else
表示行 = Cells(1, 8).Value
End If

Cells(表示行, 2).Value = ComboBox1.Value

Cells(表示行, 1).Value = TextBox4.Value
Cells(表示行, 3).Value = TextBox1.Value
Cells(表示行, 4).Value = TextBox2.Value
Cells(表示行, 5).Value = TextBox3.Value

If ToggleButton1.Value = True Then
データクリア
TextBox4.Value = Cells(表示行, 1).Value + 1
Else
データ表示
End If

End If

End Sub

Private Sub CommandButton5_Click()

入力結果 = MsgBox("表示されているデータを削除しますか?", vbYesNo)

If 入力結果 = 6 Then

表示行 = Cells(1, 8).Value
Range(Cells(表示行, 1), Cells(表示行, 5)).Select
Selection.Delete shift:=xlUp

If Cells(2, 8).Value = 1 Then
ToggleButton1.Value = True
Else
If 表示行 > 2 Then
Cells(1, 8).Value = 表示行 - 1
End If
データ表示
End If
End If

End Sub

Private Sub CommandButton6_Click()
Unload Me
Application.Visible = True
End Sub

Private Sub ToggleButton1_Change()

If ToggleButton1.Value = True Then

データクリア
CommandButton1.Enabled = False
CommandButton2.Enabled = False
CommandButton5.Enabled = False
CommandButton3.Caption = "データ登録"

最終行 = Cells(2, 8).Value
If 最終行 = 1 Then
TextBox4.Value = 1
Else
TextBox4.Value = Cells(最終行, 1).Value + 1
End If

Else

CommandButton1.Enabled = True
CommandButton2.Enabled = True
CommandButton5.Enabled = True
CommandButton3.Caption = "データ修正"

Cells(1, 8).Value = Cells(2, 8).Value
データ表示

End If

End Sub

Sub データクリア()

ComboBox1.Value = "CSR"

TextBox1.Value = ""
TextBox2.Value = ""
TextBox3.Value = ""
TextBox4.Value = ""

End Sub


Private Sub CommandButton7_Click()
Sheets("QA").Range("C2:D8").Find(What:=UserForm1.TextBox2.Text, After:=Range("C3"), LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, MatchByte:=False, SearchFormat:=False).Activate
End Sub

Private Sub UserForm_Initialize()
Application.Visible = False
データ表示
End Sub
Private Sub UserForm_Terminate()
Application.Visible = True
End Sub

補足日時:2009/05/18 00:15
    • good
    • 1
この回答へのお礼

お忙しい中、ご返信をいただきましてありがとうございます。
早速、Sheets名、TextBox1を2にC2をC3に変更させていただき
設定してみたのですが、エラーとなってしまいました。

実行時エラー '91'
オブジェクト変数または With ブロック変数が設定されていません。

書籍やインターネットをみながら作ってみたコードが悪いために
このようなエラーが表示されてしまっているのでしょうか。

最初の質問の際、文字数が多いとのことで詳細まで書ききれず、
レスもつけられなかったため新規に作成したページにコードを
記載しています。

http://okwave.jp/qa4965208.html

お礼日時:2009/05/17 11:06

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!