• ベストアンサー
  • 困ってます

VBA 別シートの計算表

Excelについて。 シートAに、計算表があります。 セルa1に入力した値によって、いくつかのExcel関数を利用して、 セルb1に結果を出力しています。 いつも、手入力でセルa1に値を入力して結果を求めていますが。 今度、シートBに膨大な入力するための数値があるので、VBAで自動化できないかと考えています。 今回の質問は、VBAで記述する際に、シートAの入力セルa1に、シートBの入力値を1つずつ代入していき、結果のセルb1をシートBの入力値の隣に出力していこうと考えています。 シートAのa1に入力値を代入して、すぐに結果b1の値を結果出力セルに代入していいのでしょうか? 計算表(シートA)での計算を時間をおく必要があるのでしょうか?=一旦、他のセルを選択するなど。 よろしくお願いします。 ・計算表での計算時間は、1秒未満です。 ・計算表の計算過程もVBAで書けば済む話ですが、プログラミングには疎いので、計算表をそのまま利用したいと考えています。=入力の代入だけVBAで書いていきたいと思います。 ・その他、アドバイスなどいただければ幸いです。 よろしくお願いします。 Excel2010

共感・応援の気持ちを伝えよう!

  • 回答数2
  • 閲覧数605
  • ありがとう数1

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

  • ベストアンサー
  • 回答No.2

>今回の質問は、VBAで記述する際に、シートAの入力セルa1に、シートBの入力値を1つずつ代入していき、結果のセルb1をシートBの入力値の隣に出力していこうと考えています。 との事ですが、「シートBのどのセルに入力されている値を代入したいのか」という肝心な事に関しての説明が抜けています。  その「代入したい値」が入力されている多数のセルの中で、最初のセルはどのセルなのでしょうか?  又、最初のセルのデータの処理が終わった後で、また次のデータの処理をしなければならないと思われますが、その次のデータが入力されているセルは、最初のセルの下にあるのか、それとも右にあるのか、どちらなのでしょうか?  又、例えば最初のセルに対する次のセルの相対的な位置は、1マスずれた所にあると決まっているのでしょうか? もしかしますと、1行おきとか、1列おきといった飛び飛びの位置にあるセルを参照しなければならないなどという事は無いのでしょうか?  そういった肝心の情報に関して質問者様から説明して頂かなければ、VBAを作るために必要不可欠な情報が不足しているのですから、質問者様が希望されているVBAなど誰も作る事など出来ませんよ。  仮の話として、質問者様が実際に使われているシートBとは異なるレイアウトの表を用いる場合のVBAでしたら作る事が出来るかも知れませんが、そのVBAを参考にして、実際のシートBのレイアウトに合わせたVBAを質問者様御自身は作る事が出来るのでしょうか?  もしも出来ないか難しいと思われるのであれば、必要な情報は全て開示して頂くよりほかは御座いません。  そして、VBAを作る上で必要となる情報は他にもあります。  例えば、ワークシート関数を使って処理を行う際に、数値計算を行う関数に、文字列データを処理させようとしますとエラーとなります。  そして、 >シートAの入力セルa1に、シートBの入力値を1つずつ代入していき、結果のセルb1をシートBの入力値の隣に出力 という作業をVBAによって行う際に、シートBに入力されている値に何か間違いがあって、ワークシート関数で処理できない値となっていた場合には、そこでシートAのB1セルに表示される結果がエラーとなり、それが原因でVBAの動作もエラーとなり、VBAが途中で停止する恐れも若しかしますとあるかも知れません。  万が一そうなりますと、質問者様はそのエラーに対処できるのでしょうか?  その様な事態を避けるためには、「シートAのA1セルに入力しても良い値とはどんな値なのか」という事や、「シートAのA1セルに入力してはいけない値とはどんな値なのか」という事、及び、「もしシートBに、シートAのA1セルに入力してはいけない値があった場合には、単にそのセルは無視して次の処理を行えば良いのか、といった、どんな対応をVBAにさせれば良いのか」という事に関しても御説明願います。

共感・感謝の気持ちを伝えよう!

関連するQ&A

  • VBAのプログラムとシートでの計算の速度

     現在、エクセルVBAでマクロを組んでいます。 マクロで算出した値を、セルを指定して、シートに代入しています。シートの代入する理由は、途中の計算結果の確認とエクセル関数を利用し、マクロの簡便化を図りたいためです。  代入した値を基にして、エクセル関数を使った結果の値を、他のセルに表示(代入)していますが、VBAで、その結果の値を、利用しています。  お聞きしたいのは、最初にシートに代入してから、エクセル関数の結果を得られる前に、VBAが、値を取得しないかどうか心配です。  素人考えでは、同じエクセル上で動作しているので、エクセル関数の計算終了後に、VBAが動くと思いますが。どうでしょうか?

  • EXCEL2007 VBA アクティブでないワークシートの名前を取得したい

    Sheet1とSheet2の【A1セル】【B1セル】には以下の処理が入っています。また2つのシートにはVBAを使って、再計算がされるたびに自身のシート名を表示するメッセージボックスを出力する処理を記述しています。 【A1セル】  リアルタイムで値が送られてくる。 【B1セル】  A1セルの値を使った式 【VBA】  Private Sub Worksheet_Calculate()   MsgBox **************  End Sub ここからが質問なんですが、Sheet3をアクティブシートにしている場合、VBAの「*****」の部分に何と記述すれば、再計算されたシート名を取得できますか?

  • エクセル2000の計算式について

    エクセル2000の計算式について A1に入力する値が、5000未満の時→B1セルに、0 が A1に入力する値が、5000以上10000未満の時→B1セルに、500 が A1に入力する値が、10000以上15000未満の時→B1セルに、1000 が A1に入力する値が、15000以上20000未満の時→B1セルに、1500 が A1に入力する値が、20000以上25000未満の時→B1セルに、2000 が 表記されるような、B1セルの「計算式」を教えていただけませんか? 「IF関数」を組み合わせる事で解決するのでしょうか? 関数の組み合わせ方法が、解りません…

その他の回答 (1)

  • 回答No.1

直接シートBで計算関数を書くのは一番簡単の方法だと思いますが、シートAの計算表をシートBに反映することはできないでしょうか? エクセル表を見せて頂けないでしょうか

共感・感謝の気持ちを伝えよう!

質問者からのお礼

ご回答ありがとうございます。 計算表で行っている計算は、 一行の計算(数式)ではなく、いくつかのセル(計算)を経由して値を求めています。 入力から出力までが1つのエクセル関数であれば、良いのですが。上記のとおりです。

関連するQ&A

  • エクセルVBAでワークシート関数のようにしたい

     例えば、セルA1に日付を入力して、セルB1に関数WEEKDAYが入力されていると、すぐセルA1の値を返してくれますが、これと同じことをVBAで再現したいのですが、可能でしょうか?  マクロやVBAでWEEKDAYを記述しても、「ツール」→「マクロ」→「マクロ」か「VBA」でやらないとA1の値をB1に返せないので、A1に日付を入力した瞬間、B1に値を返したいのですが、よろしくお願いします。

  • VBAを使ってシートAの3ヶ所のセルでシートBの計算式を行う。

    シートA    シートB   A B C D     A B C D 1 10 20 30 ()   1 10 20 30 (計算式) 2 10 20 30 () 3 10 20 30 () 4 10 20 30 () (1)シートAのA1,B1,C1をコピーしてシートBのA1,B1,C1に代 入する。D1には計算式が入っているので結果が表示される。 (2)シートD1の計算結果をシートAのD1に代入する。 (3)次はシートAのA2,B2,C2をコピーしてシートBのA1,B1,C1 に代入する。D1には計算式が入っているので結果が表示される。  シートD1の計算結果をシートAのD2に代入する。 (4)上記の動作をシートAのA列のセルに数字がある場合は繰り返し行  う。

  • EXCELの計算結果を値コピーするとおかしな値になる

    EXCEL2003を使っていますが、ふとしたことで気になることがあります。 下記のような簡単な計算とコピー作業なのですがコピーした値がおかしいのです。 ・セルA1に420.2を入力する。 ・セルB1に420.3を入力する。 ・セルC1に =A1-B1 の計算式を入れる。 ・セルD1にC1のコピーを形式選択貼り付けで”値”のみ貼り付けする。 すると、セルD1には-0.1が表示されるのですが、ワークシート上段の普段入力とかをするエリアには-0.100000000000023が表示されています。 普通は別に困らないのですが、計算結果が-0.2とかになると-0.199999999999989になりヒストグラム等では頻度のカウントがひとつ繰り上がってしまいます。 (値コピー先ではなく計算結果でヒストグラムをとっても同じ結果になります。) Officeのヘルプも一応見てみたのですが、検索文言がややこしくて見つけられませんでした。簡単なことを見逃しているかも知れませんがアドバイスお願いします。

  • エクセルで他のシートを動的に参照するには

    エクセルに関する質問です。 他のシートのセルを参照する場合、たとえば、 =Sheet1!D5 というように入力すると思います。 質問は、このシート名とセル名に、他のセルの値を使用したいのですが、方法はあるのでしょうか? できれば、VBAを使わずに。。。 質問が分かりづらいと思いますので、具体的に説明すると、A1にシート名("Sheet1")が、B1にセル名("D5")が入っている場合に、C1にその値(=Sheet1!D5)が表示されるようにしたいのですが、方法はあるでしょうか?

  • セルの文字式の計算をVBAで行いたい

    A1のセルに "100+5n" という文字式が入っている状態で VBAにてこのセルの文字式計算を行いB1のセルから順に結果を出力したいと思っています。 "n"は1から順に指定された数まで1づつ増えていくようにし B1のセル:105、C1のセル:110、D1のセル:115 ・・・・ と結果がなるようにしたいのですが、VBAでどのように記述すればいいのか悩んでいます。 VBAを使わずにExcelの関数で計算できるのならそれでもよいと思っています。

  • VBAでシート名を自動入力時のINDIRECT

    C1セルに日付を入れています。それがVBAで自動でシート名に入力されるようにしています。 例えば、「2014年 9月1日」と入れていると、シート名も「2014年 9月1日」となります。 そのようなシートを集計シートで値を合計していきたいと思っているのですが、INDIRECT関数を使って、シート名を参照しようとしてもエラーになってしまします。 例えば、集計シートのA1セルに、「2014年 9月1日」と入力しておいて、、「2014年 9月1日」シートのB1セルに「20」といれているとします。通常は、=INDIRECT(A1&"!B1")という関数を集計シートのA2セルにいれると、「20」と表示されますが、VBAでシート名を取得している場合はエラーになってしまいます。この場合、無理なのでしょうか? また、もう1件、VBAのシート名取得で、「2014年 9月1日」は問題ないのですが、9月の9の前に半角スペースがあるのでそれを消すと、実行時エラー’1004’:が表示されて、C3セルの表示が###となります。C3セルの列幅を広げると、 、「           2014年9月1日」このような表示になっています。しかし、スペースが先頭に入力されているわけではありません。、「2014年9月1日」というシート名は手入力でいれても問題ないのですが、VBAで自動で入れた場合、エラーになるのは、プログラムに問題があるのでしょうか?下記プログラムを入力しています。 If Target.Address = "$C$1" Then Sh.name = Target.Range("A1").Value End Sub すいませんが、よろしくお願いいたします。

  • VBA 入力規則を使用したリストについて

    【動作環境】  Excel2010/Excel2000   あるセルについて、 入力規則のリストを使っています。 ユーザには範囲外の値を入力させたくなく、 手入力を禁止するためにそのセルはロックし、シートを保護しています。 これをExcel2010で実行させた場合、 リストから候補値を選択すると、 セルがロックされている旨のメッセージが表示され、 セルには何も設定されません。 まったく同じことを Excel2000で行うと問題なくリストで選択した値がセルに設定されます。 今回、Excel2000とExcel2010で動作するVBAが要求されており、 どのように回避すればよいか、ご教授願います。

  • エクセルで複数のシートをまたぐ計算をしたい

    エクセルで 「『シート1のA1セル』と『シート2のA1セル』の値を足す」 というような計算をしたいのですが、どうやればいいのでしょうか。

  • ExcelVBAでシートに計算式を書きたいが、式の中で

     例えばワークシートのセルA1が1なら空欄、それ以外なら1となるような計算式 IF(A1=1,"",1) をVBAでセルB1書き込む場合、 Range("B1").Formula= "=IF(A1=1,"",1)"と書いたのですが、計算式の中に""を含んでしまっているため、マクロがエラーになってしまいました。 計算式の中に""を含んだマクロを各にはどうしたらよいのでしょうか。 よろしくお願いします。

  • エクセル 違うシートに計算式がある場合

    エクセル2000を使っています。 下記の計算をしたいのですが、方法を教えてください。 1.Sheet1 A1とB1に計算したい元の数値が記入されています。 例えば、A1=1 B1=2 2. Sheet2 のA1とB1に数値が入る事としてC1に計算結果が出るものとします。 3. Sheet1のC1にSheet2のC1の内容を表示したい。 4. Sheet1 A2、A3・・・・・、B2、B3・・・・・に入力した後で、C2、C3・・・・・・に Sheet2のC1で計算させた結果を自動的に入力したい。 別の言い方をすれば、Sheet2 のA1・B1が関数の入力するところにあたり Sheet2のC1が関数の出力(というか、計算結果)にあたります。 Sheet1からSheet2を関数のように使いたいのです。 Sheet1 ____ A_____B_______C 1___1_____2______3 2___2_____3______5 3___5_____8______13 4___9_____1______10 5___4_____5______ 9 Sheet2 ____A_____B_____C 1________________ =A1+B1 2_____________________ こんなイメージです。 Sheet2で計算の入力に対応するセルがA1・B1 計算結果が書いてあるのがC1 実際は、大きな表を参照しながら計算するので、色々計算した結果(途中計算は他のセルも使います)がC1に表されます。 以上、よろしくお願いします。

専門家に質問してみよう