プロが教えるわが家の防犯対策術!

excelに入力された数値を計算したいのですが、良い方法が思いつきません。
VBAを使えば簡単にできそうな気もしますが、自分にVBAを作る能力はありません(笑)。
$(参照?)をうまく使えば出来そうな気もしますが、1日考えて頭が痛くなりました…

なので、どなたか力を貸してください。

A1~E5まで数値が入っています。
A1+B1+C1+…=
A2+B1+C1+…=
  ↓
A3+B3+C3+…=
  ↓
A5+B5+C5+…=

…という感じで総当たりで計算をしたいんですが、いい方法をご存知の方がいらっしゃいましたらご享受下さい。

また、そんなのExcelでは無理だとか、Excel以外でできるソフトを知ってるとか、なんでも構いませんので情報をお願いします。

A 回答 (4件)

    • good
    • 0

何個足し算するんだ?


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

この回答への補足

早速の回答ありがとうございます。
自分は数学に全く疎いのであまり自信はないのですが、5×5だと、5の5乗で3125だと思っていたのですが、53130にもなりますか・・・(汗)

実際は5×5ではなく、2行だったり、3行だったり5行だったりなのですが、やっぱりVBAでないと難しいのでしょうか?

■■■■■■
■■■■■■
 ■■ ■ 
 ■
 ■
 ■
  ↑
こんな感じです。。

補足日時:2008/10/10 22:51
    • good
    • 0

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


これは標題として不適当。
エクセルでは、数学の行列の演算の関数などもあり、そちらを思ってしまう。
こんな課題をやって何の意味があるのかな。
多分何かの課題の一部で、質問者の考えで思いついた点を質問したのだろう。
課題の全貌は?
しかし多分それを解決するには、数理の理論の知識が必要ではないかな。
>VBAを使えば簡単にできそうな気もしますが
VBAでのコードは割合簡単。VBAを全体に学習するのではないから、勉強したら。
例データ
158
269
3710
4811
コード
標準モジュール
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や本で勉強してください。
気に入れば役立つようであれば、セルに結果を出すコードを挙げますが。

この回答への補足

早速の回答ありがとうございます。
VBAに興味はあったのですが、実際に初めて使ってみて感動しました。。

この計算結果をセルに入れていくことも可能だと思いますが、
6行目の「MsgBox~」の行を「セルに記入」と命令すればよいのでしょうか?

補足日時:2008/10/10 23:05
    • good
    • 0
この回答へのお礼

No,4の方に教えていただいたコードと合わせて大満足の表示が出来、
おふたかたに大変感謝します。

これから少しづつVBAについて勉強してみようと思います。

ありがとうございました。

お礼日時:2008/10/11 11:30

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(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」を合わせればセルに結果を表示させられると思うのですが、自分でも試してみようと思いますが、
アドバイスがありましたらまたご享受お願いいたします。

補足日時:2008/10/11 08:39
    • good
    • 0
この回答へのお礼

アドバイスありがとうございました。
おふたかたのコードを参考に色々試してみたら出来ました。(多分…)

こんな感じのデータで下のコードをエディタに入れたらそれっぽい
結果が出てきました。

もし間違ってたり、もっとスマートな書き方がありましたらご享受下さい。

ABCDE

12342
23453
345 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

お礼日時:2008/10/11 11:25

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!