• ベストアンサー

excelでの行列の計算について

excelに入力された数値を計算したいのですが、良い方法が思いつきません。 VBAを使えば簡単にできそうな気もしますが、自分にVBAを作る能力はありません(笑)。 $(参照?)をうまく使えば出来そうな気もしますが、1日考えて頭が痛くなりました… なので、どなたか力を貸してください。 A1~E5まで数値が入っています。 A1+B1+C1+…= A2+B1+C1+…=   ↓ A3+B3+C3+…=   ↓ A5+B5+C5+…= …という感じで総当たりで計算をしたいんですが、いい方法をご存知の方がいらっしゃいましたらご享受下さい。 また、そんなのExcelでは無理だとか、Excel以外でできるソフトを知ってるとか、なんでも構いませんので情報をお願いします。

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

>excelでの行列の計算について これは標題として不適当。 エクセルでは、数学の行列の演算の関数などもあり、そちらを思ってしまう。 こんな課題をやって何の意味があるのかな。 多分何かの課題の一部で、質問者の考えで思いついた点を質問したのだろう。 課題の全貌は? しかし多分それを解決するには、数理の理論の知識が必要ではないかな。 >VBAを使えば簡単にできそうな気もしますが VBAでのコードは割合簡単。VBAを全体に学習するのではないから、勉強したら。 例データ 1 5 8 2 6 9 3 7 10 4 8 11 コード 標準モジュール Sub test01() For i = 1 To 4 For j = 1 To 4 For k = 1 To 4 t = Cells(i, "A") + Cells(j, "B") + Cells(k, "C") MsgBox t & "=A" & i & "+B" & j & "+C" & k Next k Next j Next i End Sub 実行はF5 途中でCTRL+Pauseキーで中断してください。匂いだけ嗅いでください。 マクロの実行の仕方に関することは、WEBや本で勉強してください。 気に入れば役立つようであれば、セルに結果を出すコードを挙げますが。

yoshi_so
質問者

お礼

No,4の方に教えていただいたコードと合わせて大満足の表示が出来、 おふたかたに大変感謝します。 これから少しづつVBAについて勉強してみようと思います。 ありがとうございました。

yoshi_so
質問者

補足

早速の回答ありがとうございます。 VBAに興味はあったのですが、実際に初めて使ってみて感動しました。。 この計算結果をセルに入れていくことも可能だと思いますが、 6行目の「MsgBox~」の行を「セルに記入」と命令すればよいのでしょうか?

その他の回答 (3)

  • okormazd
  • ベストアンサー率50% (1224/2412)
回答No.4

ANo.2 です。 行、列に関係なく総当りで5個足し算するんだよね。 ほれ、総当り。 Sub combi2() Dim s(25) n = 0 For r = 1 To 5 For c = 1 To 5 n = n + 1 s(n) = Cells(r, c) Next Next n = 0 For i = 1 To 25 For j = i + 1 To 25 For k = j + 1 To 25 For l = k + 1 To 25 For m = l + 1 To 25 n = n + 1 ss = s(i) + s(j) + s(k) + s(l) + s(m) r1 = Int((i - 1) / 5) + 1 c1 = (i - 1) Mod 5 + 1 r2 = Int((j - 1) / 5) + 1 c2 = (j - 1) Mod 5 + 1 r3 = Int((k - 1) / 5) + 1 c3 = (k - 1) Mod 5 + 1 r4 = Int((l - 1) / 5) + 1 c4 = (l - 1) Mod 5 + 1 r5 = Int((m - 1) / 5) + 1 c5 = (m - 1) Mod 5 + 1 Cells(n, 6) _ = Cells(r1, c1).Address(RowAbsolute:=False, columnabsolute:=False) & _ "+" & Cells(r2, c2).Address(RowAbsolute:=False, columnabsolute:=False) & _ "+" & Cells(r3, c3).Address(RowAbsolute:=False, columnabsolute:=False) & _ "+" & Cells(r4, c4).Address(RowAbsolute:=False, columnabsolute:=False) & _ "+" & Cells(r5, c5).Address(RowAbsolute:=False, columnabsolute:=False) & "=" Cells(n, 7) = ss Next Next Next Next Next End Sub 趣味だな。

yoshi_so
質問者

お礼

アドバイスありがとうございました。 おふたかたのコードを参考に色々試してみたら出来ました。(多分…) こんな感じのデータで下のコードをエディタに入れたらそれっぽい 結果が出てきました。 もし間違ってたり、もっとスマートな書き方がありましたらご享受下さい。 A B C D E 1 2 3 4 2 2 3 4 5 3 3 4 5   4 4   6   5 5      6 6      7       8       9 Sub test01() n = 0 For i = 1 To 6 For j = 1 To 3 For k = 1 To 4 For l = 1 To 2 For m = 1 To 8 n = n + 1 t = Cells(i, "A") + Cells(j, "B") + Cells(k, "C") + Cells(l, "D") + Cells(m, "E") Cells(n, "F") = "A" & i & "+B" & j & "+C" & k & "+D" & l & "+E" & m Cells(n, "G") = t Next m Next l Next k Next j Next i End Sub

yoshi_so
質問者

補足

再回答ありがとうございます。 自分の説明不足で申し訳ないのですが、総当たりというのは全ての値の総当たりではなく、 「A(1~5)+B(1~5)+C(1~5)+D(1~5)+E(1~5)」という感じです。 なので「A1+A2+A3+A4+A5」などの結果は必要ありません。 私はVBAの知識はないのですが、何となく見た感じで 「A1+A2+A3+A4+A5」などの計算も入っている様に見えます。 おそらくNo3の方が書かれたコード(っていうのかな?)に、今回回答いただだいた最後から7行目のCells 「(n,7)=ss」を合わせればセルに結果を表示させられると思うのですが、自分でも試してみようと思いますが、 アドバイスがありましたらまたご享受お願いいたします。

  • okormazd
  • ベストアンサー率50% (1224/2412)
回答No.2

何個足し算するんだ? 5個だと 25C5=53130 じゃないか。 だから、 VBAならできるだけど、5万セル埋めるのか。数式でやるとすると、作業領域なんか作ってやったりすると、腕が疲れるだろう。

yoshi_so
質問者

補足

早速の回答ありがとうございます。 自分は数学に全く疎いのであまり自信はないのですが、5×5だと、5の5乗で3125だと思っていたのですが、53130にもなりますか・・・(汗) 実際は5×5ではなく、2行だったり、3行だったり5行だったりなのですが、やっぱりVBAでないと難しいのでしょうか? ■■■■■■ ■■■■■■  ■■ ■   ■  ■  ■   ↑ こんな感じです。。

  • gyouda1114
  • ベストアンサー率37% (499/1320)
回答No.1

関連するQ&A

  • エクセルで計算させる上で

    どなたか教えてください!!! エクセルでA段のセルにB段-C段の計算式を入れたいのですが、B段に数値を入れないときには計算させないようにするにはどうすればいいですか? 今わたしの作成したものだと、B段に数値が入っていないときに、C段に数値を入れた場合、0だとみなして、A段にマイナスのC段の数値が表記されてしまいます。B段が空白のときに計算させないような約束事みたいなものをつけたいのですが・・・ わたしのこの文章力で通じますでしょうか?どなたかお力かしてください!!

  • エクセル計算式について

    エクセル計算式でホームページ上からエクセルに計算をする際データを集計したいと思ってます。 A5に10/1 B5に10/2 C5に数値 が入力をされています。 日付が入り乱れて入っているのですが、 このA5 B5の数値の間の期間のみのC5の数値を 別のシートで集計がとりたいのです。 INDIRECT関数を使えばよいのでしょうか。 どなたかご回答お願いできますでしょうか。 よろしくお願いいたします。

  • エクセルの計算式なのですが

    エクセルの計算式なのですが A=BC^D の式で、 Bの値を求めたいのです。 A,C,Dの値は数値は出ているのですが、エクセルの計算式をどう組むとBの値を出せるのか計算式がわかりません。 どなたか計算式を教えて頂けないでしょうか?

  • EXCELの計算結果によって音を出したりはできますか?

    こんにちは。 エクセルの計算結果の数値が一定以上ならサウンドを出したりさせる方法はありませんでしょうか? 例えば、C1=A1-B1 の様な計算式を設定しておくとして、C1の数値が10以上なら音を出して知らせる、というような事をしたいと思っています。 A1 B1 C1 100 80 20 ←この場合計算結果のセルC1の数値が10以上なので音が出る EXCELの標準機能だとできないと思うのですが、何かしらの方法を使って実現することはできますでしょうか?

  • エクセルの対数の計算

    初歩的な質問です。セルA1,B1に数値を入力して C1にB1/A1を計算させて表示、次にD2に20*log(C1で出た数値そのものを入力/C1)にすると、ほぼゼロに近い数値(1.76011E-10)がでます。数学の計算ですと20*log1=0になったはずですが、なぜエクセルで計算でするとこのような数値になるのでしょうか?

  • エクセル 違うシートに計算式がある場合

    エクセル2000を使っています。 下記の計算をしたいのですが、方法を教えてください。 1.Sheet1 A1とB1に計算したい元の数値が記入されています。 例えば、A1=1 B1=2 2. Sheet2 のA1とB1に数値が入る事としてC1に計算結果が出るものとします。 3. Sheet1のC1にSheet2のC1の内容を表示したい。 4. Sheet1 A2、A3・・・・・、B2、B3・・・・・に入力した後で、C2、C3・・・・・・に Sheet2のC1で計算させた結果を自動的に入力したい。 別の言い方をすれば、Sheet2 のA1・B1が関数の入力するところにあたり Sheet2のC1が関数の出力(というか、計算結果)にあたります。 Sheet1からSheet2を関数のように使いたいのです。 Sheet1 ____ A_____B_______C 1___1_____2______3 2___2_____3______5 3___5_____8______13 4___9_____1______10 5___4_____5______ 9 Sheet2 ____A_____B_____C 1________________ =A1+B1 2_____________________ こんなイメージです。 Sheet2で計算の入力に対応するセルがA1・B1 計算結果が書いてあるのがC1 実際は、大きな表を参照しながら計算するので、色々計算した結果(途中計算は他のセルも使います)がC1に表されます。 以上、よろしくお願いします。

  • エクセルでの一括計算方法がありましたら教えてください

    エクセルでの一括計算方法がありましたら教えてください A2~A60の1列に数値が入っています。 B2~B60の1列にも数値が入っています。     A2について、「A2+B2、A2+B3、・・・・、A2+B60」と計算し、     結果をCの一列C2、C3、・・・・、C60に表示     A3についても同様に「A3+B2、A3+B3、・・・・、A3+B60」と計算し、     結果をDの一列D2、D3、・・・・、D60に表示 以下同様にA60まで行いたいのですが、簡単に計算できる方法はあるでしょうか? セルごとに関数を入れる以外に方法があれば と思って質問しました。 ご存知の方がいらっしゃいましたら ご指導 よろしくお願いします。

  • エクセルで再計算のエラーが出る

    エクセルで、INDEX関数と循環参照を使って表を作っています。 <INDEX> Sheet1には、A列に名前(2000ケースくらい)、B列以降に毎日のある数字(100日分)が入力されています。 ただし、A列に名前はあるが、B列以降に数字が入力されていない場合も混じってあります。 Sheet2にはINDEX関数を使って、あるセルC1に「1」と入力すればSheet1のA1の毎日の数字がSheet2のA1からA100に参照されるように作ってあります。 C1に「2」と入力すればSheet1のA2の毎日の数字が参照されます。 <循環参照> 上記のSheet2にでは、明らかに少なすぎるデータを欠損データとするように循環参照をしています。 具体的には、とある1日のデータが、100日分の平均値の10分の1未満の場合には欠損とするようにしてあります。 Sheet2のセルA1からA100に100日分の数値がINDEXで参照されており、 セルB1に「=if(A1="","",if(A1=0,"",if(A1<A102,"",A1)))」 セルB2~B100までB1と同様の計算式 セルB102に「=B102/10」 セルB101に「=average(B1:B100)」 と、循環参照させてあります。 エクセルのオプションの「数式」の「ブックの計算」は自動、「反復計算を行う」にチェックし反復回数は100(100日分あるため)、変化の最大値は1(小数点以下の数値は必要ないので)にしてあります。 <計算エラー> 上記のINDEXと循環参照を利用して通常は問題はありませんが、 Sheet1に数値が入力されていないケースが出た後にエラーが出て来ます。 Sheet1のA列で、例えばA4のケースに100日分のデータが入力されていなかったとします。 Sheet2のC1に1~3の数値を入力した時は問題ありませんが、4を入力したらB列は全て「#NUM」と表示されます。 これは、循環参照をするにもできないからなので、理解できます。 その後は、C1に何を入力しても(さっきは問題なかった1~3を入力しても)、「#NUM!」が表示されたままになり、循環参照の再計算がうまくいきません。 主動でF9を押して再計算も「#NUM!」のままになります。 どのようにすれば、これを回避できるでしょうか? 最終的には、グラフ等を作成して、マクロを組んで一括で数百ケース程を印刷しようと思っています。 アドバイスよろしくお願いいたします。 ※ Office Home and Business 2010 Windows7 professional 32bit を使用しています。

  • エクセルの再計算について

    お世話になります。 Excel97を使用して、作表をしているのですが…。 IF(A1=B1,SUMIF(式),C3)という関数をC3に入力しています。 条件に見合えば、C3にSUMIF関数の結果を反映し、条件に見合わない場合、C3の数値をそのままC3に残しておくという目的の式のつもりです。 当然「循環参照」になるので、反復計算のチェックボックスをオンにして対処しようとしたのですが、保存した時に反復計算がオフになってしまうため、開く度に循環参照のエラーメッセージが出てしまいます。 マクロは全く知識がないため、反復計算で乗りきろうとしていたのですが、[ツール]-[オプション]のチェックを保存できる方法はないのでしょうか。 反復計算のチェックが有効にセーブされればと思っているのですが…。 ご教示、よろしくお願い致します。

  • エクセルのループ計算?方法について

    エクセルにおいて同じ計算式?を指定回数繰り返す方法を教えてください。 一つ一つ計算する方法は↓ A B C 1 10,000 0.2 =A1*B1 2 =A1-C1 0.2 =A2*B2 3 =A2-C2 0.2 =A3*B3 というように1年毎に前年度の求めたCの列の数値を差し引きし、その額をA列から控除して毎年度繰り返し計算する減価償却定率法の計算の答えを一発で3年と入力すれば、C列の合計額を求める方法を教えてください。

専門家に質問してみよう