Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


9172 / 13646 ツリー ←次へ | 前へ→

【27376】ワークシート関数のVLOOKUPをそのまま使いたい toto 05/8/7(日) 16:28 質問[未読]
【27377】Re:ワークシート関数のVLOOKUPをそのまま使... かみちゃん 05/8/7(日) 16:36 発言[未読]
【27379】Re:ワークシート関数のVLOOKUPをそのまま使... toto 05/8/7(日) 18:07 質問[未読]
【27380】Re:ワークシート関数のVLOOKUPをそのまま使... かみちゃん 05/8/7(日) 18:25 回答[未読]
【27633】Re:ワークシート関数のVLOOKUPをそのまま使... toto 05/8/14(日) 11:41 質問[未読]
【27637】Re:ワークシート関数のVLOOKUPをそのまま使... かみちゃん 05/8/14(日) 12:12 回答[未読]
【27640】Re:ワークシート関数のVLOOKUPをそのまま使... toto 05/8/14(日) 13:03 質問[未読]
【27642】Re:ワークシート関数のVLOOKUPをそのまま使... かみちゃん 05/8/14(日) 13:29 回答[未読]
【27643】Re:ワークシート関数のVLOOKUPをそのまま使... toto 05/8/14(日) 13:50 質問[未読]
【27644】Re:ワークシート関数のVLOOKUPをそのまま使... かみちゃん 05/8/14(日) 14:03 発言[未読]
【27649】Re:ワークシート関数のVLOOKUPをそのまま使... toto 05/8/14(日) 17:05 お礼[未読]
【28890】Re:ワークシート関数のVLOOKUPをそのまま使... はじめ 05/9/17(土) 14:28 質問[未読]
【28891】Re:ワークシート関数のVLOOKUPをそのまま使... りん 05/9/17(土) 14:51 発言[未読]
【28910】Re:ワークシート関数のVLOOKUPをそのまま使... はじめ 05/9/18(日) 11:18 質問[未読]
【28928】Re:ワークシート関数のVLOOKUPをそのまま使... はじめ 05/9/18(日) 13:42 質問[未読]
【28936】Re:ワークシート関数のVLOOKUPをそのまま... ponpon 05/9/18(日) 22:58 回答[未読]
【28968】Re:ワークシート関数のVLOOKUPをそのまま... はじめ 05/9/19(月) 21:04 お礼[未読]

【27376】ワークシート関数のVLOOKUPをそのまま使...
質問  toto  - 05/8/7(日) 16:28 -

引用なし
パスワード
   超初心者で、いつも色々教えて頂いています。
「ユーザーフォーム1」上のテキストボックスに数字を入力させ
コマンドボタンをリターンすると、
別のブックのデータベースから
VLOOKUPで引っ張ってきたデータ(2つ)を「ユーザーフォーム2」の
「テキストボックス1」「テキストボックス2」にそれぞれ表示する。
というコードを書きたいのです。
VLOOKUP関数をそのまま使って書くには、どのようにしたらいいか、
教えてください。

【27377】Re:ワークシート関数のVLOOKUPをそのまま...
発言  かみちゃん  - 05/8/7(日) 16:36 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>VLOOKUP関数をそのまま使って書くには、どのようにしたらいいか、
>教えてください。

「Visual Basic でワークシート関数を使用する」というヘルプ情報を見てください。

Application.WorksheetFunction.Vlookup(〜

【27379】Re:ワークシート関数のVLOOKUPをそのまま...
質問  toto  - 05/8/7(日) 18:07 -

引用なし
パスワード
   回答ありがとうございます。
ヘルプは見ました。
例がVLOOKUPではなかったので、よくわかりませんでした。
本当に初心者のため、質問させて頂きました。
レベルが低すぎて申し訳ありません。
rengeオブジェクトを宣言しないと、セル範囲表示をそのまま使えない、
ということですね。
ワークシートで使用している関数式をそのまま使うには、その関数式の前に
worksheetfunction._と入力するだけでいいのですか?

【27380】Re:ワークシート関数のVLOOKUPをそのまま...
回答  かみちゃん  - 05/8/7(日) 18:25 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>Rangeオブジェクトを宣言しないと、セル範囲表示をそのまま使えない、
>ということですね。
>ワークシートで使用している関数式をそのまま使うには、その関数式の前に
>WorksheetFunction._と入力するだけでいいのですか?

たとえば、こんな感じです。
Private Sub CommandButton1_Click()
 Dim Result As String
 
 Result = "#N/A!"
 On Error Resume Next
 Result = Application.WorksheetFunction.VLookup(Val(Me.TextBox1.Value), Sheets("Sheet1").Range("A:B"), 2, False)
 On Error GoTo 0
 Me.TextBox2.Value = Result
End Sub

【27633】Re:ワークシート関数のVLOOKUPをそのまま...
質問  toto  - 05/8/14(日) 11:41 -

引用なし
パスワード
   ▼かみちゃん さん:
>たとえば、こんな感じです。
>Private Sub CommandButton1_Click()
> Dim Result As String
> 
> Result = "#N/A!"
> On Error Resume Next
> Result = Application.WorksheetFunction.VLookup(Val(Me.TextBox1.Value), Sheets("Sheet1").Range("A:B"), 2, False)
> On Error GoTo 0
> Me.TextBox2.Value = Result
>End Sub

こんにちは。
(Val(Me.TextBox1.Value), Sheets("Sheet1")
↑この部分の解説をお願いできたら嬉しいです。
vlookupで引っ張ってきた値(2つ)をuserform2のテキストボックス1と2に
表示させるのですが、
その場合、
userform2.show
textbox1.text=result1
textbox2.text=result2

続ければいいのでしょうか?
どうぞよろしくお願いします。

【27637】Re:ワークシート関数のVLOOKUPをそのまま...
回答  かみちゃん  - 05/8/14(日) 12:12 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>(Val(Me.TextBox1.Value), Sheets("Sheet1")

VBAの前にワークシート関数であるVLOOKUP関数はご存知ですよね?
VLOOKUPの第一引数は「検索値」で、Val(Me.TextBox1.Value) としています。
第二引数は、「範囲」で、Sheets("Sheet1").Range("A:B") としています。
この第一引数と第二引数の一番左端の「データの型」というものを合わしておく
必要があります。
これは、人の目には、数字というふうに見えていますが、テキストボックスに入
っている数字は、文字列として扱われるからです。
Val(文字列の数字)
とすることで、「数値」に変換されます。
仮に
Val(Me.TextBox1.Value)
ではなく、
Me.TextBox1.Value
としたまま、VLOOKUPで参照しようとすると、データの型が一致するものがない
限り、#N/A!というエラー値が返ってきます。

もちろん、第二引数の一番左端の列の「データの型」が「数値」ではなく「文字
列」ならば、このような変換は不要ですし、逆に変換してしまうと、同様に
#N/A!というエラー値になります。

>vlookupで引っ張ってきた値(2つ)をuserform2のテキストボックス1と2に
>表示させるのですが、
>その場合、
>userform2.show
>textbox1.text=result1
>textbox2.text=result2
>を
>続ければいいのでしょうか?

それでいいと思います。

【27640】Re:ワークシート関数のVLOOKUPをそのまま...
質問  toto  - 05/8/14(日) 13:03 -

引用なし
パスワード
   かみちゃんさま
とてもよくわかります。
非常にわかりやすい解説をありがとうございます。
Vlookupで検索する範囲を指定する際に、セル範囲ではなく
(範囲は毎日行方向に増えていきます)
データベースのシートそのものを指定したい時、
Cドライブのmydocumentにある「データA」というブックの中の
「データB」というsheetのA列〜H列が範囲だとすると、
C:\mydocument\データA\データB.renge(A:H)でよろしいのでしょうか?

初歩的な質問ばかりで恐縮です。

【27642】Re:ワークシート関数のVLOOKUPをそのまま...
回答  かみちゃん  - 05/8/14(日) 13:29 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>Vlookupで検索する範囲を指定する際に、セル範囲ではなく
>(範囲は毎日行方向に増えていきます)
>データベースのシートそのものを指定したい時、
>Cドライブのmydocumentにある「データA」というブックの中の
>「データB」というsheetのA列〜H列が範囲だとすると、
>C:\mydocument\データA\データB.renge(A:H)でよろしいのでしょうか?

そのブックを開いておく必要があるかと思います。
Workbooks("データA.xls").Sheets("データB").Range("A:H")
となるかと思います。

【27643】Re:ワークシート関数のVLOOKUPをそのまま...
質問  toto  - 05/8/14(日) 13:50 -

引用なし
パスワード
   ▼かみちゃん さん:
>そのブックを開いておく必要があるかと思います。
>Workbooks("データA.xls").Sheets("データB").Range("A:H")
>となるかと思います。

回答ありがとうございます。
できればデータAのブックは開かずに値をuserform2に引っ張って
来たいのです。
もし開かなければならないとすると、
commandbutton1をクリックしたときに
最初にデータAを開き、vlookupを実行し、userform2の
textbox1と2にそれぞれ表示し、その後でデータAをcloseする、
という長いコードを書くことになりますか?

よろしくお願い致します。

【27644】Re:ワークシート関数のVLOOKUPをそのまま...
発言  かみちゃん  - 05/8/14(日) 14:03 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>できればデータAのブックは開かずに値をuserform2に引っ張って
>来たいのです。

たしか、Application.WorksheetFunction.Vlookupを使う以上、他ブックを開かないで
参照することはできなかったと思います。

以前同様の質問が出ていましたので、参考にしてください。
http://www.vbalab.net/vbaqa/c-board.cgi?cmd=ntr;tree=25700;id=excel

>もし開かなければならないとすると、
>commandbutton1をクリックしたときに
>最初にデータAを開き、vlookupを実行し、userform2の
>textbox1と2にそれぞれ表示し、その後でデータAをcloseする、
>という長いコードを書くことになりますか?

他ブックを開きたくないために、Application.WorksheetFunction.Vlookupを使わずに、
別方法で実現するよりは、他ブックを開いたほうが、よっぽど短いと思います。
画面更新しないようにしておけば、開いているとわからないと思いますし。

私に、わかるのは、これくらいです。

【27649】Re:ワークシート関数のVLOOKUPをそのまま...
お礼  toto  - 05/8/14(日) 17:05 -

引用なし
パスワード
   かみちゃんさま

わかりました。
それでやってみます。

色々どうもありがとうございました。
また、よろしくお願い致します。

【28890】Re:ワークシート関数のVLOOKUPをそのまま...
質問  はじめ  - 05/9/17(土) 14:28 -

引用なし
パスワード
   こんにちは。
この前の続きですが、
下記のコードはuserform1のtextbox1にデータを入力し
同じuserform1に作成したコマンドボタン1をクリックし、
この値を引数としてvlookupで検索した2つの値を、
userform2を開き、userform2上に作成した
textbox1とtextbox2にそれぞれ代入しようとしたものです。


Private Sub CommandButton1_Click()
Dim result1 As String
Dim result2 As String

result1 = "#N/A!"
On Error Resume Next
result2 = "#N/A!"
On Error Resume Next

result1 = Application.WorksheetFunction.VLookup(Val(Me.TextBox1.Value), ThisWorkbook("sheet2").Range("A:D"), 2, False)

result2 = Application.WorksheetFunction.VLookup(Val(Me.TextBox1.Value), ThisWorkbook("sheet2").Range("A:D"), 3, False)
On Error GoTo 0
UserForm2.Show
TextBox1.Text = result1
TextBox2.Text = result2

End Sub

vlookuoで検索した値が入った状態のuserform2を開きたいのですが、
textbox1.2ともに空白で開いてしまいます。

デバックでは最後のtextbox2.textの部分が黄色になっています。

どなたか解読できたら、教えてください。
よろしくお願い致します。

【28891】Re:ワークシート関数のVLOOKUPをそのまま...
発言  りん E-MAIL  - 05/9/17(土) 14:51 -

引用なし
パスワード
   はじめ さん、こんにちわ。

>この前の続きですが、
>下記のコードはuserform1のtextbox1にデータを入力し
>同じuserform1に作成したコマンドボタン1をクリックし、
>この値を引数としてvlookupで検索した2つの値を、
>userform2を開き、userform2上に作成した
>textbox1とtextbox2にそれぞれ代入しようとしたものです。
>
>
>Private Sub CommandButton1_Click()
>Dim result1 As String
>Dim result2 As String
>
>result1 = "#N/A!"
>On Error Resume Next
>result2 = "#N/A!"
>On Error Resume Next
>
>result1 = Application.WorksheetFunction.VLookup(Val(Me.TextBox1.Value), ThisWorkbook("sheet2").Range("A:D"), 2, False)
>
>result2 = Application.WorksheetFunction.VLookup(Val(Me.TextBox1.Value), ThisWorkbook("sheet2").Range("A:D"), 3, False)
>On Error GoTo 0
>UserForm2.Show

'省略するとどうなっているか確認してみてください
MsgBox TextBox1.Parent.Name

'親オブジェクト(フォーム)を明示
UserForm2.TextBox1.Text = result1
UserForm2.TextBox2.Text = result2
>
>End Sub
>
>vlookuoで検索した値が入った状態のuserform2を開きたいのですが、
>textbox1.2ともに空白で開いてしまいます。
>デバックでは最後のtextbox2.textの部分が黄色になっています。
他の部分は見ていませんが、ここが黄色という事は、userform1にtextbox2が無いからでしょう。

【28910】Re:ワークシート関数のVLOOKUPをそのまま...
質問  はじめ  - 05/9/18(日) 11:18 -

引用なし
パスワード
   ▼りん さん:
こんにちは。
>>Private Sub CommandButton1_Click()
>>Dim result1 As String
>>Dim result2 As String
>>
>>result1 = "#N/A!"
>>On Error Resume Next
>>result2 = "#N/A!"
>>On Error Resume Next
>>
>>result1 = Application.WorksheetFunction.VLookup(Val(Me.TextBox1.Value), ThisWorkbook("sheet2").Range("A:D"), 2, False)
>>
>>result2 = Application.WorksheetFunction.VLookup(Val(Me.TextBox1.Value), ThisWorkbook("sheet2").Range("A:D"), 3, False)
>>On Error GoTo 0
>>UserForm2.Show
>
>'省略するとどうなっているか確認してみてください
>MsgBox TextBox1.Parent.Name
>
>'親オブジェクト(フォーム)を明示
>UserForm2.TextBox1.Text = result1
>UserForm2.TextBox2.Text = result2
>>
>>End Sub
>>
>>vlookuoで検索した値が入った状態のuserform2を開きたいのですが、
>>textbox1.2ともに空白で開いてしまいます。
>>デバックでは最後のtextbox2.textの部分が黄色になっています。
>他の部分は見ていませんが、ここが黄色という事は、userform1にtextbox2が無いからでしょう。


MsgBox TextBox1.Parent.Name
を追加して実行してみました。
「userform1」というメッセージボックスがでましたが、
やはりuserform2のtextbox1,2は空白で出てきます。
デバックでは「オブジェクトがありません」となります。
userform1にtextbox2は作成していません。
どうしたらuserform2のtextbox1,2にvlookupで検索した値が
反映されるのでしょうか。

【28928】Re:ワークシート関数のVLOOKUPをそのまま...
質問  はじめ  - 05/9/18(日) 13:42 -

引用なし
パスワード
   Private Sub CommandButton1_Click()
Dim result1 As String
Dim result2 As String

result1 = "#N/A!"
On Error Resume Next
result2 = "#N/A!"
On Error Resume Next

result1 = Application.WorksheetFunction.VLookup(Val(Me.TextBox1.Value), ThisWorkbook("sheet2").Range("A:D"), 2, False)

result2 = Application.WorksheetFunction.VLookup(Val(Me.TextBox1.Value), ThisWorkbook("sheet2").Range("A:D"), 3, False)
On Error GoTo 0
UserForm2.TextBox1.Text = result1
UserForm2.TextBox2.Text = result2
UserForm2.Show

End Sub

このように最後の3行を変更してみました。
そうしたら、UserForm2.TextBox1&2に「#N/A!」が両方入って
開きました。

でも、範囲内に確実にデータがあるので、
必ず2列目、3列目の値が返ってくるはずなのです。

WorksheetFunction.VLookup自体
に誤りがあるのでしょうか。
worksheets

【28936】Re:ワークシート関数のVLOOKUPをそのまま...
回答  ponpon  - 05/9/18(日) 22:58 -

引用なし
パスワード
   ▼はじめ さん:
こんばんは。
以下のようにすると抽出されましたが、

>Private Sub CommandButton1_Click()
>Dim result1 As String
>Dim result2 As String
Dim myR As Range

>result1 = "#N/A!"
>On Error Resume Next
>result2 = "#N/A!"
>On Error Resume Next

With ThisWorkbook.Worksheets("sheet2")
 Set myR = .Range("A:D")
End With

result1 = Application.WorksheetFunction.VLookup(Val(Me.TextBox1.Value), myR, 2, False)

result2 = Application.WorksheetFunction.VLookup(Val(Me.TextBox1.Value), myR, 3, False)

>On Error GoTo 0
>UserForm2.TextBox1.Text = result1
>UserForm2.TextBox2.Text = result2
>UserForm2.Show
>
>End Sub

【28968】Re:ワークシート関数のVLOOKUPをそのまま...
お礼  はじめ  - 05/9/19(月) 21:04 -

引用なし
パスワード
   ponponさま
解決しました。
本当にどうもありがとうございました!

9172 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free