Excel VBA質問箱 IV

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

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


53201 / 76736 ←次へ | 前へ→

【28354】Re:match関数について
発言  ichinose  - 05/9/3(土) 8:53 -

引用なし
パスワード
   おはようございます。

シートSheet3に
以下の表があったとします。


   C   D    E    F    G    H
5      あ    い    う    え    お
6  イ   100   120    140   160   180
7  ロ   110   140    160   180   200
8  ハ   120   160    180   200   220
9  ニ   130   180    200   220   240


左端の数字が行番号、上端のアルファベットは列を表わします。

これで表の要素の起点をセル$D$6
列方向の要素数は 5
行方向の要素数は 4

と言うことにします。

関係をよく把握してください。


Userform1に配置するテキストボックスは、

>  Textbox1----検索行の指定用
         上記の表で「ロ」の指定で7行目を検索対象にします
でもこれは、Hirofumiさんの仕様のコンボボックスに賛成です。
変更は、考えてみて下さい

>  Textbox2----検索値指定用

>  Textbox3----検索結果表示用

  textbox4----検索の結果みつかった列見出し
        (上記の「あ」とか「い」)を表示

では、Userform1のモジュールです。
'================================
Dim 検索セル範囲 As String
Dim 検索開始セル As String
'****** ↓表の位置により以下の3つの値を変更します *******
Const strng As String = "$d$6" '表の起点セル
Const c_num As Long = 5 '表の列方向要素数
Const r_num As Long = 4 '表の行方向の要素数
'=======================================================================
Private Sub TextBox1_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
  Dim 行見出し As Range
  Dim crow As Variant
  With Worksheets("sheet3") '対象シートにする
    Set 行見出し = .Range(strng).Offset(0, -1).Resize(r_num, 1)
    crow = Application.Match(TextBox1.Value, 行見出し, 0)
    If Not IsError(crow) Then
     検索セル範囲 = .Range(strng).Offset(crow - 1, 0).Resize(, c_num).Address
     検索開始セル = .Range(strng).Offset(crow - 1, 0).Address
    Else
     MsgBox "行指定エラー"
     Cancel = True
     End If
    End With
End Sub
'=======================================================================
Private Sub TextBox2_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
  Dim 検索値 As String
  Dim col As Long
  With Worksheets("sheet3") '対象シートにする
    If Val(TextBox2.Value) > Application.Max(.Range(検索セル範囲)) Then
     MsgBox "検索値指定エラー"
     Cancel = True
    Else
     検索値 = TextBox2.Text
     col = .Evaluate("IF(ISERROR(MATCH(" & _
               検索値 & "," & 検索セル範囲 & ",1)),0," & _
              "IF(ISERROR(MATCH(" & 検索値 & "," & 検索セル範囲 & ",0))," & _
                "MATCH(" & 検索値 & "," & 検索セル範囲 & ",1)," & _
                "MATCH(" & 検索値 & "," & 検索セル範囲 & ",1)-1))")
               
     TextBox3.Text = .Evaluate("=OFFSET(" & 検索開始セル & ",0," & col & ",1,1)")
     TextBox4.Text = .Evaluate("=OFFSET(" & strng & ",-1," & col & ",1,1)")
     End If
    End With
End Sub


確認してください。
0 hits

【28222】match関数について KIKAKU 05/8/31(水) 15:44 質問
【28226】Re:match関数について ichinose 05/8/31(水) 16:42 発言
【28227】Re:match関数について KIKAKU 05/8/31(水) 17:33 お礼
【28233】Re:match関数について Hirofumi 05/8/31(水) 21:12 回答
【28238】Re:match関数について KIKAKU 05/9/1(木) 0:03 質問
【28242】Re:match関数について ichinose 05/9/1(木) 7:20 発言
【28273】Re:match関数について Hirofumi 05/9/1(木) 20:46 回答
【28275】Re:match関数について Hirofumi 05/9/1(木) 21:46 発言
【28305】Re:match関数について KIKAKU 05/9/2(金) 12:53 質問
【28311】Re:match関数について ichinose 05/9/2(金) 13:21 発言
【28340】Re:match関数について KIKAKU 05/9/2(金) 18:50 質問
【28354】Re:match関数について ichinose 05/9/3(土) 8:53 発言
【28365】Re:match関数について KIKAKU 05/9/3(土) 22:06 お礼
【28349】Re:match関数について Hirofumi 05/9/2(金) 22:21 回答

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