- ベストアンサー
マクロ初心者のプログラム改良について
- マクロ初心者がプログラム改良に挑戦。直接プログラムに打ち込んだ値を別シートのマクロで自動計算し、結果を読み込みたい。
- 現在のプログラムでは値をプログラムに組み込んでいるが、マクロで計算した値を組み込みたい。
- 具体的には、商品の半分ずつ支払う計算結果をプログラムに組み込む例を挙げている。現在は直接数字を打ち込んでいるが、別シートで計算した値を読み込みたい。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
たとえば。 sub macro1() dim res res = 1 + 2 range("A1") = res end sub こういった具合に,「res」という計算結果をA1セルに記入します。 resの具体的な計算内容は,「1+2」という具合にマクロに直接記入されています。 これを。 sub macro2() dim x1, x2, res x1 = worksheets("Sheet2").range("A1").value x2 = worksheets("Sheet2").range("A2").value res = x1 + x2 worksheets("Sheet1").raneg("A1") = res end sub こういった具合に,「resの結果をA1に記入する」は同じですが, resの具体的な計算内容として 1.シート2のA1をX1に一回受ける 2.シート2のA2をX2に一回受ける 3.X1とX2を使ってresを計算する といった段取りで組み立てることができます。 #補足 こういう内容は,エクセルマクロの「一番最初の基礎」です。 基礎過ぎて,いろんな書きぶり(=応用)ができるので,恐らく様々な回答が寄せられて,見ているだけでもオナカイッパイになってしまうと思います。 どれでなきゃならないってのも無いので一つずつマスターしていって欲しいとは思いますが,今は目の前の仕事優先で「マクロの勉強がしたい」んじゃないと思いますので,どれでも一個使ってやっつけてください。
その他の回答 (1)
- tsubuyuki
- ベストアンサー率45% (699/1545)
では・・オナカイッパイになりつつも、消化の良い食事を目指して 私からも一皿だけ振る舞わせてくださいませ(笑)。 1番さまから模範解答が出ていますし、その二番煎じも良いところですので、 どちらかと言うと「飲んだ後のラーメン」かもしれません(笑)。 さてさて、例として提示されている > 100円と200円の商品を買い、それを二人で半分ずつ支払う計算結果 これについて見ていきます。 この計算を「エクセルのシート上で計算させるとしたら」どうされますでしょう? 基本で考えると、A1セルに「100」、B1セルに「200」と数字を直接打ち、 C1セル辺りに「=(A1+B1)/2」くらいで入力していきますね。 この中の C1セルに「=(A1+B1)/2」 の部分をVBAに書いてやるのがまずは簡単かと思います。 ものすごく簡単に書くと Sub Test1() Range("C1").Value = "=(A1+B1)/2" End Sub もうコレだけです。ダブルクォーテーション「"」がミソです。 続いて、こんな書き方。 Sub Test2() Range("C2").Value = (Range("A2").Value + Range("B2").Value) / 2 End Sub コレでもOKです。計算をVBAの中だけで完結させる方法です。 二つの違いに注目してくださいませ。 上記Test1は「計算式」をC列に返しますが、 Test2は「計算結果」をC列に返します。 コレがVBAによる計算の大体の基礎です。 これらの他にも、1番さんの回答に見られるように「変数」をつかってみたり、 さらに進んで「配列」を使ってみたり、 いろんな書き方がありますので、お好みで、あるいは場合によって 書き分けられるようになると書いていて楽しくなってきますよ。 では、蛇足ではありますが、ちょっとだけお遊びコードを。 Sub SampleM() Dim Val1 As Long, Val2 As Long Dim Ans As Long Val1 = Application.InputBox(prompt:="一つ目の数値を入力してください", _ Title:="数値1指定", _ Type:=1) If Val1 = False Then MsgBox "キャンセルされました。" & vbNewLine & _ "処理を中止します", vbOKOnly, _ "処理中止" Exit Sub End If Val2 = Application.InputBox(prompt:="一つ目の数字は「" & Val1 & "」です。" & vbNewLine & _ vbNewLine & _ "二つ目の数値を入力してください。", _ Title:="数値2指定", _ Type:=1) If Val2 = False Then MsgBox "キャンセルされました。" & vbNewLine & _ "処理を中止します", vbOKOnly, _ "処理中止" Exit Sub End If Ans = (Val1 + Val2) / 2 MsgBox "一つ目の数字は「" & Val1 & "」です。" & vbNewLine & _ "二つ目の数字は「" & Val2 & "」です。" & vbNewLine & _ vbNewLine & _ "二人で割ると「" & Ans & "」です。", vbOKOnly, _ "計算結果" Range("A2").Value = Ans End Sub こんなやり方も無しではないですね^^;
お礼
回答ありがとうございます。 今回組もうと思っているプログラムでは多くの数字を扱わなければならなく、計算式が膨大になってしまうことが考えられるため、より簡単にわかりやすい計算を組もうと思っています! より簡単に組めるように参考にさせていただきます! 最後のプログラムは、これは計算したい数値を利用者が代入するかたちになるのでしょうか? 難しそうですが、マスターすれば視野が広がりそうです! ありがとうございました。
お礼
まさに補足の通りです。すこしマクロの本読んだ程度です。 これから一つずつマスターしていかねばならないため、しっかり参考書を読みます。 また、マクロのことで質問するかもしれませんのでその時も回答よろしくお願いします。 回答ありがとうございました。