• ベストアンサー

台形面積計算式の表示等

A    B    C     D        E 点名  高さ   幅    式       面積 0.0   0.0   2.0 10.0  10.0   3.0  (2.0+3.0)*10.0/2  25.0 15.5  5.5   2.5  (3.0+2.5)*5.5/2  15.1 ・    ・    ・     ・        ・ というような単純な計算式を表示した表をマクロにて作りたいと思いました。 しかし、入力される行が不定のためわけが分からなくなってしまいました。 質問内容としては、 高さ、幅が入力されている状態で別シートに上記表と同じものを作りたいです。(できたら罫線付きで)(又は隣のセル。上記のように) ちなみに先にも書いてありますが 行(列?縦方向です^^;)は不定です。 数は決まっていません。 どうかご教授いただきたいです。 また、質問で「意味わからんぞ!」というのがありましたら 補足いたしますのでよろしくお願いいたします。

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

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

#2のお礼に関して。 結果は同じになる場合も多い。 途中に空白セルがある場合のことを考えて、経験的にこの方が安全かなと習慣化しているだけ。 UsedRange、Currentregionなども勉強して、使い分けてください。 回答者の回答が(特にOKWAVEぐらいでは)絶対ではない。 どちらが良いのか勉強して、良いとこ採りができるようになってください。

NOBBB
質問者

お礼

回答ありがとうございます。 これから勉強します。

すると、全ての回答が全文表示されます。

その他の回答 (2)

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

関数で十分な内容です。マクロのお勉強ですか。 宿題ではないのかな。 VBの問題ではなく、エクセルVBAらしいですので、表題内にその語句を上げてください。 例データ Sheet1でA1:C4 台形について 底辺 上辺 高さ 20 2 5 10 3 10 15.5 2.5 5.5 結果 Sheet2に A1:E4 底辺 上辺 高さ 式 台形面積 20 2 5 (20+ 2)*5/2 55 10 3 10 (10+ 3)*10/2 65 15.5 2.5 5.5 (15.5+ 2.5)*5.5/2 49.5 コード Sub test01() Dim sh1 As Worksheet Dim sh2 As Worksheet Set sh1 = Worksheets("Sheet1") Set sh2 = Worksheets("Sheet2") D = sh1.Range("A65536").End(xlUp).Row MsgBox D For i = 2 To D sh2.Cells(i, "A") = sh1.Cells(i, "A") sh2.Cells(i, "B") = sh1.Cells(i, "B") sh2.Cells(i, "C") = sh1.Cells(i, "C") sh2.Cells(i, "E") = (sh1.Cells(i, "A") + sh1.Cells(i, "B")) * sh1.Cells(i, "C") / 2 sh2.Cells(i, "D") = "(" & sh1.Cells(i, "A") & "+ " & sh1.Cells(i, "B") & ")" _ & "*" & sh1.Cells(i, "C") & "/" & "2" Next i End Sub ーーー (1)Setを使う (2) sh1.Range("A65536").End(xlUp).Rowをつかう (3)Cells( )を使う よさを、勉強して味わってください。Sheet2の第1行見出しは VBAでは略。 セル書式とかは略。 略とは自分で勉強せよということ。 ーー 台形で、質問にある「点名  高さ   幅 」というのかな?教科書で確認のこと。

NOBBB
質問者

お礼

回答ありがとうございます^^ 自分なりに勉強しました。 そこで質問があります。 imogasiさんは D = sh1.Range("A65536").End(xlUp).Row とされていますが、 D = sh1.Range("A1").End(xlDown).Row(スペル違うかも^^;) ではだめなんでしょうか? 試してみたら同じ結果になりましたけど なぜ、最終行から上へと参照したのでしょうか? もしよろしかったら教えていただきたいと思います。

すると、全ての回答が全文表示されます。
noname#33218
noname#33218
回答No.1

マクロじゃなくて、関数を使った方がいいようなきがします。 e3のセルに =(c2+c3)*b3/2 と入れて、後はこれを下のセルにコピー 式を表示したければ d3のセルに "("&str(c2)&"+"&str(c3)&")*"&b3&"/2" と入れたらどうでしょう。 後はこれを下のセルにコピー

NOBBB
質問者

お礼

回答ありがとうございます^^ 関数でできたんですね^^; マクロの勉強しながらだったので、 関数でできるとは思ってもいませんでした^^;

すると、全ての回答が全文表示されます。

関連するQ&A