こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

EXCEL VBA データ抽出について

ユーザーフォームを利用して、データの管理を行なっております

各データには、コードを設定しており
検出時に利用しています

フォームでコードを入力する際には
前半(年・月) 後半(No.)で2か所に分けて入力しており

以下、コード前半⇒ コード1
    コード後半⇒ コード2  ・・・としておきます


シートへの転記も、コード1はA列・コード2はB列に分けて書き込んでいます

以下は、コードからデータを検出し、その内容をテキストボックスへ表記するように
書いたコードですが、コード1のみでの検索になっております
コード2をどのように組み込めばいいのか、わからずとても困っています。

シート名 AllDate
コード1 TextBox36    (A列)
コード2 TextBox37    (B列)




1行目は項目名になっており、2行目からデータが蓄積されています。

また新規で登録した場合には、空欄最下部へフォームからシートへ転記されるように設定しています
 



============================

Worksheets("AllDate").Activate
Dim i As Long, kb As String

If TextBox36.Text = "" Then
MsgBox "検索する番号を入力してください"
Exit Sub
End If

For i = 2 To Range("A1").CurrentRegion.Rows.Count
If Cells(i, 1).Text = TextBox36.Text Then
kb = TextBox36.Text
Exit For
End If
Next

If kb = "" Then
MsgBox "指定した番号はありません"
Exit Sub
Else
Call ReadRecord(kb)
End If
TextBox36.Text = ""
TextBox37.Text = ""
End Sub

Sub ReadRecord(kb As String)
Dim rw As Long
Set kRange = Range("A1").CurrentRegion.Columns(1).Find(What:=kb, LookAt:=xlWhole)

If kRange Is Nothing Then
MsgBox "データがありません"
Exit Sub
End If
rw = kRange.Row
TextBox1.Text = Cells(rw, 1).Value
TextBox2.Text = Cells(rw, 2).Value
TextBox3Text = Cells(rw, 3).Value
TextBox4.Text = Cells(rw, 4).Value


===============================

また自分なりにも何とか模索しており、フィルターを使う方法も考えておりますが
何分まだまだ初心者LVの為、
こちらも難航しております。
フィルタを使用する場合

TextBox36の値で、A列にて抽出
抽出されたデータから、さらに
TextBox37の値で、B列にて抽出

重複データは存在しないので、A2行へ常に1件のデータが残り
それをセル指定で、テキストボックスへ転記さようと考えています。

また、修正⇒上書き作業も必要なので
フィルタで抽出したデータをテキストボックスへ表示させ
修正後、同様にA2行へ書き込み
その後、フィルター解除がいいのかな?と思っています。


長々となり恐縮なのですが

方法のオススめ
コードのご教授など

お力をお貸しいただけないでしょうか?
よろしくお願いいたします!!

投稿日時 - 2012-09-19 15:22:21

QNo.7706104

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

ANo.1

私としては普通に検索する時には、フィルターはお勧めしないかなぁ、と思いました。
(複数抽出してコピーとか、条件が複数とか、万単位のデータとかだとお勧めしますが)
検索するときに、すでにコード2は準備できているんでしょうか。
準備できているなら、
If Cells(i, 1).Text = TextBox36.Text Then
kb = TextBox36.Text
If Cells(i, 2).Text = TextBox37.Text Then
kd = TextBox37.Text 'kbと同じようにメッセージボックスで確認できます。
Exit For
End If
End If
でよいと思います。
Callする必要がなくなりますので、テキストボックスへの書き込みを本体へ移しましょう・・。
for next を使うのも良いですが、for each next のほうが行番号の取得がめんどくさく無くて私は好きです。
コード2が準備できていなかったら・・・フィルターや配列を使ってのコンボリストで、コード2を探させる必要が出てきますね・・・。

投稿日時 - 2012-09-22 00:16:31

お礼

ご返答からお礼がすごく遅くなり申し訳ありませんでした。

言い訳がましくて恐縮なのですが、お礼が未完了のまま放置されていることに
気づき慌てて再度し直した次第です。

助けて頂いたのに、このように無作法になってしまい心よりお詫びと共に
改めてお礼申し上げます。ありがとうございました

投稿日時 - 2012-12-21 02:00:41

あなたにオススメの質問