Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Pro : Excel 2016)
マトリクス表の検索方法について
投稿日時: 21/07/01 17:36:14
投稿者: ガイア

いつもお世話になっております。
次のようなマトリクス表から、例えば、ステージが4で評価ランクがAの時、4000という値を取得したいのですが、どのようなコーディングとなりますでしょうか。
有識者の方からアドバイスを頂戴したく、よろしくお願いいたします。
 
 
             評価ランク
ステージ    S   A    B   C  D
    1    3000    2500    1250    500    0
    2    3000    2500    1250    500    0
    3    3250    2750    1500    500    0
    4    4500    4000    2500    500    0
    5    4500    4000    2500     0     0
    6    4500    4000    2500     0   0
    7    4500    4000    2500     0   0
 
 
以上、よろしくお願いいたします。

回答
投稿日時: 21/07/01 18:03:23
投稿者: WinArrow
投稿者のウェブサイトに移動

一般機能の中に
INDEX関数があります。
 
INDEX関数とMATCH関数を使えば、可能です。
ネット検索すれば、参考になる記事がみつかるでしょう。

回答
投稿日時: 21/07/01 18:45:05
投稿者: sk

引用:
次のようなマトリクス表から、例えば、ステージが4で評価ランクがAの時、
4000という値を取得したいのですが、どのようなコーディングとなりますでしょうか。

(標準モジュール)
---------------------------------------------------------------------------
Sub Test()
     
    Dim varResult As Variant
     
    varResult = GetScore(4, "A")
     
    If IsEmpty(varResult) Then
        Debug.Print "ヒットしたセルはありません。"
    Else
        Debug.Print varResult
    End If
 
End Sub
 
Function GetScore(Stage As Long, Rank As String) As Variant
 
    Dim rngStage As Range
    Dim rngRank As Range
     
    With ThisWorkbook.Worksheets("マトリクス表").Cells(1, 1).CurrentRegion
        Set rngStage = .Columns(1).Find(What:=Stage, After:=.Cells(1, 1), LookAt:=xlWhole)
        Set rngRank = .Rows(1).Find(What:=Rank, After:=.Cells(1, 1), LookAt:=xlWhole)
        If (Not rngStage Is Nothing) And (Not rngRank Is Nothing) Then
            GetScore = .Cells(rngStage.Row, rngRank.Column).Value
        End If
    End With
 
    Set rngStage = Nothing
    Set rngRank = Nothing
     
End Function
---------------------------------------------------------------------------
 
こういう感じのことが出来ればよい、ということでしょうか。

投稿日時: 21/07/02 10:48:52
投稿者: ガイア

WinArrowさん、skさん
 
アドバイスありがとうございました。
Index関数とMatch関数の組み合わせで組んでみたいと思います。