[[20240423195521]] 『ユーザーフォームでコンボボックスとテキストボッ』(素焼き) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) |

| 全文検索 | 過去ログ ]

 

『ユーザーフォームでコンボボックスとテキストボックスを連動させたい』(素焼き)

ユーザーフォーム上のComboBox2の値を選択したら、TextBox3の値を検索して表示するマクロを作りたいのですが上手くいきません。
下記で特にエラーは出ませんが表示されません?
何かお気づきの点がありましたら教えてください。

Private Sub ComboBox2_Change()

    Dim myRange As Range
    Dim rngSearch As Range

    Set myRange = ActiveSheet.Range("C8:I71")
    Set rngSearch = myRange.Find(What:=ComboBox2.Value, LookAt:=xlPart)

    If Not rngSearch Is Nothing Then
        'ヒットした値をテキストボックスにセット
        TextBox3.Value = ActiveSheet.Cells(rngSearch.Row, rngSearch.Column + 3).Value
    End If
End Sub

< 使用 Excel:Microsoft365、使用 OS:Windows11 >


>表示されません?
疑問形で問われましても、こちらも?になってしまいますが、とりあえず整理のお手伝い
 Private Sub ComboBox2_Change()
     Dim rngSearch As Range

     Set rngSearch = ActiveSheet.Range("C8:I71").Find(What:=ComboBox2.Value, LookAt:=xlPart)
     If Not rngSearch Is Nothing Then
         'ヒットした値をテキストボックスにセット
         TextBox3.Value = rngSearch.offset(,3).Value
     End If
 End Sub

とりあえず【rngSearch】が思った通りのセルなのか、確認してはどうでしょうか?
あと、LookInが省略されているのも少々気になります。

(もこな2 ) 2024/04/23(火) 20:28:17


もこな2さん なんとなく原因が解かった気がします。
思った通りなセルなのかテキストで検索したところ、見事にスルーしました。
ヒットするであろうセルは結合されたセルでこれが原因のようでした。
ありがとうございました。
(素焼き) 2024/04/24(水) 10:10:16

引き続きの質問になります。
検索したセルのフォーマットを見てコードを変えることができますでしょうか。
下記をコードの検索結果が「数値」だったら
    Dim myRange As Range
    Dim rngSearch As Range
    Set myRange = ActiveSheet.Range("C8:L71")
    Set rngSearch = myRange.Find(What:=ComboBox2.Value, LookIn:=xlValues, LookAt:=xlPart)
    If Not rngSearch Is Nothing Then
        'ヒットした値をテキストボックスにセット              
        TextBox3.Value = Cells(rngSearch.Row, rngSearch.Column + 1).Value
    End If
検索結果が「%」だったら
        'ヒットした値をテキストボックスにセットを 
「TextBox3.Value = Format(Cells(rngSearch.Row, rngSearch.Column + 1), "0%")」へ
切り替えて実行したいのですがどのように追記変更したら良いか教えてください。
(素焼き) 2024/04/30(火) 20:49:58


詰まっているところが(私には)理解できませんが気になるところなど

■1
>検索結果が「%」だったら

 〜Find(What:=ComboBox2.Value,〜
              ~~~~~~~~~~~~~~~

↑はどのようなものを部分一致検索するつもりなんですか?

■2
なんで↓のように回りくどい書き方にしたいのですか?

 Cells(rngSearch.Row, rngSearch.Column + 1).Value

■3
>下記をコードの検索結果が「数値」だったら
「■1」と被りますが、どのような"セルの値"が想定されるのでしょうか?
数値じゃない場合、数値の場合、それぞれのパターンを5ずつくらい示せませんか?
それとも、セルの"表示形式"のことを言っているのでしょうか?

(もこな2) 2024/05/01(水) 07:50:30


 ちょっと勉強に参加です

 これって、見つかった右隣のセルの数値のパターンが、整数と%表記とあるとしたら
 それも分岐するってことかしら?

 ただの 0値と、0% もしくは 0.0% も分岐するんだろか?
 だとしたらこうとかなん?

 If rngSearch.Offset(0, 1).NumberFormatLocal Like "*%" And _
    rngSearch.Offset(0, 1) = 0 Then
    MsgBox "数値が、0%だよ〜ん!! でどうするの?"
 End If
(あみな) 2024/05/01(水) 08:13:44

もこな2さん ありがとうございます。
【補足】
検索対象のセルが「10」「50」「100」「300」「1000」は、
TextBox3.Value = Cells(rngSearch.Row, rngSearch.Column + 1).Value
検索対象のセルが「10%」「50%」「20%」「150%」「200%」は、
TextBox3.Value = Format(Cells(rngSearch.Row, rngSearch.Column + 1), "0%")
を実行したい。

あみなさん ありがとうございます。
 If rngSearch.Offset(0, 1).NumberFormatLocal Like "*%" And _

    rngSearch.Offset(0, 1) = 0 Then
    TextBox3.Value = Format(Cells(rngSearch.Row, rngSearch.Column + 1), "0%")
 Else
  TextBox3.Value = Cells(rngSearch.Row, rngSearch.Column + 1).Value
 End If
としてみましたが検索対象セル「20%」が「0.195022374202142」と表示されます。
何処が違うのか教えていただけませんでしょうか。
(素焼き) 2024/05/01(水) 14:17:38

 >検索対象のセルが「10%」「50%」「20%」「150%」「200%」は、

 上記の%値と違ったらどうするのでしょうか?
 とりま表示だけ%にしてみました。

 Private Sub ComboBox2_Change()
    Dim myRange As Range
    Dim rngSearch As Range
    Set myRange = ActiveSheet.Range("C8:L71")
    Set rngSearch = myRange.Find(What:=ComboBox2.Value, LookIn:=xlValues, LookAt:=xlPart)
    If Not rngSearch Is Nothing Then
        If rngSearch.Offset(0, 1).NumberFormatLocal Like "*%" Then
            TextBox3.Value = Format(rngSearch.Offset(0, 1).Value, "0.0%") '%表示
            Else
            TextBox3.Value = rngSearch.Offset(0, 1).Value '整数表示
        End If
    End If
 End Sub

 ※"0.0%" ←ここは好きにしてください。
(あみな) 2024/05/01(水) 15:47:26

あみなさん 
私のつたない説明をご理解いただき助かりました。
思い描いた結果にたどり着きました、ありがとうございます。

(素焼き) 2024/05/01(水) 16:13:15


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.