アプリ版:「スタンプのみでお礼する」機能のリリースについて

現在知識が全くない状態でマクロを使ったプログラミングを改良しようとしています。

現在のプログラミングでは、与えられたデータをあらかじめ計算し、その値を直接プログラミングに組み込んでます。
今回は直接プログラムに打ち込んである値を、別シートのマクロで自動的に計算し、その結果をプログラムが読み込むようにしたいと思います。

簡単に言えば、マクロのプログラムに直接計算結果を組み込むのではなく、別シートで計算したものをプログラムに組み込みたいということです。


例として、
100円と200円の商品を買い、それを二人で半分ずつ支払う計算結果と
200円と400円の商品を買い、それを二人で半分ずつ支払う計算結果
をプログラムに組み込むとすると、現在では一人あたり150円と、300円という数字を直接プログラムに打ち込んでいます。
これを、別シートで計算し、それをマクロのプログラムに読み込ませることは可能でしょうか?
また、可能ならば、大体の流れはどういったものになるのか教えてもらえませんでしょうか?
よろしくお願いします。

A 回答 (2件)

では・・オナカイッパイになりつつも、消化の良い食事を目指して


私からも一皿だけ振る舞わせてくださいませ(笑)。
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

こんなやり方も無しではないですね^^;
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
今回組もうと思っているプログラムでは多くの数字を扱わなければならなく、計算式が膨大になってしまうことが考えられるため、より簡単にわかりやすい計算を組もうと思っています!
より簡単に組めるように参考にさせていただきます!
最後のプログラムは、これは計算したい数値を利用者が代入するかたちになるのでしょうか?
難しそうですが、マスターすれば視野が広がりそうです!

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

お礼日時:2012/11/19 15:55

たとえば。


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を計算する

といった段取りで組み立てることができます。


#補足
こういう内容は,エクセルマクロの「一番最初の基礎」です。
基礎過ぎて,いろんな書きぶり(=応用)ができるので,恐らく様々な回答が寄せられて,見ているだけでもオナカイッパイになってしまうと思います。
どれでなきゃならないってのも無いので一つずつマスターしていって欲しいとは思いますが,今は目の前の仕事優先で「マクロの勉強がしたい」んじゃないと思いますので,どれでも一個使ってやっつけてください。
    • good
    • 0
この回答へのお礼

まさに補足の通りです。すこしマクロの本読んだ程度です。
これから一つずつマスターしていかねばならないため、しっかり参考書を読みます。

また、マクロのことで質問するかもしれませんのでその時も回答よろしくお願いします。

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

お礼日時:2012/11/16 11:16

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