• ベストアンサー

エクセル2003でフォームを作成しています。

エクセル2003でフォームを作成しています。 ネットワーク上にある”元データ.xls”のデータをもとに”集計.xls”にある フォームにデータを引っ張ってきたいと思っています。 ”集計.xls”には、コンボ1つと”元データ.xls”と同数のテキストボックスを設置してあります。 コンボには”元データ.xls”のA1:A1000までを課題番号としたものをRowSourceにセットしてあります。 コンボから課題番号を選ぶと、テキストボックスに”元データ.xls”の値を出したいのですが どうすればよいのでしょうか。 アクセスのSelect Fromのようなことをしたいと思っているのですが、すみません意味分かりますでしょうか。よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

#1のimogasiさんはベテランの方で、嫌味で言っているとかいうことではありません。もう少し、感情的にならずに虚心に受け止めてください。言葉に言葉で反論しても意味ないと思います。 おそらく、ご質問のイメージのままでは解決には結びつかないと思います。 以下のコードから、ご質問で足らない部分がわかるはずです。大事なことは、どういうデータを検索するかで、方法は関係があまりありません。以下のコードは文字列を検索するようになっています。それを数字を検索するとなれば、また、コードが変わります。 >アクセスのSelect From Excelでも、もちろん、Select From は可能です。ADODBはわかりますか?もし、そうなら、そういう設定を考えなくてはなりません。外形だけで、「後は、良きに払え」と言われるのが一番困ります。 以下は、一例です。たぶん、そうでないと言われるのは承知の上ですが、言葉上から取れる内容は、この程度のものしか思い浮かばないということです。ただし、ADODBで作り直せと言われたら、このスレッドでは遠慮させていただきます。 使用コントロール UserForm 上で、 TextBox1 ListBox1 CommandButton1 // Private Const MYPATH As String = "\\public\Excel\" '←パス Private wb As Workbook Private Sub UserForm_Initialize()  Const FNAME As String = "temp.xls" 'ファイル名  On Error GoTo ErrHandler  Set wb = Workbooks(FNAME)  ThisWorkbook.Activate 'このブックをアクティベート  'wb.Activate '開いたファイルをアクティベート  Exit Sub ErrHandler:  If Dir(MYPATH & FNAME) = "" Then   MsgBox FNAME & " が見つかりません。", vbExclamation   Exit Sub  End If  If Err.Number = 9 Then   Workbooks.Open MYPATH & FNAME   Resume  ElseIf Err.Number > 0 Then   MsgBox Err.Number & " : " & Err.Description  End If End Sub Private Sub UserForm_Terminate()  '終了時  If Not wb Is Nothing Then   wb.Close False  End If End Sub Private Sub CommandButton1_Click()  Dim sText As String  Dim FirstAdd As String  Dim c As Variant  Dim rng As Range  Dim buf As Variant    If Trim(TextBox1.Value) = "" Then Exit Sub  buf = ""  sText = TextBox1.Text  '検索  With wb.Worksheets(1)   Set rng = .Range("A1", .Cells(Rows.Count, 1).End(xlUp))   Set c = rng.Find( _   What:=sText, _   LookIn:=xlValues, _   LookAt:=xlWhole, _   SearchOrder:=xlByColumns)   If Not c Is Nothing Then    FirstAdd = c.Address    buf = c.Value    Do     Set c = rng.FindNext(c)     If c.Address = FirstAdd Then Exit Do     buf = buf & "," & c.Value    Loop Until c Is Nothing   End If   If Len(buf) > 0 Then    ListBox1.List = Split(buf, ",")   Else    MsgBox "該当するものが見つかりません。", vbExclamation   End If  End With  Set rng = Nothing End Sub

その他の回答 (1)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.1

>集計.xls”には、コンボ1つと”元データ.xls”と同数のテキストボックスを設置してあります どういう意味? >元データ.xls”と同数のとは。元データ.xls”のあるシートのデータ行数と同数の、の意味か? なぜそんなに沢山テキストボックスを貼り付けるのか。 >コンボには”元データ.xls”のA1:A1000までを課題番号としたものをRowSourceにセットしてあります。 コンボの明細が1000行など、スクロールや探すことが面倒で、使いにくいのでは? >テキストボックスに”元データ.xls”の値を出したいのですが 質問文で前に出てくるテキストボックスとは別? 課題番号をセルに入力するか、1つのテキストに入力し、、その課題を別シートにだすとかすれば良いのでは。 質問者は、VBAは経験あるのですか? ーーー エクセルで仕事で他人(エクセルを知らない)に使わせようとしているようだが、質問者はまだ経験不足で、我流の仕組みを考えていないですか。 === したいことを、全体的に、文章で箇条書きでもして、もう少し設計段階のやり方まで含めて批判を仰ぐとか、質問すべきと思う。

hori_kumanoko
質問者

補足

質問者は経験不足で、我流の仕組みを考えていない、 とおっしゃいますが、 こちらのサイトは経験者で仕組みを理解していない人でないと 質問出来ないのですか? ほかの色々な質問を見ていても、みなさん手探りで質問を しているようですが。 質問の仕方は人それぞれだと思います。 設計段階のやり方まで含めて評価を仰いでいる人はそれほど多く居ません。 みなさんの質問を色々見て探しましたので。 がしかし、私の説明も確かに不足だと思いますので、次の質問で画像を添付します。 何をしたいのか、分かっていただけるといいです。 VBAはアクセスでほんの少しやっただけです。

関連するQ&A