こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

エクセルで総当り

エクセル2003を使用しています。

総当りの計算がしたいのですが、どうすればよいのかわからないので
質問させていただきます。

セルA1、A2,A3,A4,A5…に数値があります。
セルA1とA2を計算、セルA1とA3を計算、セルA1とA4を計算…
セルA2とA1を計算、セルA2とA3を計算…

というふうに、総当りをしたいのですが
(1)セルA1とA2を関数を使って計算したあとにオートフィルをすると

セルA2とA3、セルA3とA4、セルA4とA5…

で計算されてしまいます。
(1)の計算後に、セルA1とA3の計算をし、2つ分を囲み
オートフィルを使用しても、上に述べた計算結果が出ます。

どうすれば、総当りの計算が出来るのでしょうか??

説明が下手でわかりにくいかもしれませんが、よろしくお願いします。

投稿日時 - 2007-11-12 04:05:40

QNo.3510581

すぐに回答ほしいです

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

絶対参照を使ってみてください。
数式を入力するときに、『=$A$1*A2』というようにアルファベットと数字の前に$ドルマークを付けます。
これでオートフィルをすると、A1*A3,A1*A4…と$を付けたところが固定されて処理されます。
アルファベットや数字の片方だけにつけることもできますので、うまく応用してみてください。

投稿日時 - 2007-11-12 04:25:41

お礼

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

エクセルは初心者なので、難しいですが
教えていただいた絶対参照を使ってみたいと思います。

投稿日時 - 2007-11-13 00:57:30

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(6)

ANo.6

こんにちは。
#2の回答者です。

>セルA1、セルA2…などにある数値は、既に計算した結果の数値です。

結果が数値で、A1から下に値が存在しているなら、私の書いた統一式を

B1 ~右列にオートフィルで、数値が出てこなくなるまで、
=IF(ROW(A1)>ROWS($A$1:$A$5)-COLUMN(A1),"",OFFSET($A$1,COLUMN(A1)-1,)+OFFSET($A$1,ROW(A1)+COLUMN(A1)-1,))

こんどは、B1 ~右列の端までをオートフィルで、下に数値が出てこなくなるまで
行えばよいのですが、

>今まで手で計算していたのですが、数が多く、半月経っても半分も計算が終わらないのでエクセルでしようと思っています。

「計算し」と書かれてあっても、どんな演算式かも聞かされてはおりません。引き算・割り算なら、場合によっては、違う可能性もあるわけです。

ここで書かれた内容で応用が利かないようでしたら、もう一度、全体像から、具体的に話をしていただかないといけないかもしれません。

投稿日時 - 2007-11-13 08:55:28

お礼

ありがとうございます。

何日かエクセルで頑張って格闘しましたが、結局難しくて挫折してしまいました。・゜・(ノд`)・゜・。

計算が多く、エクセルで計算していると自分でわけがわからなくなってしまい、挫折しました。
計算は、足し算・引き算・掛け算・割り算・二乗・√
全てを使います。

教えていただいたのに、申し訳ないです。

また時間が出来ましたら、エクセルの勉強をしたいと思います。
ありがとうございました。

投稿日時 - 2007-11-20 15:52:54

ANo.5

#4です。ゴメンなさい。
> 同じ数値は計算しない場合です。
と書きましたが、意味なかったですね。
1行目の計算式は、
誤:
=INDIRECT("A"&COLUMN()+1,TRUE)

正:
=INDIRECT("A"&COLUMN(),TRUE)

と訂正します。左上から右下へかけての、同一数値同士の演算は無視してくださいね。

投稿日時 - 2007-11-13 07:47:49

お礼

ありがとうございます。

何日かエクセルで頑張って格闘しましたが、結局難しくて挫折してしまいました。・゜・(ノд`)・゜・。

計算が多く、エクセルで計算していると自分でわけがわからなくなってしまい、
現在は手で一生懸命計算しています。

教えていただいたのに、申し訳ないです。

また時間が出来ましたら、エクセルの勉強をしたいと思います。
ありがとうございました。

投稿日時 - 2007-11-20 15:49:51

ANo.4

計算対象となるセルがメチャクチャ多くないなら、
マトリクス表を別シートに作ってしまい、計算させるのはダメですか?
九九の表のイメージです。
元データがSheet1のA1~A13にあるとしたら、
Sheet2のA2に、
=Sheet1!A1
として、下にコピー
Sheet2のB1に
=INDIRECT("A"&COLUMN()+1,TRUE)....同じ数値は計算しない場合です。
として右にコピー。
あとは
B2からM14(13行の場合)に計算式を書けばよいのでは?
例えば、総当たりのかけ算(本当はもっと複雑な式なのでしょうが)なら、
B2に
=$A2*B$1
として、これをM14までコピーすれば良いでしょう。
とにかく、A列の値は「$A1」、1行目の値は「B$1」として計算式を作ればOKです。
同じ計算式なのでしょうから、B2に1tuだけ入力して、あとはコピーでいけます。
ただし、計算が複雑だったり、コピーするセルが結構多い場合は、B2に入れた式をコピーする前に、
「ツール」-「オプション」-「計算方法」で「手動」にチェックを入れておく方が無難です。

ご参考まで....

投稿日時 - 2007-11-13 07:36:18

ANo.3

一応絶対参照にすればA列は動かなくなるので、それが答えです。
ーー
しかし、こういう組み合わせや順列的計算は、エクセルでも限りがあるでしょう。
複写もそうそう自動的に複写ではできない局面が出てくるでしょう。
また式がシートのセルに沢山設定されるとエクセルの処理が、破綻するかもしれない。
ーー
ですからプログラム(とりあえず身近なVBA)で繰り返し演算をする。
繰り返しのステートメントは、ネストできる(下記でFor-Nextの中にFor -Nwxtがあるような処理)ものが多いので、その形式を使う。
コード例
Sub test01()
k = 1
For i = 1 To 5
For j = 1 To 6
Cells(k, "C") = Cells(i, "A") & Cells(j, "B")
k = k + 1
Next j
Next i
End Sub
本当は、&のところは+-*/などが入り、a,b,cは数ですが
組み合わせが、判りやすいように記号でやってみています。

axax
byay
czaz
duau
evav
ーwaw
ー - bx
ー - by
        以下略
しかしこれとても、データ数・列数の増加によって、終るまでに大変な時間がかかる場合がある。
こういう面からして、エクセルは本格的に使えるものではないでしょう。

投稿日時 - 2007-11-12 20:31:42

お礼

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

エクセル初心者で、難しくて戸惑っています。
今まで手で計算していたのですが、数が多く、半月経っても半分も計算が終わらないのでエクセルでしようと思っています。

このやり方でも時間がすごくかかるのですね。
エクセルだと楽に計算できると思っていました↓↓甘かったです。

投稿日時 - 2007-11-13 01:19:13

ANo.2

こんにちは。

#1さんで、回答は出ているようですが、私も考えてみました。

足し算、掛け算は同じように、組み合わせでできますが、割り算、引き算は、順列になるのではないでしょうか?

こちらでは、足し算で作ってみました。

  B      C       D      E
=$A$1+$A2  =$A$2+$A3  =$A$3+$A4  =$A$4+$A5

これをぞれぞれ、フィルハンドルで下にコピーすればよいです。

それを、もうひとつ考えをひねって、統一式を作ってみました。

=IF(ROW(A1)>ROWS($A$1:$A$5)-COLUMN(A1),"",OFFSET($A$1,COLUMN(A1)-1,)+OFFSET($A$1,ROW(A1)+COLUMN(A1)-1,))

これをオートフィルで右と下にコピーすればよいかと思います。

ただし、組み合わせのときは、一応、=COMBIN(5,2) 5の中から2つを選ぶという計算で、組み合わせ数を調べたほうがよいですね。

投稿日時 - 2007-11-12 12:48:50

お礼

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

エクセル初心者で、難しくて戸惑っています。

初歩的なことだとは思いますが、
教えていただいた式というのはどこに記すればいいのでしょうか?

セルA1、セルA2…などにある数値は、
既に計算した結果の数値です。
その数値の2つを使ってさらに計算をしたいのですが、
セルA1には既に式があります。
続けて式を書いてもよいのでしょうか??

投稿日時 - 2007-11-13 01:10:51

あなたにオススメの質問