Excel VBA質問箱 IV

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

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


9296 / 13644 ツリー ←次へ | 前へ→

【28107】値の検索と表示 sama 05/8/29(月) 10:11 質問[未読]
【28111】Re:値の検索と表示 小僧 05/8/29(月) 11:08 回答[未読]
【28113】Re:値の検索と表示 Jaka 05/8/29(月) 12:03 回答[未読]
【28114】Re:値の検索と表示 sama 05/8/29(月) 14:11 質問[未読]
【28116】Re:値の検索と表示 小僧 05/8/29(月) 15:26 発言[未読]
【28161】Re:値の検索と表示 sama 05/8/29(月) 23:01 質問[未読]
【28170】Re:値の検索と表示 小僧 05/8/30(火) 9:50 発言[未読]
【28174】Re:値の検索と表示 sama 05/8/30(火) 12:40 回答[未読]
【28175】Re:値の検索と表示 小僧 05/8/30(火) 13:53 回答[未読]
【28184】Re:値の検索と表示 sama 05/8/30(火) 15:56 お礼[未読]

【28107】値の検索と表示
質問  sama  - 05/8/29(月) 10:11 -

引用なし
パスワード
   こんにちは、またご教授下さい。
フォーム上のテキストボックスで求めた値を下記の範囲から抽出し、
その“行数”の値をフォーム上のテキストボックスに表示させたい
のですが、そのようなことは可能でしょうか?
Vlookupを使用すれば何とかなるのでしょうか?

    A    B    C
1    100    150    170
2    200    250    270
3    300    350    370
4    400    450    470
5    500    550    570

例えば、テキストボックス1に“B”、テキストボックス2に“380”
という値がある場合、B列の350の値を取得(380以下の最小近似値)
し、表示させて更に“行数”の“3”も取得しテキストボックスに
表示させたいのですが、可能でしょうか?

【28111】Re:値の検索と表示
回答  小僧  - 05/8/29(月) 11:08 -

引用なし
パスワード
   ▼sama さん:
こんにちは。

ユーザフォームに
検索用のテキストボックス

txt検索_列
txt検索_値

結果表示用のテキストボックス
txt結果_行
txt結果_値

コマンドボタン:実行

を配置して、


Private Sub 実行_Click()
Dim SName As String
Dim MyRange As Range
Dim R As Range
Dim LngAtai As Long
Dim LngGyo As Long

  SName = "Sheet1"
  With Sheets(SName)
  Set MyRange = .Range(.Range(Me.txt検索_列 & "1"), _
             .Range(Me.txt検索_列 & "65535").End(xlUp))

  LngAtai = 0
    For Each R In MyRange
      If R.Value <= CLng(Me.txt検索_値) And _
        CLng(R.Value) >= LngAtai Then
        LngAtai = R.Value
        LngGyo = R.Row
      End If
    Next
  End With
  
  Me.txt結果_行 = LngGyo
  Me.txt結果_値 = LngAtai
End Sub

A、B、Cの各列がソートされているという条件があるのであれば
B列を最後まで見なくて良くなるので違う方法があると思います。

【28113】Re:値の検索と表示
回答  Jaka  - 05/8/29(月) 12:03 -

引用なし
パスワード
   こんにちは。
おじゃまします。
B列がソートされているといった条件がありますが....。
これで近似値をひろってくれると思います。(たぶん)
尚、入力されたテキストボックス1、2のエラー処理は入れてません。

Dim 検索値 As Long, 近似値 As Long, Mah As Variant
検索値 = TextBox2.Value
Mah = Application.Match(検索値, Columns(TextBox1.Value), 1)
If IsError(Mah) Then
  TextBox3.Value = "無い"
Else
  近似値 = Columns(TextBox1.Value).Cells(Mah, 1).Value
  TextBox3.Value = Mah & "  " & 近似値

【28114】Re:値の検索と表示
質問  sama  - 05/8/29(月) 14:11 -

引用なし
パスワード
   小僧さん、Jakaさん有難うございます。

SName = "Sheet1"のSheet1には、検索場所を代入すればいいんですよね?

当方の作成中シートで名前をつけ、定義してあるもの(sheet2に)を代入
すると“インデックスが有効範囲にありません”の実行時エラーがでます。
代入の仕方が悪いのでしょうが、よってMyRange=Nothingで取得できません。
独学で勉強しようと思っており、くだらない質問かと思いでしょうが勘弁して
ください。

【28116】Re:値の検索と表示
発言  小僧  - 05/8/29(月) 15:26 -

引用なし
パスワード
   ▼sama さん:
こんにちは。

>SName = "Sheet1"のSheet1には、検索場所を代入すればいいんですよね?

そうですね。

検索したいシートをアクティブにして、

MsgBox ActiveSheet.Name

で表示される名前と、

>定義してあるもの(sheet2に)

は一致していますでしょうか。

【28161】Re:値の検索と表示
質問  sama  - 05/8/29(月) 23:01 -

引用なし
パスワード
   ▼小僧 さん:

今晩は、仕事を終え帰ってきてから取り組んでいますが、私の浅い知識
では解決できないようです。

どーしても”インデックスが有効範囲にない”から抜け出せません。
先ほどの、
検索したいシートをアクティブにして、

MsgBox ActiveSheet.Name

で表示される名前

とは、どのように確認するのでしょうか。
ツールバーの”挿入”から入り”名前”→”定義”でsheet2上の検索対象
の範囲を定義づけしているだけでは駄目なのでしょうか?
また、”R.Value”部分が”オブジェクト変数またはWITHブロック
変数が設定されていません”も気になるのですが?

現在作成しておりますシートは、sheet1に名前、性別、賃金等の情報を
フォームにより書き込みできるようにし、sheet2に賃金テーブル等の表を
作成し、フォーム上で入力された値をSheet2の賃金テーブルで検索し
得られた値を再びフォーム上に返し、それをsheet1に書き込むように作成
しております。

面倒くさいとは思いますが宜しくお願いいたします。

【28170】Re:値の検索と表示
発言  小僧  - 05/8/30(火) 9:50 -

引用なし
パスワード
   ▼sama さん:
おはようございます。

当初、

>>>例えば、テキストボックス1に“B”、テキストボックス2に“380”
>>>という値がある場合、B列の350の値を取得(380以下の最小近似値)
>>>し、表示させて更に“行数”の“3”も取得しテキストボックスに
>>>表示させたいのですが、可能でしょうか?

という事でしたので、

>>ユーザフォームに
>>検索用のテキストボックス
>>
>>txt検索_列
>>txt検索_値
>>
>>結果表示用のテキストボックス
>>txt結果_行
>>txt結果_値
>>
>>コマンドボタン:実行
>>
>>を配置

という仕様にしてみたのですが、

>ツールバーの”挿入”から入り”名前”→”定義”でsheet2上の検索対象
>の範囲を定義づけしている

という事が本命なのですか?
そうなるとコードの内容も変わってくると思うのですが…。

【28174】Re:値の検索と表示
回答  sama  - 05/8/30(火) 12:40 -

引用なし
パスワード
   ▼小僧 さん:
 こんにちは、小僧さんすみません。当初ヒントをいただければなんとか
なるかと思い質問させていただきました。
ただ、テキストボックス、コマンドボタンにつきましてはフォーム上に
作成させていただきました。内容に偽りはありませんが、検索場所がSheet2
上に表を作成しておりまして、その場所を検索し結果をフォーム上に表示
したいということでございます。

【28175】Re:値の検索と表示
回答  小僧  - 05/8/30(火) 13:53 -

引用なし
パスワード
   ▼sama さん:
こんにちは。

後出しジャンケンは別に構わないのですが

>例えば、テキストボックス1に“B”、

という仕様ならうまくいくのかどうかを報告して頂きたかったのですが…。
(過去ログとして他の人の参考になるように)

定義を作成した場合は、
RefersToLocal プロパティの中に Sheet 情報まで含まれるため、

>  With Sheets(SName)
>    Set MyRange = .Range(.Range(Me.txt検索_列 & "1"), _
>            .Range(Me.txt検索_列 & "65535").End(xlUp))
>  End With

の様な事が必要なくなります。(txt検索_列も)

   Set MyRange = Range(ActiveWorkbook.Names("定義名").RefersToLocal)

でシート名までとって来てくれると思います。

※ End Sub の手前に、

  Set MyRange = Nothing

  を付け加えておいて下さい。

【28184】Re:値の検索と表示
お礼  sama  - 05/8/30(火) 15:56 -

引用なし
パスワード
   小僧さん、Jakaさん

 小僧さん先ほどは、失礼いたしました。何とか動作しました。
ただ、行検索については正しい値をひろってきますが、検索の値の取得が
検索場所の正しい数値をひろってこないのですが?
ともあれ何とかなりそうです。本当に有難うございました。

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