- ベストアンサー
エクセル2003でフォームを作成しています。
エクセル2003でフォームを作成しています。 ネットワーク上にある”元データ.xls”のデータをもとに”集計.xls”にある フォームにデータを引っ張ってきたいと思っています。 ”集計.xls”には、コンボ1つと”元データ.xls”と同数のテキストボックスを設置してあります。 コンボには”元データ.xls”のA1:A1000までを課題番号としたものをRowSourceにセットしてあります。 コンボから課題番号を選ぶと、テキストボックスに”元データ.xls”の値を出したいのですが どうすればよいのでしょうか。 アクセスのSelect Fromのようなことをしたいと思っているのですが、すみません意味分かりますでしょうか。よろしくお願いいたします。
- みんなの回答 (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)
>集計.xls”には、コンボ1つと”元データ.xls”と同数のテキストボックスを設置してあります どういう意味? >元データ.xls”と同数のとは。元データ.xls”のあるシートのデータ行数と同数の、の意味か? なぜそんなに沢山テキストボックスを貼り付けるのか。 >コンボには”元データ.xls”のA1:A1000までを課題番号としたものをRowSourceにセットしてあります。 コンボの明細が1000行など、スクロールや探すことが面倒で、使いにくいのでは? >テキストボックスに”元データ.xls”の値を出したいのですが 質問文で前に出てくるテキストボックスとは別? 課題番号をセルに入力するか、1つのテキストに入力し、、その課題を別シートにだすとかすれば良いのでは。 質問者は、VBAは経験あるのですか? ーーー エクセルで仕事で他人(エクセルを知らない)に使わせようとしているようだが、質問者はまだ経験不足で、我流の仕組みを考えていないですか。 === したいことを、全体的に、文章で箇条書きでもして、もう少し設計段階のやり方まで含めて批判を仰ぐとか、質問すべきと思う。
補足
質問者は経験不足で、我流の仕組みを考えていない、 とおっしゃいますが、 こちらのサイトは経験者で仕組みを理解していない人でないと 質問出来ないのですか? ほかの色々な質問を見ていても、みなさん手探りで質問を しているようですが。 質問の仕方は人それぞれだと思います。 設計段階のやり方まで含めて評価を仰いでいる人はそれほど多く居ません。 みなさんの質問を色々見て探しましたので。 がしかし、私の説明も確かに不足だと思いますので、次の質問で画像を添付します。 何をしたいのか、分かっていただけるといいです。 VBAはアクセスでほんの少しやっただけです。