重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

お世話になります。

A列に番号、B列に名字、C列に名前が入力されています(500近いデータがあり、データ量は増減あり)

A列    B列   C列
 1     阿藤   海
2     加藤    山
3 木村   一 
4     齋藤   十三
5     佐藤   まさる



最終行  渡辺   慎吾

ユーザーフォームを使い、名字と名前(2つのテキストボックスに別々に)を入力すると、リストからその人が何番なのか(A列の番号)を教えてくれるようにしたいと思っています。 
そういったことは可能でしょうか?
よろしくお願いいたします。

A 回答 (5件)

>最初のNo=3 最後のNo=4 という風に知らせるようにしたいです。


例を見る限りでは 最後のNo=5 では

Private Sub CommandButton2_Click()
  Dim myDic As Object
  Dim c As Range
  Dim myStr As String, mykey As String
  Dim v As Variant

  Set myDic = CreateObject("Scripting.Dictionary")
  With Worksheets("Sheet1")
    For Each c In .Range("A1", .Cells(Rows.Count, "A").End(xlUp))
      myStr = c.Offset(, 1).Value & "と" & c.Offset(, 2).Value
      If myDic(myStr) = "" Then
        myDic(myStr) = c.Value
      Else
        myDic(myStr) = myDic(myStr) & vbCrLf & c.Value
      End If
    Next
  End With
  mykey = Me.ComboBox1.Text & "と" & Me.ComboBox2.Text
  If myDic.Exists(mykey) Then
    v = Split(myDic.Item(mykey), vbCrLf)
    MsgBox "最初のNo=" & v(0) & vbCrLf & _
      "最後のNo=" & v(UBound(v))
  Else
    MsgBox mykey & " は、見つかりません。", 16
  End If
  Set myDic = Nothing
End Sub
    • good
    • 0
この回答へのお礼

確かに5でしたね。失礼いたしました。
ご回答ありがとうございます。
本当に助かりました。ありがとうございました。

お礼日時:2014/01/13 21:55

TexBox1 に名字


TexBox2 に名前
データはSheet1に書かれているとしています。
TexBox1、TexBox2に入力後、コマンドボタン押下で動作します。

Private Sub CommandButton1_Click()
  Dim myDic As Object
  Dim c As Range
  Dim myStr As String, mykey As String

  Set myDic = CreateObject("Scripting.Dictionary")
  With Worksheets("Sheet1")
    For Each c In .Range("A1", .Cells(Rows.Count, "A").End(xlUp))
      myStr = c.Offset(, 1).Value & c.Offset(, 2).Value
      myDic(myStr) = c.Value
    Next
  End With
  mykey = Me.TextBox1.Text & Me.TextBox2.Text
  If myDic.Exists(mykey) Then
    MsgBox mykey & vbTab & "No.:" & myDic.Item(mykey), 64
  Else
    MsgBox mykey & " は、見つかりません。", 16
  End If
  Set myDic = Nothing
End Sub

この回答への補足

いつもありがとうございます。ご回答いただいたものでできました!

大変申し訳ありませんがもう一つ教えてください。

A列に番号、B列とC列に数字が入力されています(500近いデータがあり、データ量は増減あり)

A列  B列   C列   D列  E列
1   2    1    阿藤   海
2   2    1    加藤    山
3   2   2    木村   一 
4   2    2    齋藤   十三
5   2    2    佐藤   まさる
・   2    3

・   6    3
最終行 6    3     渡辺   慎吾

このようにデータがあり、ユーザーフォームのコンボボックスを使い、B列とC列の番号を入力した際にに、入力された数字に該当するデータの最初のA列の番号と最後のA列の番号を知らせるようにしたいのですが、可能でしょうか?

例であれば、コンボボックス1=2 コンボボックス2=2 と入力されたときに、最初のNo=3 最後のNo=4 という風に知らせるようにしたいです。
よろしくお願いいたします。

補足日時:2014/01/12 21:59
    • good
    • 0

No.2です。



前回のコードでは1度限りの検索になってしまいますね!
これでは何度も検索したい場合、いちいちユーザーフォームを立ち上げなくてはならなくなりますので、
前回のコードの最後から2行目
>Unload Me
と消して
↓に変更してみてください。

With TextBox1
.Value = ""
.SetFocus
End With
TextBox2 = ""

これで続けて検索が可能だと思います。

どうも失礼しました。m(_ _)m
    • good
    • 0
この回答へのお礼

早速のご回答ありがとうございます。参考にさせていただきます。

お礼日時:2014/01/12 21:45

こんにちは!


一例です。

ユーザーフォームにコマンドボタンを配置し、コマンドボタンをクリックすると
実行されるようにしているという前提です。

同姓同名はいない!という前提ですが、同姓または同名があっても対応できるように
A列を挿入し、作業用の列として使用しています。

Private Sub CommandButton1_Click()
Dim endRow As Long, str1 As String, str2 As String, c As Range
str1 = TextBox1 '←「性」を入力するテキストボックス
str2 = TextBox2 '←「名」を入力するテキストボックス
endRow = Cells(Rows.Count, "A").End(xlUp).Row
Range("A:A").Insert
With Range(Cells(1, "A"), Cells(endRow, "A"))
.Formula = "=C1&D1"
.Value = .Value
End With
Set c = Range("A:A").Find(what:=str1 & str2, LookIn:=xlValues, lookat:=xlWhole)
If c Is Nothing Then
MsgBox "該当データなし"
Else
MsgBox c.Offset(, 1)
End If
Range("A:A").Delete
Unload Me
End Sub

こんな感じではどうでしょうか?m(_ _)m
    • good
    • 0

>そういったことは可能でしょうか?



テキストボックスに入力した苗字=B列の苗字
且つ
テキストボックスに入力した名前=C列の名前
のときのA列の番号を取得することで可能かと思われます。
    • good
    • 0

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