- ベストアンサー
excelでの行列の計算について
excelに入力された数値を計算したいのですが、良い方法が思いつきません。 VBAを使えば簡単にできそうな気もしますが、自分にVBAを作る能力はありません(笑)。 $(参照?)をうまく使えば出来そうな気もしますが、1日考えて頭が痛くなりました… なので、どなたか力を貸してください。 A1~E5まで数値が入っています。 A1+B1+C1+…= A2+B1+C1+…= ↓ A3+B3+C3+…= ↓ A5+B5+C5+…= …という感じで総当たりで計算をしたいんですが、いい方法をご存知の方がいらっしゃいましたらご享受下さい。 また、そんなのExcelでは無理だとか、Excel以外でできるソフトを知ってるとか、なんでも構いませんので情報をお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
>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や本で勉強してください。 気に入れば役立つようであれば、セルに結果を出すコードを挙げますが。
その他の回答 (3)
- okormazd
- ベストアンサー率50% (1224/2412)
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 趣味だな。
お礼
アドバイスありがとうございました。 おふたかたのコードを参考に色々試してみたら出来ました。(多分…) こんな感じのデータで下のコードをエディタに入れたらそれっぽい 結果が出てきました。 もし間違ってたり、もっとスマートな書き方がありましたらご享受下さい。 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
補足
再回答ありがとうございます。 自分の説明不足で申し訳ないのですが、総当たりというのは全ての値の総当たりではなく、 「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)
何個足し算するんだ? 5個だと 25C5=53130 じゃないか。 だから、 VBAならできるだけど、5万セル埋めるのか。数式でやるとすると、作業領域なんか作ってやったりすると、腕が疲れるだろう。
補足
早速の回答ありがとうございます。 自分は数学に全く疎いのであまり自信はないのですが、5×5だと、5の5乗で3125だと思っていたのですが、53130にもなりますか・・・(汗) 実際は5×5ではなく、2行だったり、3行だったり5行だったりなのですが、やっぱりVBAでないと難しいのでしょうか? ■■■■■■ ■■■■■■ ■■ ■ ■ ■ ■ ↑ こんな感じです。。
- gyouda1114
- ベストアンサー率37% (499/1320)
お礼
No,4の方に教えていただいたコードと合わせて大満足の表示が出来、 おふたかたに大変感謝します。 これから少しづつVBAについて勉強してみようと思います。 ありがとうございました。
補足
早速の回答ありがとうございます。 VBAに興味はあったのですが、実際に初めて使ってみて感動しました。。 この計算結果をセルに入れていくことも可能だと思いますが、 6行目の「MsgBox~」の行を「セルに記入」と命令すればよいのでしょうか?