• 締切済み

excel vba で変数に格納そして取り出し方

参考書、相談室で教えて頂き、何とかなっておりましたが、変数に格納、その数値を取り出すことについて、基本的な事をもう一度基本を教えて頂けませんか。 今,sheet2の、b3セルの数値が変化しています、それをSheet1のb3セルが参照しています。 そのsheet1の参照セルの数値を変数に格納し、それを読み出して使いたいのですが、うまくできません、どのように考えたらいいのですか。現在は、下記コードの、k、の引き数の変化ができなく暗礁に乗り上げております。 set temp = worksheets(("描画").shapes.addTextbox(mosTextboxorientationHorizontal.86,k,66,18) の、,k、の数値を変化させたいのですが出来ません。 sheet1のセルの数値を変化させないで、一つの数値に固定すれば、問題なく目的の描画が行われます。 変数に格納、for....nextで取り出して等いろいろ試みましたが、参照セルが変化すると描画しません。 申し訳ありませんが、もう一度教えて頂けませんか。

みんなの回答

  • -antsu-
  • ベストアンサー率50% (84/168)
回答No.4

#2です。 最初の質問文ではB3セルを参照とありましたが、補足ではQ93セル? 一応、記載のコードで試してみましたが、配置できましたよ。 ちょっと手を加えてますが。 Sub Sample() Dim temp As Shape Dim t, j,k As Long Dim Ws As Worksheet Set Ws = Worksheets("描画") t = Ws.Range("q93") For j = 73 To t Step 1 k = Ws.Cells(j, 17) Set temp = Ws.Shapes.AddTextbox(msoTextOrientationHorizontal, 32, k, 65, 17) Next End Sub 念のため確認ですが…。 1)Q93セルに変数jで飛ばしたい数値が入っていますか? 2)Cells(j, 17)には変数kに入れたい数値が入っていますか? 3)変数t,j,kの型は整数型(LongやInteger)になっていますか?

diwk85
質問者

お礼

ご解答ありがとうございます。 q93には、最大20件のtextoboxを表示のため20件分の表示位置を描画シートq73からq92まで演算入力してあります。(表示件数が変化すれば変化します。)q93には、その件数の合計と定数の73が加算され入力されています。 20件のときはq93は、73+20=93の数値になります。j=73 to 93となり20件分 q73からq93まで使います。 cellsから(j,17)は、20件分の表示位置の、q73~q92までの数値そのものです。 変数の宣言については、特に意識しませんでした。 -------- 私の考え方にまちがいが、あるとおもいました。私がいまできるのは、20件分のtextboxをcells(73,17)~cells( 92,17)すなわちq73~q92の数値にしたがって描画しているのであって、今回の目的は、描画そのものには問題はなく、その引数kの、描画位置の数値をこのコードが実行されると一瞬に変化するj74~j113セルの数値の一部を、引数kに使うというこで、その数値は、j74~j113のすべてではなく、指定した1セルの数値を利用するだけす、このため、たとえば、k≖worksheets("描画").Cells(82,10).valueとすれば指定したセル(この場合j82の数値分の位置に相当する1件分、描画しますが、j73からj113の中の指定した1セルの変化を変数に格納しその変化した数値回数分に対応したコードの記述できていないため変化した分をkに与えようとして、変数を代入しても、1件分も描画しませんので、変化する条件を変数に格納することとその変数から取り出してkに出力することの基本が全然できていないのだとおもいます。 -------- ご解答いただいたコードを取り急ぎ試みましたが、目的が達成できませんでした。もう一度試みてみたいと思います。変化する条件を利用する点だけが変わっただけですので、何とか解決したいと思います、何度も試みたいとおもいます。 ほんとに、ありがとうございました。

  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.3

http://billyboy.blog81.fc2.com/blog-entry-224.html こんなかんじで worksheet_changeに その関数を書いてみるといいかも?

  • -antsu-
  • ベストアンサー率50% (84/168)
回答No.2

記載されているVBAのコードだけでは、変数kを含めた流れがよくわかりません。 変化といっても、VBA上で行うものなのか手入力や関数などによるものかもわかりません。 もう少し詳細に記載された方がいいと思いますよ。

diwk85
質問者

お礼

すみません、余分な事を書くとかえって説明がややこしくなると思いました。 実は、テキストボックスの表示位置を変化させる目的の質問です。 dim temp as shape t = worksheets("描画")range("q93").value for j = 73 to t step 1 k = worksheets("描画").cells(j,17).value set temp = worksheets("描画").shapes.addtextbox(msotextorientationHorizontal,32,k,65,17) このコードの、引数kの数値を変化させて、textboxの描画位置を変化させたいのです。 変化する数値は、ワークシート関数を使い別なsheetで演算し(コードを実行させると一瞬にして数十件の演算処理します。その変化を、描画sheet上のセルが参照しています(直接、演算シートのセルを参照してもいいかもしれませんが)。そのセルの変化を変数に格納しそれを使い、kの数値を変化した回数分だけ変化させたいのです。 現在、描画することについては、問題なくできますが、描画位置を、参照したセルの数値にしたがって変化させることができないでしょうか。描画後の状態は、数十個のtextboxが描画された状態になればいいのですが。 説明がうまくできませんが。よろしくお願いします。

  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.1

Sheet1のB3セルが変化したことをトリガーにして 関数を実行しなおせばいいと思うわ 今の状態は恐らく Excelファイルを開いた後、最初に関数が実行されたときの Sheet1のB3セルの値を参照して描画を行っているんだと思うの なので、Sheet1のB3セルの値が変わったっときに 取得しなおしていないから そうなるんじゃないかしら?

diwk85
質問者

お礼

早速のご解答ありがとうございます。 ご指摘の通りたしかに、一番初めの数値に対する動作のみの様にも思えますが(固定に入力した数値に対しては描画します)が数値を変化させると、全然描画しません。 なお,sheet1のb3セルの値が変わった時に取得し直す、とのことですが,vbaをやり始めたばかりで、ご指導の内容の取扱が残念ですが難しいです。 今の変数に格納の仕方は、例えば A = worksheets(”描画”).range("b3").value として、その、変数A、を使い、引数kの数値をsheet1の変化した回数分の数値の変化をkに反映させたいのです。 やはり、ちょっと難しいのかもと思います。 まずはお礼の返信まで。ありがとうございます。