マクロ初心者のプログラム改良について

このQ&Aのポイント
  • マクロ初心者がプログラム改良に挑戦。直接プログラムに打ち込んだ値を別シートのマクロで自動計算し、結果を読み込みたい。
  • 現在のプログラムでは値をプログラムに組み込んでいるが、マクロで計算した値を組み込みたい。
  • 具体的には、商品の半分ずつ支払う計算結果をプログラムに組み込む例を挙げている。現在は直接数字を打ち込んでいるが、別シートで計算した値を読み込みたい。
回答を見る
  • ベストアンサー

マクロ初心者です。エクセルのマクロについてです。

現在知識が全くない状態でマクロを使ったプログラミングを改良しようとしています。 現在のプログラミングでは、与えられたデータをあらかじめ計算し、その値を直接プログラミングに組み込んでます。 今回は直接プログラムに打ち込んである値を、別シートのマクロで自動的に計算し、その結果をプログラムが読み込むようにしたいと思います。 簡単に言えば、マクロのプログラムに直接計算結果を組み込むのではなく、別シートで計算したものをプログラムに組み込みたいということです。 例として、 100円と200円の商品を買い、それを二人で半分ずつ支払う計算結果と 200円と400円の商品を買い、それを二人で半分ずつ支払う計算結果 をプログラムに組み込むとすると、現在では一人あたり150円と、300円という数字を直接プログラムに打ち込んでいます。 これを、別シートで計算し、それをマクロのプログラムに読み込ませることは可能でしょうか? また、可能ならば、大体の流れはどういったものになるのか教えてもらえませんでしょうか? よろしくお願いします。

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

たとえば。 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を計算する といった段取りで組み立てることができます。 #補足 こういう内容は,エクセルマクロの「一番最初の基礎」です。 基礎過ぎて,いろんな書きぶり(=応用)ができるので,恐らく様々な回答が寄せられて,見ているだけでもオナカイッパイになってしまうと思います。 どれでなきゃならないってのも無いので一つずつマスターしていって欲しいとは思いますが,今は目の前の仕事優先で「マクロの勉強がしたい」んじゃないと思いますので,どれでも一個使ってやっつけてください。

HAMAregion
質問者

お礼

まさに補足の通りです。すこしマクロの本読んだ程度です。 これから一つずつマスターしていかねばならないため、しっかり参考書を読みます。 また、マクロのことで質問するかもしれませんのでその時も回答よろしくお願いします。 回答ありがとうございました。

その他の回答 (1)

  • tsubuyuki
  • ベストアンサー率45% (699/1545)
回答No.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 こんなやり方も無しではないですね^^;

HAMAregion
質問者

お礼

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

関連するQ&A

  • エクセル マクロ自動化

    現在 マクロの勉強をしています。 その中でいくつかプログラムを組んだのですが 例 Sub 不良計算() プログラム内容 End sub これをシートのA列からC列のセルの値が変 動すると自動でマクロが動く仕様にする方法を教えていただけないでしょうか?

  • エクセル マクロで行き詰まりました。助けて・・・

    エクセル初心者です。初心者にも関わらず、マクロに挑戦して壁にぶち当たりました。やはり限界です。教えてください! <やりたい事> SHEET1に必要項目を入力してから計算開始ボタンを押す。計算結果を別シートに表示させると同時に、ボタンを押す毎にその計算結果を履歴として積み重ねる。 今回の計算結果    A     B    C    D    E 1       四月   20   30   40  2   9  履歴    10  2回前   六月   40   30   40  11  1回前   五月    30   40   50 12  今回   四月   20    30   40 うまく説明できませんが、数式セルを値だけコピーして、ボタンを押す度に自動改行しながらペーストをするというマクロなんだと思うんですが・・・。 非常に困っています。どうか宜しくお願いします。

  • 計算するExcelマクロを作りたいです(2)

    商品ごとに年度の売り上げを毎月計算するマクロを作りたいです。 Excelシートのキャプチャを加えたので、少しわかりやすくなって いるでしょうか? 「データ」シートでは、列は左から商品単価、通貨、商品ごとの 月別売り上げ個数、(商品別)年度売り上げ合計の順番で並んで います。各行には各商品ごとの数値が入力されています。 別にもう一つ「通貨」シート(画像右下)があり、「データ」 シートの通貨で検索してその右隣の数値を商品単価に掛け算します。 さらに、商品別売り上げ金額の年度合計を毎月計算して、最終的に 「データ」シートに出力するようにしたいです。 「データ」シートは毎月更新されるので、マクロ専用のブックを もう一つ作る予定でいますが、可能な内容でしょうか? マクロ自体は、会社の友人が多忙で困っているので、上司との会話 の間にあまり良く考えずに引き受けてしまった話です・・・ 通貨のレートを別のシートから持ってきて計算する辺りが特にわか らず困っています。 どなたかご教授お願いいたします。

  • Access マクロ反映

    現在、複数のエクセルファイル(ファイルの中は複数のシート)があります。いずれも、マクロを含んでおり、値は別シートや別ファイルを参照するものがほとんどです。 そのデータをAccessに取り込みたいのですが。 ただ、インポートするだけですと値のみしか挿入されません。 計算式やマクロを取り込むことは可能でしょうか。 簡単なコード等も教えていただけると助かります。 よろしくお願いします。

  • エクセルのマクロで教えてください

    エクセルのマクロで教えてください A1に入っている値が変化するごとにD列に順にその変化を出力していきたいのですが マクロではどのようにしたらいいでしょうか A1には=C1+C2というような計算式が入っていてC2の数字を変えて計算結果が変わるごとに出力したいのですが

  • excelの串刺し集計マクロ

    現在各所から送られてくる同一フォーマット書類(ファイル名は別,シート1枚,名称:sheet1)約150ファイルを 集計ブックと同じフォルダに保存して集計ブックの集計シートで串集計するマクロコードを見つけて便利に使用しております。 が、このたび各所から送られてくる同一フォーマット書類がシート二枚(名称:sheet1,sheet2)に渡る事になりまして、 集計ブックの集計シートもそれぞれ用に2枚必要になり、 1枚目の「集計1シート」には「sheet1」だけを集計し、二枚目の「集計2シート」には「sheet2」だけを集計するのはどうすればよいでしょうか? また、今回追加になったシートは計算シートで、計算式が埋められており、「マクロの記録」なんてのでやってはみましたが、 埋められている計算式が反映されるだけで計算結果が反映されませんでした。 合わせてご教授願えると大変助かります。 老人にお知恵をお貸しください。よろしくお願いいたします。

  • Excelのマクロについて

    エクセルのまくろについて教えてください。 私が今やろうとしているのはsheet1に表を作成し、sheet2に見積書を作成します。 見積書に載せる項目はsheet1の表の中から抽出したいです。 そのときの条件としては、sheet1での表の中の計算結果が、  項目  計算結果   A    1   B    0   C    8 このような場合のときに計算結果が「0」になったものの項目はsheet2の見積書の項目には反映しないようにしたいです。 このようにするとsheet2での見積書は作成する条件によって行数が変わるようになります。 なので、自動的に見積書の行を増やしたりなくしたりするようなマクロを組みたいのです。 Excel2000です。 長々と書きましたがよろしくお願いします。

  • エクセルVBAマクロで、一度テキストポックスに入力した値がコピーされて

    エクセルVBAマクロで、一度テキストポックスに入力した値がコピーされてしまう VBAマクロ初心者です。 エクセルVBAマクロで、以下の様なプログラムを作成し計算させていますが、 一度入力した値がテキストポックスに残ってしまい、なんとかならないかなと 思っています。 (1)複数シートにそれぞれコマンドボタンを配置し、クリックすると同じユーザー フォームが立ち上がるようになっています。 (2)そのユーザーフォーム内に、テキストボックスが複数あり、それぞれ値を入力 して計算スタートさせると、ワークシートの1行目から数千行目まで計算して 各行に計算結果を表示します。 (計算は、既に各行に入力済みのデータとこのテキストボックスの値を元に算出されます) (3)次に、別のシートでコマンドボタンをクリックし、ユーザーフォームを立ち上げると、 前のシートで入力した値がそのまま各テキストボックスに入ってしまいます。 (これは、必ず起こる訳ではなく、時々起こるのですが、起こる場合は、コマンドボタン をクリックしてからユーザーフォームが立ち上がるまでの時間が若干短い感じがします) ※一度、上記の計算をさせるとテキストボックスの値がそのシートの特定のセルに入り、 次回ユーザーフォームを立ち上げた際に、テキストボックスに入るようになっています。 (Private Sub UserForm Initialize を使っています) パソコンの構造を、私はよく知らないのですが、おそらく、一度テキストボックスに値 を入力して計算させると、どこかのメモリにそれが残っていて、次にユーザーフォーム を立ち上げた際にそれが入ってしまうのかな、と思っています。 (ただし、もし前の値が入ってしまったとしても、一度そのユーザーフォームを消して から、再度立ち上げると、正常な値(そのシートの特定のセルを参照)が必ず入ります) 何か、プログラムにより、このメモリ?を消す?、あるいはうまく解決する方法など 考えられませんでしょうか? もし、詳しい方がおられましたら、御教示いただけませんでしょうか。 よろしくお願いいたします。

  • エクセルのマクロについて教えてください

    シートが3つあります。Aシートはデータが打ち込んであり、Bシートは計算を行い、Cはその結果を返します。今、Aシートの各データには頭に通し番号がふってあり、Cシートの入力エリアにその番号を打つと、vlookupでAシートのデータの中身を引っ張ってきて、それでBシートにて計算が行われています。で、その結果が再びCシートに返されます。 ところで、その計算結果をAシートの該当データに貼り付けていきたいのですが、いちいちCシートでコピー、Aシートの該当行に形式を選択して貼り付け、とやっているのですが、これをCシートで入力した通し番号とAシートの通し番号を突合して一致したところの○番目のセルに結果を貼り付ける、といったマクロは可能でしょうか。教えてください。

  • マクロでシートをまとめる

    EXCEL97で200枚くらいのシートのデータを1つのシートにまとめようと思っています。 例えばE2~Z2のデータ(ほかのセルにも計算の参照をしているデータあり)だけを1枚のシートに上から下に順番に並べていきたいと思っています。 この場合値コピーをするか元のシートのデータを計算の参照にしないといけないと思いますがそれはどちらでもいいです。この場合マクロでどうプログラムを組めばいいでしょうか?

専門家に質問してみよう