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

自分は技術者ではないのですがエクセルのVBAで質問があります。
エクセルで作ったデータをフォームから検索して一件ずつ表示するにはどうしたらよいでしょうか?
途中まで作ったのですが、自分の方法としては「シート1」にあるデータを変数に入れ、その変数をフォームに出力させるというものなんですが、もっと簡単な方法はないでしょうか?

変数a = 2 : 変数b = 1
For 変数a = 2 To 65536
If Sheets("シート1").Range("A" & 変数a) = Empty And 変数a = 2 Then
MsgBox "データがありません"
GoTo 終わり
ElseIf Sheets("シート1").Range("A" & 変数a) <> Empty Then
項目1(変数b) = Sheets("シート1").Range("A" & 変数a)
項目2(変数b) = Sheets("シート1").Range("B" & 変数a)
項目3(変数b) = Sheets("シート1").Range("C" & 変数a)
変数b = 変数b + 1
ElseIf Sheets("シート1").Range("A" & 変数a) = Empty Then
GoTo 終わり
End If
Next

終わり:

こんな感じにしたいです。↓
http://hp1.cafesta.com/hp/album_photo_read.do?hp …

A 回答 (3件)

私なりに質問内容を理解して書いてみたんですが、これでいいのかどうか?かなり疑問です。

。。
フォーム(UserForm1)にテキストボックス(TextBox1)とコマンドボタン(CommandButton1)を適当に配置してもらって、ワークシートのA~Cの縦に適当に文字を入れてもらえば動きます(はず)
フォームのテキストボックス(TextBox1)に検索したい文字を入れてボタン押して下さい
とりあえずフォームじゃなくてMsgBoxに結果を出してます
フォーム上に出すなら?コード内の結果用MsgBoxをコメントブロックして下段のTuika=・・・とその下行のコメントブロックを解除して下さい
追加でTextBox2を作ってもらってプロパティでMultiLineをTrue、ScrollBarsをfmScrollBarsBothにでもしてもらえらば、とりあえずフォーム上にでます
順番が逆に出て格好悪いんですけど。。。
参考になれば参考にして下さい
おもいっきり、素人です。

Dim iTate As Long
Dim iYoko As Integer
Dim TateMax As Long, YokoMax As Integer
Dim KensakuMoji As String
Dim Tuika
Private Sub CommandButton1_Click()
TateMax = 65536 '縦最大値
YokoMax = 3 '横最大値
KensakuMoji = UserForm1.TextBox1.Text '検索する文字
For iTate = 2 To TateMax '縦へ
For iYoko = 1 To YokoMax '横へ
If ActiveSheet.Cells(iTate, iYoko) = "" Then
Cells(iTate, iYoko).Select 'どこを検索中か?(確認用)
MsgBox "データがありません", vbExclamation
Exit Sub 'プログラムを抜ける
ElseIf ActiveSheet.Cells(iTate, iYoko) = KensakuMoji Then
Cells(iTate, iYoko).Select 'どこを検索中か?(確認用)
MsgBox ActiveSheet.Cells(iTate, iYoko)
' Tuika = ActiveSheet.Cells(iTate, iYoko) & "はセルの(" & iTate & "," & iYoko & ")です" & vbNewLine & Tuika
' UserForm1.TextBox2.Text = Tuika
End If
Next iYoko
Next iTate
End Sub
    • good
    • 0
この回答へのお礼

自分は初心者でよく理解できないところはありますが、ありがとうございます。

もう少し勉強したいと思います。

お礼日時:2007/03/24 14:46

ListBoxを使用するとか。

    • good
    • 0
この回答へのお礼

検索にはListBoxが必要ですね。

ありがとうございます。

お礼日時:2007/03/24 14:48

少しVBA(マクロ)を勉強された方が良いと思います。


自分も経験者とかじゃないので、下手なソース書いてますが、
自分が見ても勉強された方が良いと思います。
-------------------------------------------------------
Option Explicit

Sub Sample()

Dim i As Long
Dim LastRow As Long
Dim Ws As Worksheet
Dim K1() As Variant
Dim K2() As Variant
Dim K3() As Variant

Set Ws = Sheets("シート1")

LastRow = Ws.Range("a65536").End(xlUp).Row
If LastRow = 1 Then GoTo syori

ReDim K1(LastRow - 1)
ReDim K2(LastRow - 1)
ReDim K3(LastRow - 1)

For i = 2 To LastRow
K1(i - 1) = Ws.Range("a" & i).Value
K2(i - 1) = Ws.Range("b" & i).Value
K3(i - 1) = Ws.Range("c" & i).Value
Next i

'With Sheets(2)
'For i = 1 To LastRow - 1
' .Cells(i, 1).Value = K1(i)
' .Cells(i, 2).Value = K2(i)
' .Cells(i, 3).Value = K3(i)
'Next i
'End With

Set Ws = Nothing
Exit Sub

syori:
Set Ws = Nothing
MsgBox "データがありません。"

End Sub

-------------------------------------------------------
お手本になる様なソースではありませんが、勉強されてみて
下さい。
    • good
    • 0
この回答へのお礼

そうですね。
自分でも少し勉強したいと思います。

ありがとうございます。

お礼日時:2007/03/24 14:50

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