- ベストアンサー
Excel2003での複雑な表計算、教えてください。
A B C D E F G ----------------------------------- 1| 4 6 1.2 4.8 5.6 2| 10 20 0.2 7.2 6.3 上記のような表で、 同じブックの別のシートのA1列より、 A1×E1の解 A1×F1の解 A1×G1の解 A2×E2の解 A2×F2の解 A2×G2の解(以降、A列の行に数字があれば同じように繰り返し) 隣のB列にも同じように、 B1×E1の解・・・というように計算をしていき表をつくりたいのですが、関数ではどうがんばってもうまくいきません。 VBAでやればなんとかできるかと思うのですが、本を読んでもさっぱりわかりません。。。 誰か詳しい方、教えてくだされば幸いです。 説明が足りなければご指摘ください。 よろしくお願いいたします。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
Sub mutiple() Dim i As Long Dim j As Long Dim k As Long Dim ws1 As Worksheet Dim ws2 As Worksheet Dim Lastline As Long Set ws1 = Worksheets("Mondai") Set ws2 = Worksheets("Kotae") Lastline = ws1.Cells(Rows.Count, 1).End(xlUp).Row For i = 1 To Lastline For j = 1 To 2 For k = 5 To 7 ws2.Cells(i, j) = ws1.Cells(i, j) * ws1.Cells(i, k) Next Next Next End Sub
その他の回答 (5)
- tom04
- ベストアンサー率49% (2537/5117)
こんばんは! 回答が合っているかどうか判りませんが・・・ ↓の画像のように 左側のSheet1のA・B列のデータと、右側のSheet2のE・F・G列を組み合わせて それぞれ掛け算をすれば良いわけですかね? 一応そういうことだと解釈して回答させてもらいます。 データ量によって対応できるようにするとかなり長い数式になってしまいますので、 Sheet1のデータをSheet2の別セルに表示させ、それぞれを掛け合わせています。 Sheet2のA2セルは =IF(COUNT(Sheet1!$A$2:$B$100)*COUNT(Sheet2!$E$2:$G$100)<ROW(A1),"",IF(COUNT(Sheet1!$A$2:$A$100)*COUNT(Sheet2!$E$2:$G$100)>=ROW(A1),INDEX(Sheet1!$A$2:$A$100,INT((ROW(A1)+COUNT($E$2:$G$100)-1)/COUNT($E$2:$G$100))),INDEX(Sheet1!$B$2:$B$100,INT((ROW(A1)-COUNT(Sheet1!$A$2:$A$100)*COUNT(Sheet2!$E$2:$G$100))+COUNT(Sheet2!$E$2:$G$100)-1)/COUNT(Sheet2!$E$2:$G$100)))) B2セルは =IF(A2="","",INDEX($E$2:$G$100,IF(MOD(INT(ROW(A3)/3),COUNT($E$2:$E$100))=0,COUNT($E$2:$E$100),MOD(INT(ROW(A3)/3),COUNT($E$2:$E$100))),IF(MOD(ROW(A1),3)=0,3,MOD(ROW(A1),3)))) C2セルは単純に =IF(A2="","",A2*B2) という数式を入れ、A2~C2セルを範囲指定し、C2セルのフィルハンドルで 下へコピーすると画像のような感じになります。 とりあえず数式はSheet1・2とも100行まで対応できるようにしていますので 今後データが増えても反映されて表示できるはずです。 以上、参考になれば幸いですが、 大きく外している可能性もありますので その場合は読み流してくださいね。m(__)m
お礼
ご親切に図示までしていただき、ありがとうございました! とてもわかりやすかったです。
- imogasi
- ベストアンサー率27% (4737/17069)
回答も出ているが、私には質問の意味がわからない。 >同じブックの別のシートのA1列より、 別シートのセルに答えを出すのか。 そのときもとのシートのデータはどれを使うのか。 >A1×E1の解 のように2セルだけの掛け算か? >A1列より、 A列というのはわかるが、A1列って、なにですか。 ==== 例データ 本当は数だろうが、わかりやすくするため文字列を入れる A1:B2に A列 B列 C列 D列 E列 F列 G列 a1 b1 - - e1 f1 g1 a2 b2 - - e2 f2 g2 a3 b3 - - e3 f3 g3 ーは空白セルを便宜的に表す。 ーーー 本当は演算は*(掛け算)だが良くわかるように、&(結合)に変えた。 Sheet2に A1の式に =Sheet1!$A1&Sheet1!E1 と入れてC1まで式複写。 Aの前の$に注意。 A1:C1の式をA3:C3まで式複写。 結果 a1e1 a1f1 a1g1 a2e2 a2f2 a2g2 a3e3 a3f3 a3g3 この組み合わせで良いのだろう。 ーー それならSheet1に数データを入れ、Sheet2の式の&を*に置き換えると、質問者の望むものになるのかな。 === 上のような例を質問に書かない(かけない)から判りにくいのだ。 式複写でうまく行くような式、およびその背後にあるデータの適当なセルのシート内配置が問題なのだろう。
お礼
書き方に不備があり、申し訳ありませんでした。
- suekun
- ベストアンサー率25% (369/1454)
ごめんなさい。 気になって再度質問を読んでみたら、参照範囲を読み違えてましたね。 誤:D~F 正:E~G ですね。 慌てて書いたので、細々とミスしてしまいました。 シート2のA1に以下の数式を貼り付けて、右に一列コピーし 数式の入った二列を下に必要なだけコピーして下さい。 ROW関数(行番号)を元に、どの位置の数字を掛け合わせるか 変化させてあるつもりです。 =INDEX(Sheet1!A:A,INT(ROW(A3)/3))*INDEX(Sheet1!$E:$G,INT(ROW(A3))/3,MOD(ROW(A3),3)+1)
お礼
こちらこそ、わかりにくい質問だったと思います、申し訳ありません。 ご丁寧に、ありがとうございました!
- suekun
- ベストアンサー率25% (369/1454)
追記です。 別シート参照でしたね。データーがあるシートがシート1だとして INDEXの範囲にシート名を追記です。 修正版 ↓ =INDEX(Sheet1!A:A,INT(ROW(A3)/3))*INDEX(Sheet1!$D:$F,INT(ROW(A3))/3,MOD(ROW(A3),3)+1)
- suekun
- ベストアンサー率25% (369/1454)
下記、数式をA1×E1の解が欲しいセルに入れて、右の一列コピーし そのまま下方向に必要行コピーして下さい。 =INDEX(A:A,INT(ROW(A3)/3))*INDEX($D:$F,INT(ROW(A3))/3,MOD(ROW(A3),3)+1)
お礼
シンプルなご回答、ありがとうございました!