Range Object - Excel 97

Matrix
Mathematics
Range
Cells
Rows
Columns
Excel
VBA
Tips to calculate Matrix in Range Objects using Excel VBA.
本文を折り畳む 本文を開く

はじめに

Range Object数学 の行列計算に利用するサンプルです。 Excel のセル計算機能の中に含まれる行列機能は、データの入力や更新に慣れが必要なため、ユーザーに提供するワークシートでは使いにくい機能です。しかし、VBA と Range Object を組み合わせて、この行列機能を、もっと簡単に利用できます。
このサンプルでは、セルに通常の入力を行った状態で、行列演算に利用します。したがって、単純な Value や Formula プロパティを使います。一方、Excel の行列入力機能そのものを VBA から利用したいなら、 FormulaArray プロパティを用います。 FormulaArray については、ここでは説明しません。

実例

行列の基本計算

  1. 転置行列を計算します。
    Sub Range45()
        Dim A As Range, B As Range
        Set A = Sheet1.Range("C15:D16")
        Set B = Sheet1.Range("F15:G16")
        A.EntireRow.Clear
        A.Rows(1) = Array(0.7, -0.7)
        A.Rows(2) = Array(0.7, 0.7)
        B = Application.Transpose(A)
    End Sub
    
    Transpose で、 A の転置行列を B に書き出します。
    転置行列
     CDEFGH
    150.7-0.7 0.70.7 
    160.70.7 -0.70.7 
  2. 行列の積を計算します。
    Sub Range46()
        Dim A As Range, B As Range, C As Range
        Set A = Sheet1.Range("C15:D16")
        Set B = Sheet1.Range("F15:F16")
        Set C = Sheet1.Range("H15:H16")
        A.EntireRow.Clear
        A.Rows(1) = Array(0.7, -0.7)
        A.Rows(2) = Array(0.7, 0.7)
        B(1) = 1
        B(2) = 0
        C = Application.MMult(A, B)
    End Sub
    
    MMult で、行列 A と 行列 B の積を C に書き出します。
    行列の積
     CDEFGH
    150.7-0.7 1 0.7
    160.70.7 0 0.7
  3. 行列式を計算します。
    Sub Range47()
        Dim A As Range, B As Range
        Set A = Sheet1.Range("C15:D16")
        Set B = Sheet1.Range("F15")
        A.EntireRow.Clear
        A.Rows(1) = Array(0.7, -0.7)
        A.Rows(2) = Array(0.7, 0.7)
        B = Application.MDeterm(A)
    End Sub
    
    MDeterm で、行列 A の行列式を計算します。
    行列式
     CDEFGH
    150.7-0.7 0.98  
    160.70.7    
  4. 逆行列を計算します。
    Sub Range48()
        Dim A As Range, B As Range
        Set A = Sheet1.Range("C15:D16")
        Set B = Sheet1.Range("F15:G16")
        A.EntireRow.Clear
        A.Rows(1) = Array(0.7, -0.7)
        A.Rows(2) = Array(0.7, 0.7)
        B = Application.MInverse(A)
    End Sub
    
    MInverse で、行列 A の逆行列を B に書き出します。逆行列が計算できない場合にはエラーになります。実用的なコードを書くなら、先に行列式を計算してチェックしなければなりません。
    逆行列
     CDEFGH
    150.7-0.7 0.7142857140.714285714 
    160.70.7 -0.7142857140.714285714 

連立方程式の解

  1. 行列計算を利用して、連立方程式を解きます。
    2 x - 3 y = - 20
    5 x + 4 y = 65
    
    Sub Range49()
        Dim A As Range, B As Range, C As Range, D As Range
        Set A = Sheet1.Range("C15:D16")
        Set B = Sheet1.Range("E15:E16")
        Set C = Sheet1.Range("F15:G16")
        Set D = Sheet1.Range("H15:H16")
        A.EntireRow.Clear
        A.Rows(1) = Array(2, -3)
        A.Rows(2) = Array(5, 4)
        B = Application.Transpose(Array(-20, 65))
        C = Application.MInverse(A)
        D = Application.MMult(C, B)
    End Sub
    
    連立方程式の係数行列 A の逆行列 C を計算し、変数行列を D として、式 A・D = B の左から C をかけて、 D = C・B という関係から解を求めます。
    連立方程式の解
     CDEFGH
    152-3-200.173910.130435
    165465-0.217390.0869510
    x = 5
    y = 10
    

Download a Sample Code

上記の解説で用いたサンプルコードは、以下のリンクからダウンロードできます。テキストファイルとして用意しているので、保存して Excel の Visual Basic Editor にインポートしてください。
  1. Save a program source (sample-vbaxlra1-1.bas) on your local disk.
  2. Start Microsoft Excel with a blank(new) book.
  3. Open the Visual Basic Editor. (Tool/Macro/Visual Basic Editor)
  4. Import the downloaded program source. (File/Import Files)

History

2002/3/24
URL移転
2001/3/25
sample-vbaxlra1-1.bas revised
2001/3/25
初版
本文を折り畳む back to home index of VBA index of Mathematics