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

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

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.最初のユーザーフォームに戻り、検索結果を確認が可能。

このQ&Aに関連する最新のQ&A

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に関連する人気のQ&A

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

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QAccess2007のフォームウイザードでデータシートを作りたいが方法が分からない

Access2003では、フォームウイザードでデータシートを作れたが。
Access2007では、フォームウイザードでは単票のフォームしか作れない様だ。

どうやって、作るのだろうか。操作が分からない。

Aベストアンサー

どういう帳票が欲しいかわかりませんが一応例として....
まずAccess上部にある作成をクリックします。
フォームウィザードをクリックして使用するテーブルとフィールドを選択します。
次に表形式を選択すれば帳票形式でフォームが作成されます。

もう1つはその他のフォームから複数のアイテムを選択すれば帳票形式でフォームが作成されます。

Qシート1のA列にある会社名を探してB列にある住所が入力されたら、シート2のB列に○を付けたい

シート1
A列        B列
株式会社A     東京都町田市…
株式会社B     
株式会社C     北海道札幌市…
↓↓↓↓↓
シート2
A列        B列
株式会社C     ○
株式会社A     ○
株式会社B

上記のように表示したいです。
できれば、関数でできれば助かります。

追加:シート2の会社名はシート1の会社名と順番が違います。

よろしくお願いします。

Aベストアンサー

こんばんは!

↓の画像でSheet2のB2セルに
=IFERROR(IF(VLOOKUP(A2,Sheet1!A:B,2,0)<>"","○",""),"")
という数式を入れフィルハンドルで下へコピーしています。m(_ _)m

Q【Access】複数フォームを閉じる時の、選択処理について

Access Ver. : 2003
Windows Ver.: XP

Accessフォームの「閉じる時」処理で、下記のような工夫をした
いと考えております。

・フォームがひとつしか開かれていないとき、Accessを終了する
・複数のフォームが開かれている時、そのフォームのみを閉じる

そんなVBAコードがありましたら、教えてください。
何か参考になるページでも、かまいません。
どうぞ、宜しくお願いいたします。

Aベストアンサー

forms.count で開いているフォーム数を得て分岐
Application.quit

Access VBE のヘルプで、CurrentProject オブジェクト を見てみたら?

QエクセルのワークシートAの1列目(A列)の日付と、ワークシートBの1列

エクセルのワークシートAの1列目(A列)の日付と、ワークシートBの1列目(A列)の日付を一致させて1つのワークシートに纏める方法を探しています。

2つの時系列データがあるのですが、データA(為替データ)とデータB(株式データ)のデータ管理方法が下記のように異なっています。

データA(為替データ)・・・1週間のうち6日間(月曜から土曜まで)
データB(株式データ)・・・1週間のうち5日間(月曜から金曜まで)

おのおのワークシートのA列に日付が入っています。

データAは月曜から土曜までなので、1週間に6行要します。データBは月曜から金曜なので1週間に要するのは5行です。従って、単純にこの2つのデータを張り合わせるだけでは(データBをデータAのシートに張り合わせた時)、1週間に要する行数が違うので1行ずつずれてしまいます。

1週間に要する行数の違いだけでなく、マーケットが休みの日はデータそのものがないため日付が存在しません。(マーケットの休みもおのおの別の日でバラバラです。)

これらの理由により、ただ単に張り合わせるだけだとずれが広がるばかりです。

そこでデータAの日付とデータBの日付を認識して一致させる関数を教えて欲しいと思います。

データAの構成はA1=日付、B1=始値、C1=高値、D1=安値、E1=終値で、データBの構成も同じです。
データAのF1にデータAのA1と同じ日付のデータBの行を貼り付るように設定したいと思っています。

説明が分かり辛い場合は補足しますので、その際はご指摘下さい。

宜しくお願いします。

エクセルのワークシートAの1列目(A列)の日付と、ワークシートBの1列目(A列)の日付を一致させて1つのワークシートに纏める方法を探しています。

2つの時系列データがあるのですが、データA(為替データ)とデータB(株式データ)のデータ管理方法が下記のように異なっています。

データA(為替データ)・・・1週間のうち6日間(月曜から土曜まで)
データB(株式データ)・・・1週間のうち5日間(月曜から金曜まで)

おのおのワークシートのA列に日付が入っています。

データAは月曜から土曜までなので、1...続きを読む

Aベストアンサー

誤記がありましたね。ごめんなさい。

シートCのA2に
2010/1/1
を置いて下向けにえいやっとオートフィルドラッグ,365日の日付を並べておいて
B2:為替
=IF(COUNTIF(為替!$A:$A,$A2),VLOOKUP($A2,為替!$A:$E,COLUMN(B2)),"")
を右に下にコピー。
F2:株式
=IF(COUNTIF(株式!$A:$A,$A2),VLOOKUP($A2,株式!$A:$E,COLUMN(B2)),"")
を右に下にコピー。

これでマーケットの開いてなかった日付がエラーになることもありませんので,追加のご質問も解消でしょうか。

QACCESSフォームのボタン表示

ACCESSフォームのボタン表示

ACCESS2000で作成したフォームのボタンはACCESS2007でも変わりません。
ACCESS2007で一から作成したMDBは、ボタンの表示スタイルが異なります。
※ボタンの角が丸く、マウスカーソルをボタンの上に当てるだけで色が変わる。
ACCESS2000で作成したMDBをACCESS2007で上記のように表示させる設定は
あるのでしょうか?
いろいろ見ても、見当たらないのです。
よろしくお願いします。

Aベストアンサー

[Office ボタン] - [Accessのオプション] - [カレントデータベース] で
「フォーム上のコントロールに Windows のテーマを使用する」にチェック。

QExcel2013 VBA A列とB列の文字をA列とB列とC列に移動させる方法

A列とB列に文字が入っているのですが、下記のようにA列とB列とC列に文字を移動させたいです。
(A列の数字は必ず奇数のA列に入っています。)
VBAのコードを教えて下さい。

例えば
A1 1  B1 cat
A2 空白 B2 猫
A3 空白 B3 dog
A4 空白 B4 犬
A5 2  B5 whale
A6 空白 B6 クジラ
A7 3  B7 rabbit
A8 空白 B8 ウサギ

とデータがある場合

A1 1  B1 cat  C1 猫
A2 空白 B2 dog  C2 犬
A3 2  B3 whale  C3 クジラ
A4 3  B4 rabbit C4 ウサギ

としたいです。

実際、データは、A5196まであります。

Aベストアンサー

No.1です。

>実際、データは、A5196まであります。

前回のコードは一つずつカット&ペーストしていますので
かなりの時間を要すると思います。
↓のコードに変更してみてください。

Sub Sample2()
Dim lastRow As Long
lastRow = Cells(Rows.Count, "B").End(xlUp).Row
Application.ScreenUpdating = False
With Range(Cells(1, "C"), Cells(lastRow, "C"))
.Formula = "=IF(MOD(ROW(),2)=1,B2,"""")"
.Value = .Value
.SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End With
Application.ScreenUpdating = True
MsgBox "完了"
End Sub

少しは短縮できると思います。m(_ _)m

No.1です。

>実際、データは、A5196まであります。

前回のコードは一つずつカット&ペーストしていますので
かなりの時間を要すると思います。
↓のコードに変更してみてください。

Sub Sample2()
Dim lastRow As Long
lastRow = Cells(Rows.Count, "B").End(xlUp).Row
Application.ScreenUpdating = False
With Range(Cells(1, "C"), Cells(lastRow, "C"))
.Formula = "=IF(MOD(ROW(),2)=1,B2,"""")"
.Value = .Value
.SpecialCells(xlCellTypeB...続きを読む

QExcelで作成されたフォームをAccessにコンバージョンしたいので

Excelで作成されたフォームをAccessにコンバージョンしたいのですが、フォームのインポートはできないのでしょうか?
Accessのフォーム作成画面から、インポートを選択していって、Excelファイルを開くのですが、シートしか選択できません。
コントロールのコピペもできないみたいですが。。。
Excelで作成されたフォームはAccessにはインポートできないのですか?
コーディングをそっくり使用することはできなくても、せめてフォームのデザインはコピーしたいのですが。。。(> <)
よろしくお願いします。m(_ _)m

Aベストアンサー

質問者はプロかプロ経験者ですか。でないならこんな勉強は試みないほうが良いでしょう。
市販の書物や初心者向けの講習で説明される話題ではない。プロで会社にその辺の経験者がいたりすれば聞けるでしょうが。原理的には最熟練者の人は変換プログラムは組めるかもしれませんが、そのレベルの人は、この質問コーナーを読んでないでしょうし、無料で教えるスキルではないと思います。
WEBの記事も多分少ないでしょう。
Googleででも「エクセル フォーム アクセス 移行」で出てくる記事を参考にしてはどうでしょう。
http://www.accessclub.jp/bbs2/0080/beginter24987.html
同じ発想の人はいることはいるが。
ーー
VBAとVBのフォームはコードで扱う上で微妙に違うし、アクセスVBAとエクセルVBAでは違う点も多い。
またコントロールの生成もコードで行う方法は隠して、易しいD&Dやマウスによる移動、プロパティボックスでの入力にして易しくしています。
エクセルのUserForm1のフォームも本格的なものではないサービスのような気がする。エクセルで第3者を巻き込んだ業務の開発までは予定して無いように推測する(何でもエクセル的な過大期待が横行している)。
それにエクセルでのセルとの連携をつけた機能LinkedCell、FillいstRangweなどはエクセル特有で、RecordSourceのSQL指定やフォーム指定はアクセス特有と思います。
外観を決めるサイズや書式関係は(エクセルでフォームやコントロールの)プロパティーメモー(アクセスでのフォームやコントロールの)プロパティ設定でやや似せて移せるかもしれない。
エクセルバージョン内の相違、エクセル・アクセルで使えるコントロールの種類の相違などもあります。

質問者はプロかプロ経験者ですか。でないならこんな勉強は試みないほうが良いでしょう。
市販の書物や初心者向けの講習で説明される話題ではない。プロで会社にその辺の経験者がいたりすれば聞けるでしょうが。原理的には最熟練者の人は変換プログラムは組めるかもしれませんが、そのレベルの人は、この質問コーナーを読んでないでしょうし、無料で教えるスキルではないと思います。
WEBの記事も多分少ないでしょう。
Googleででも「エクセル フォーム アクセス 移行」で出てくる記事を参考にしてはど...続きを読む

QエクセルでB列の数値がA列(A1:A10)の範囲に存在するかどうかを知りたい

こんばんは。
エクセルでこのようなことができるのかどうか分からないので、教えてください。

B列の数値がA列(A1:A10)の範囲に含まれる数値なら○、含まれない数値なら×と、C列に表示したいのですが、エクセルでそのようなことはできるのでしょうか。
できるのであれば方法を教えていただけますでしょうか。
よろしくお願いいたします。

<<最終的な結果は以下のように表示したいです>>

  A B C

1 12 19 ○

2 15 20 ○

3 19 28 ○

4 20 30 ×

5 23 34 ○

6 28 35 ×

7 32 38 ×

8 34 39 ○

9 39

10 40

Aベストアンサー

セル C1 に式 =IF(COUNTIF(A:A,B1),"○","×") を入力して、此れを下方にズズーッと複写

QVBからmdbファイル(Access2000)の特定のフォームを開きたい?

VisualBasicのフォームに配置したコマンドボタンをクリックすることで、特定のmdbファイルをAccess2000で開き、開くと同時に特定のフォームが表示されるようにしたいのですが、こんなことできますか?できるとすればどのようにすればよいのですか?

例えば、C:\商品管理\在庫一覧.mdbにフォーム商品があるとしたとき、
Form1のcommand1をクリックすると、C:\商品管理\在庫一覧.mdbがAccess2000で開き、フォーム商品が最初に表示されるようにしたいのですが・・・
ちなみに、Access2000の起動時の設定では他のフォームが最初に開くようになっています。
よろしくお願いします。

Aベストアンサー

オートメーションを使ってAccessを制御しましょう。
で、他のフォームが最初に開くようになっていることなので、最初に開くフォームを閉じてからAccessを表示するようにすればいいと思います。

Dim acs as Object

'AccessのApplicationオブジェクトを取得する。
Set acs = CreateObject("Access.Application")

'c:\test.mdbを開くacs.OpenCurrentDatabase "c:\test.mdb"

'起動時に開かれたフォームを閉じる
'2はacForm定数のこと
acs.Close 2,"フォーム名"

'Accessを表示させる
acs.Visible = True

'表示させたいフォームを開く
acs.OpenForm "フォーム名"


こんな感じで。

最後に、Accessを終わらせるときは

'オブジェクトの開放
Set acs = Nothing

で、オブジェクトを開放してください。

オートメーションを使ってAccessを制御しましょう。
で、他のフォームが最初に開くようになっていることなので、最初に開くフォームを閉じてからAccessを表示するようにすればいいと思います。

Dim acs as Object

'AccessのApplicationオブジェクトを取得する。
Set acs = CreateObject("Access.Application")

'c:\test.mdbを開くacs.OpenCurrentDatabase "c:\test.mdb"

'起動時に開かれたフォームを閉じる
'2はacForm定数のこと
acs.Close 2,"フォーム名"

'Accessを表示させる
acs.Visibl...続きを読む

QユーザーフォームでTextBox1にカーソルを移動したい

お世話になっております。

ちょっと前に http://bit.ly/2bBRhzo で、
ユーザーフォームからNASの中にある図面(pdf)を
タブレットの画面に表示するというマクロを頂きました。
アドバイスして下さったみなさん、ありがとうございます。

ものすごく良く出来たマクロで、
びっくりしてるのですが、1点追加したい機能があります。
画像を見て頂ければおわかりのように、
ユーザーフォーム上に、テキストボックスが2つあります。

2段目右の「クリア上下」というボタンをタップしたら、
テキストボックスが2つともクリアになるのですが、
「クリア上下」をタップした後、
マウスカーソルが上のテキストボックス(TextBox1)に移動するようにしたいと思っております。

素人の感覚で考えると、「Range("A1").Select」で、
カーソルが「A1」セルに移動するので、

Range("TextBox1").Select とか
TextBox1.Value = ""  とかで、

マウスカーソルがTextBox1の中に移動するような気がします。
ですが、実際にやってみたのですが、
両方とも機能しません。

Range("TextBox1").Select エラー
TextBox1.Value = "" 空欄になるだけでカーソルの移動なし

という状況です。

すいませんが詳しい方、説明の上手な方、直接、コードで説明できる方、
お手数ですがユーザーフォームでボタンを押したらカーソルがTextBox1に
移動する方法を教えて下さい。よろしくお願いします。

------------------------

追記
http://bit.ly/2bBRhzo でコードを書いて下さった。
ki-aaaさん、ありがとうございます。

軽くカスタムして使っておりますが、
細かいところまで、しっかり作りこんで頂いて
本当に感謝しております。

この場を借りて改めてお礼させて頂きます。
ありがとうございました。

※特に以下の件はチョー助かってます。

1)ボタン1発でパターンAとBの両方に対応している。
2)ファイルパスの書き換えが1か所
  ※NASのフォルダーが深いので助かりした。
3)「Sheet2」への書き込み
  ※忘れてました!サンプルにMacro1を記載しておいて良かったです

お世話になっております。

ちょっと前に http://bit.ly/2bBRhzo で、
ユーザーフォームからNASの中にある図面(pdf)を
タブレットの画面に表示するというマクロを頂きました。
アドバイスして下さったみなさん、ありがとうございます。

ものすごく良く出来たマクロで、
びっくりしてるのですが、1点追加したい機能があります。
画像を見て頂ければおわかりのように、
ユーザーフォーム上に、テキストボックスが2つあります。

2段目右の「クリア上下」というボタンをタップしたら、
テキストボッ...続きを読む

Aベストアンサー

「TextBox1.SetFocus」ではダメですか?


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング