エクセルで行列計算を行う方法

このQ&Aのポイント
  • エクセルを使って行列計算を行う方法について説明します。
  • 行列計算の入力方法や数値を他のセルから取得する方法について解説します。
  • エクセルを使用して行列計算を行う際に便利な機能や注意点について紹介します。
回答を見る
  • ベストアンサー

行列計算の因子入力について

 エクセル、特に行列計算に関して初心者です。エクセルを使って行列計算を行おうと思います。  念のため、ここで言う「行列」とは、一般に使われる「行と列」と言う意味ではなく、数学上の行列計算、所謂マトリクス演算のことです。  例えば以下のような2×2の行列を入力する場合、  1 2  3 4 ={1,2;3,4} と入力すればよいと言うところまでは分かったのですが、ここの1~4までの数値は直接キーボード等から入力することしかできません。  私としては別のセルにある数値や計算結果等をこの部分、たとえば「1」のところの値にしたいのですが、どうすればよいのでしょう?  以上、よろしくお願いいたします。

  • yatsu
  • お礼率88% (173/195)

質問者が選んだベストアンサー

  • ベストアンサー
  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.4

 例えば {B2,D3;F5,H99} などの様にセル番号で指定した配列にしたいという事ですね。  回答No.1様が仰っておられる様に、直接そうする方法はおそらく無いと思いますが、例えば前もって X1セルに =$B$2 Y1セルに =$D$3 X2セルに =$F$5 Y2セルに =$H$99 と入力しておいた上で、関数の中の {B2,D3;F5,H99} という部分の代わりに $X$1:$Y$2 というセル範囲を指定しておけば同じ結果が得られます。(回答No.2様が仰っておられるのはこの事です)  又、上記の$X$1:$Y$2という値を一時格納するために用いているセル範囲は、何も同一シート内に設定しなくとも良いのですから、例えば {Sheet1!$B$2,Sheet1!$D$3;Sheet1!$F$5,Sheet1!$H$99} 等としたい場合には、 Sheet2!A1セルに =Sheet1!$B$2 Sheet2!B1セルに =Sheet1!$D$3 Sheet2!A2セルに =Sheet1!$F$5 Sheet2!B2セルに =Sheet1!$H$99 としておいた上で、配列部分を Sheet2!$A$1:$B$2 とすれば良い訳です。  この方法では駄目なのでしょうか?

yatsu
質問者

お礼

ご回答ありがとうございました。 まさにこれです、感謝いたします。

その他の回答 (3)

  • bunjii
  • ベストアンサー率43% (3589/8248)
回答No.3

>私としては別のセルにある数値や計算結果等をこの部分、たとえば「1」のところの値にしたいのですが、どうすればよいのでしょう? マトリクス演算の場合は{数列}×{数列}や{数列}+{数列}のように計算されると思いますが、提示の数列は2行×2行の1組であり数式を書けません。 例えば={1,2;3,4}×{5;6}としたときにセルへ値を入力してあればセルを対象に数式を書けます。 A1=1 B1=2 A2=3 B2=4 C1=5 C2=6 =A1:B2*C1:C2 → {1,2:3,4}*{5;6} → {5,10;18,24} =A1:B2+C1:C2 → {1,2;3,4}+{5;6} → {6,7;9,10} しかし、1つのセルには1つの値しか収容できませんので配列の戻り値のどれを採用するか定めなければなりません。 戻りの配列の合計を求めるにはSUMPRODUCT関数を使います。 =SUMPRODUCT(A1:B2*C1:C2) → 57 =SUMPRODUCT(A1:B2+C1:C2) → 32

yatsu
質問者

お礼

ご回答ありがとうございます。

yatsu
質問者

補足

 結局、行列の演算結果として個々に別セルで表示させることは可能だが、行列形式として入力することは不可能と言うことでしょうか?  例えば提示した2×2の行列の逆行列を、エクセルの行列形式として別のセルに表示するというとは不可能と言うことでしょうか?

  • f272
  • ベストアンサー率46% (7998/17099)
回答No.2

わざわざ,={1,2;3,4}のように入力しなくてもよい。 A1に1 B1に2 A2に3 B2に4 と入力しても同じように扱えます。 もちろん A1に=A100 と入力することも可能です。

yatsu
質問者

お礼

ご回答ありがたいのですが、それで行列計算ができるのでしょうか?

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

>たとえば「1」のところの値にしたいのですが、どうすればよいのでしょう? { }で囲った配列入力にセル参照を読み込ませる方法はありません。 2×2個の4セルに4要素を記入し,A1:B2のようにセル範囲を指定して計算します。

yatsu
質問者

お礼

基本的に不可能ということですね、わかりました。ありがとうございました。

関連するQ&A

  • 関数中にセルに入力した値を反映させて計算を行いたい

    こんにちは Excelを用いた計算を行っているのですが 自分の知識では出来なかったために皆様の知恵を借りたいと思っています Excelで単純な足し算を行いたいのですが とあるセルに入力した値によって計算範囲を変更したものを作りたいと考えています 仮にA行1列からA行20列まで各セルに1,23…20と順番に1つの数字が各セルに入力されていたとします この時, B行1列のセルに5という数字が入力されていたら C行1列にA行1列数字とA行5列の数字の和が入力される (イメージとしたら結果として1+5より6が出力される) B行1列のセルに10という数字が入力されていたら C行1列にA行1列数字とA行10列の数字の和が入力される (イメージとしたら結果として1+10より11が出力される) ような関数を作りたいと考えています 自身の甘い考えで B行1列のセルに5という数字が入力されていたら C行1列にA行1列数字とA行5列の数字の和が入力されるのは C行1列に=A1+A(B1)と入力したら出来るのではないかと考えていたのですが どうもできないみたいです なにか方法等浮かぶ方がいらしましたら回答をお願いします

  • 多次元配列の行列

    1番 キーボードから3×3の行列の要素を2次元配列に入力した後、その値を表示するプログラムをさくせいせよ 2番 キーボードから3×4の行列の要素を2次元配列に入力した後、転置行列を出力するプログラムをさくせいせよ 3番 2つの行列A(3×3行列)、B(3×3行列)の買う要素の値をキーボードから2つの配列に入力し、2つの行列、並びに、それらの和、差、積の行列を出力するプログラムを作成せよ(Bに単位行列を入れて検算せよ) 4番 2行3列の行列と3行2列の積を求めるプログラムを作成せよ どなたかわからないでしょうか?? 数が多くてすみません。 わかる方お願いします!!

  • 行列の積の計算について

    ;は行換え、,は列換えを表すものとします。 Pk = [1,2,3] 1行3列 Qk = [1;2;3] 3行1列 R = [3,2,1; 2,4,5; 7,2,1] 3行3列 としたときに、Pk*Qk*Rを計算したいのですが、まず、 Pk*Qkを計算すると、1*1 + 2*2 + 3*3で1行1列の[14] になります。その後、この[14]*Rを計算するわけですが、 行列の積は、左の行列の列数と右の行列の行数が一致していない と計算できないので、この場合はどう計算するんですか?

  • アルゴリズム(行列積)

    行列M1,M2,M3,M4が以下の数の行、列を持つ行列としたとき、行列積M1,M2,M3,M4をもっとも少ない演算回数で計算するには、どの順序で計算すればよいか? M1:20行60列 M2:60行5列 M3:5行20列 M4:20行100列 全くわかりません(>_<)みなさま手取り足取り教えてくださいm(__)m

  • 行列式の計算

    n次正方行列Aの、i行j列の成分をA(i,j)とすると A(i,j)=a(j)^(i-1)  *(j)はaの添え字を表す と書けるとします。 このとき、Aの行列式|A|はどのように計算すればよいでしょうか? 各列から第1列を引くと、第1行がほとんど0になり、 各列から a(j)-a(1) が括り出せることはわかりますが、 そこから計算が進みません。 よろしくお願いします。

  • エクセルでの行列計算がうまくいきません

    よろしくお願いします。 いまエクセルで行列計算をしています。 行列[108(行)×35(列)]とその転置行列[35×108]の積から行列[108×108]を出そうとしているのですがうまくいきません。 #valueエラーがでます。 関数mmultを使用しています。 転置行列は関数transposeを使いました。 [35×108]・[108×35]=[35×35]ではちゃんとでるのですが、108×108ではだめなので、元データには問題はないと思います。 一体何がエラーの原因として考えられるのでしょうか。 よろしくお願いします。

  • ブール代数を元に持つ行列の逆行列の計算法について

    ブール代数の演算 0+0=0 0+1=1+0=1 1+1=0 のもとで、 行列 | 1 1 | を求めるとします(うまく表現できませんが、2×2の行列です)。     |  0 1 |  掃き出し法で  | 1 1 1 0 | →   | 1 0 1 1 |  | 0 1 0 1 |      | 0 1 0 1 | (1行目に2行目を足した) だから     | 1 1 |     |  0 1 |  が求める答えになるかと思います。 が、この計算は妥当でしょうか? また、妥当な場合、もっと大きな行列(5×5とか)でも簡単に計算できるようなプログラムをご存知ないでしょうか。Mathematicaとかで簡単に計算できればいいのですが・・・。

  • すでに入力されている数字で計算をしたい

    数字が入力されている表があります D列E列F列の数字をそれぞれB列の数字で割り算をしたいと考えています 割り算の答えは同じそのセルに上書きするようにします 別のセルで計算した結果を値貼り付けでもってきていたのですが、 マクロで処理できればと考えております 2行目から数字が入力されているのですが、 最終行が決まっておりません。 答えは全て小数点第2位までで表示したいと考えています どなたかご教授いただけますでしょうか よろしくお願い致します

  • 分散共分散行列の逆行列

    以下の行列を考えます. 行列X(M行N列,成分の値は分散1のガウスノイズ) 行列Xの分散共分散行列S(M行M列), 行列Sの逆行列Y(M行M列) N=M+1のときはN≠M+1のときに比べて行列Yの各成分の大きさがかなり大きくなる,という結果が得られました. (計算にはMATLABの関数covとpinvを用いました.) これは数学的に正しいことなのでしょうか. また,正しいとしたらどうしてこのようなことが起こるのでしょうか. 行列Yの計算結果の例を以下に示します.(行列Yを500回算出し,それらの平均値を示しています.) http://wisteria.orz.ne.jp/download/pinvcovX.jpg 縦・横方向の軸は行列Yのインデックスを,高さ方向の軸は行列Yの成分の値を示しています. 上述した現象の原因についてご教授いただけると幸いです.

  • 行列の計算について。

    こんにちは。 JAVAで行列の計算をするプログラムを作っていますが、なかなかうまくいきません。 自分で考えたのはfor文を使った物です。行列数を入力するとその数だけの行列を作る、という物なのですが、どうもうまくいきません。 「2」を入力すると、 │1 2││5 6│ │   ││   │ │3 4││7 8│ こんな2行2列の行列の計算をする、というものです。 for (int i =0; i < 2; i++){ for (int j = 0; j<2; j++){ for (int k = 0; k<2; k++){ C[i][j]=C[i][j]+a[i][k]*b[k][j]; } } } 上のようなプログラムを考えました。 JAVAには行列の計算をする専用の関数(クラス?)などあるのでしょうか? また、ソースなど教えていただけると、とても助かります。 CからJAVAに急に移ったので、つまづくことが非常に多いです。 よろしくお願いします。

    • ベストアンサー
    • Java

専門家に質問してみよう