• ベストアンサー

プログラムについて

初心者の質問ですみません。 関数の読み出しについてですが、 A1実施→X1となり、X1をa()に代入する。 これを数回ループする場合、aのデータを他の関数で読み出し 変数に代入したい場合どのような記述が良いでしょうか? sub test1() Dim i,X as integer Dim A(10) as integer Dim a(10) as integer For i = 0 to 10 X = A(i)+300 a(i)=X next i End sub sub test2() ※ここにどのように記載すればa(i)を読み出せますか? End sub

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

  • ベストアンサー
  • kiki_s
  • ベストアンサー率59% (147/248)
回答No.4

コードの整合性は別として。 11個の配列変数を宣言していますので、 A(0)からA(10)までと、a(0)からa(10)までの配列変数が出来ますね。 ただ、test1のコードを実行しても、 A(0)=300 A(1)=300 A(2)からA(8)も同じ300 A(9)=300 A(10)=300 a(0)からa(10)も同じ300 と、全て同じ数値になりますが・・・ 多分、エクセルVBAだと思いますが、 セルの値を変数に取得する場合、A(i)としてもセルのA(番号)にはなりません。 もし、セルの値を変数に取得するなら、下記のコードになります。 (A1からA10のセルの値を変数a(1)からa(10)に取得) Sub test()  Dim a(10) as integer  For i = 1 To 10   a(i) = Worksheets("Sheet1").Cells(i, 1).Value  Next End Sub 変数の読み出しは、 X = a(1) セルA1の値が変数Xに代入されます。 B1シートに代入(つまりA1の値をB1へ) Worksheets("Sheet1").Cells(1, 2).Value = a(1) 質問の内容が今一つ理解出来ないので見当違いかも知れません。

nosense
質問者

お礼

ご回答ありがとうございます。 私の質問が不適切で誤ったことでした。 知らぬこととはいえ申し訳ありません。 プロシージャ間での値の引渡し方が分かっていない ためこのような質問をしてしまいました。 1つの解決方法は、広域変数(public)を読み出すことで 対応できそうということが分かりましたが、配列のデータを他の関数で読み出すコードの記述が思いつかないため質問しました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (3)

回答No.3

a()がtest1の中で定義されている限り、test1以外からは触れることはできません。test1の外に出してください。 また、VBでは大文字・小文字を区別しないのでa()もA()も同じ物として扱います。a()を外に出したところで、test1にA()がある限りa()には何も代入されません。 もひとつ、 Dim i,X as integer この宣言ではiがIntegerではなくVariantになります。VBでは変数ひとつひとつにAsキーワードで型を指定する必要があります。 Dim B(10) As integer Sub test1() Dim i As Integer,X As Integer Dim A(10) As Integer For i = 0 To 10 X = A(i) + 300 B(i) = X next i End Sub Sub test2() ※ここにどのように記載すればa(i)を読み出せますか? MsgBox B(0) End Sub ※コードを見る限りでは、これで解決しそうにありません(X=300で固定になります)が、その時は補足にでもどうぞ。

nosense
質問者

お礼

ご回答ありがとうございます。 >この宣言ではiがIntegerではなくVariantになります。VBでは変数ひ>とつひとつにAsキーワードで型を指定する必要があります。 そうだったんですね。 普通に使えるから意識してなかったです。 ありがとうございます。 すみません、無理なことを質問していました。 プログラムを作る上で、どのように考えていけば 悩んでしまいます。 作り方の整理ができていないためかもしれませんが、 どのように整理すればいいのかが難しくて困ります。

全文を見る
すると、全ての回答が全文表示されます。
回答No.2
nosense
質問者

お礼

ご回答ありがとうございます。 このサイトは見てるのですが、 まだよく分からないので質問させていただきました。

全文を見る
すると、全ての回答が全文表示されます。
回答No.1

文章がいまいち理解できなかったけど。 そこに記述しただけじゃ読み出せないだろ。?

nosense
質問者

お礼

早速のご回答ありがとうございます。 分かりにくい文章ですみません。 このような場合どのように記述すれば良いのでしょうか? やりたいことは、iループで順次変数のデータが変わるのですが それを変数に保存し、他の関数に使用したいのです。

nosense
質問者

補足

すみません。 さらに補足させていただきます。 変数Aと変数Bに一定の関係があり、変数Aに配列a(i)を入れて、 変数Bの値を取り出した配列b(i)があります。 このとき、配列bの値を他の関数で読み出したいのです。 上手く書けず申し訳ありませんがご回答のほど よろしくお願いいたします。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 擬似マインスイーパー

    任意の地雷を設置するというプログラムです。 この中で地雷を*に、安全地帯を空白にしたいのですがやり方がわからないので、わかる方お願いします。 Sub mine() Dim minefield(11, 13) As Integer Dim i As Integer, a As Integer, b As Integer Dim c As Integer c = InputBox("地雷の数を決めます") Randomize For i = 1 To c a = Int(Rnd * 10) + 1 b = Int(Rnd * 12) + 1 If minefield(a, b) = 9 Then i = i - 1 minefield(a, b) = 9 Next i countMine minefield, 10, 12 showInt minefield, 10, 12 ' show minefield, 10, 12 End Sub Sub countMine(f() As Integer, h As Integer, w As Integer) Dim i As Integer, j As Integer Dim a As Integer, b As Integer Dim x As Integer For a = 1 To 10 For b = 1 To 12 If f(a, b) < 9 Then x = 0 If f(a, b - 1) = 9 Then x = x + 1 '左に地雷があるか If f(a, b + 1) = 9 Then x = x + 1 '右に地雷があるか ' ... この部分に追加したいのだが ... f(a, b) = x End If Next b Next a End Sub Sub showInt(f() As Integer, h As Integer, w As Integer) Dim i As Integer Const a As Integer = 7 Const b As Integer = 3 Do While h > 0 For i = 1 To w Cells(a + h, b + i) = f(h, i) Next i h = h - 1 Loop End Sub

  • VBA "double"から0.1を引くと・・・

    エクセルVBAですが、double型で変数を定義し、-80を代入します。 そこから0.1ずつを引いていきます。すると、途中から桁がおかしくなってしまいます。 (注:別に-80からでなくても、どの値からでも、また、引いていっても足していっても、遅かれ早かれ どこかから桁がおかしくなってしまいます。) -80 -80.1 -80.2 …中略 -80.8 -80.8999999999999 -80.9999999999999 … といった感じです。 どうしてこのようになってしまうのでしょうか。 また、このようにならないためにはどうしたらよいのでしょうか。 いかにサンプルプログラムを載せます。 ------------------------------------------ Sub test() Dim test As Double Dim i As Integer test = -80 For i = 1 To 100 test = test - 0.1 Cells(i, 1) = test Next i End Sub ----------------------------------

  • ※VBA配列

    http://oshiete1.goo.ne.jp/qa5196795.htmlで 質問させてもらった者です。質問不足だったため 質問の内容を追加したかったのですが、追加の方法がわからず またこちらで質問させていただきました Dim time1 As Integer, time As Integer Dim X As Integer, Y As Integer Dim X1 As Integer, Y1 As Integer Dim X2 As Integer, Y2 As Integer Dim maru As String, yoko As String, tate As String Dim sankaku As String, shikaku As String Sub 描画() Cells(Y2, X2).Value = shikaku Cells(Y1, X1).Value = sankaku Cells(Y, X).Value = maru End Sub Sub 削除() Cells(Y2, X2).Value = "" End Sub Sub 待機() For time1 = 0 To 1000 For time2 = 0 To 1000 Next Next End Sub Sub 座標移動() X2 = X1 Y2 = Y1 X1 = X Y1 = Y If yoko = "右" Then X = X + 1 Else X = X - 1 End If If X = 30 Then yoko = "左" ElseIf X = 1 Then yoko = "右" End If If tate = "上" Then Y = Y + 1 Else Y = Y - 1 End If If Y = 20 Then tate = "下" ElseIf Y = 1 Then tate = "上" End If End Sub Sub main() maru = "●" sankaku = "▲" shikaku = "■" X = 1 Y = 1 X1 = 1 Y1 = 1 X2 = 1 Y2 = 1 yoko = "右" tate = "上" Do 描画 待機 削除 待機 座標移動 Loop End Sub a~tの文字が、上記のような動きをする プログラムを作成するにはどのように配列を活かせばいいですか? 配列がよくわかっておらず勉強したのですが…使えずにいます;;

  • 【vb.net】クラス化について

    大学で以下のような練習問題を頂きました。 ----- Public Sub test()  Dim a As b = New c  Dim i As Integer = 1  a.disp(i) End Sub 問:この時のbとcを実装せよ。 ----- Public Class c  Public Function disp(ByVal i As Integer) As String   return "iは" & i & "です"  End Function End Class までは書いてみたのですが、b の扱いがどうもわかりません。 どなたか教えていただけませんでしょうか。

  • Excel VBA ・・・教えてください

    何度も質問させて頂いてます。すみません、 下記のプログラムはこの場で教えて頂いたプログラムで、 実行すると●の後を▲や■が追いかける動きをします。 下記のプログラムをある程度使用して 1~20の数字が順々で追いかけっこする プログラムを作成するにはどのようにすればいいのでしょうか… できればプログラムは長めにならず 20の数字から簡単に増やすことのできるような そんなプログラムが作成したいです… どなたかアドバイスお持ちの方 教えて下さいお願いします... Dim time1 As Integer, time As Integer Dim X As Integer, Y As Integer Dim X1 As Integer, Y1 As Integer Dim X2 As Integer, Y2 As Integer Dim maru As String, yoko As String, tate As String Dim sankaku As String, shikaku As String Sub 描画() Cells(Y2, X2).Value = shikaku Cells(Y1, X1).Value = sankaku Cells(Y, X).Value = maru End Sub Sub 削除() Cells(Y2, X2).Value = "" End Sub Sub 待機() For time1 = 0 To 1000 For time2 = 0 To 1000 Next Next End Sub Sub 座標移動() X2 = X1 Y2 = Y1 X1 = X Y1 = Y If yoko = "右" Then X = X + 1 Else X = X - 1 End If If X = 30 Then yoko = "左" ElseIf X = 1 Then yoko = "右" End If If tate = "上" Then Y = Y + 1 Else Y = Y - 1 End If If Y = 20 Then tate = "下" ElseIf Y = 1 Then tate = "上" End If End Sub Sub main() maru = "●" sankaku = "▲" shikaku = "■" X = 1 Y = 1 X1 = 1 Y1 = 1 X2 = 1 Y2 = 1 yoko = "右" tate = "上" Do 描画 待機 削除 待機 座標移動 Loop End Sub

  • [と”の意味を教えてください。

    http://okwave.jp/qa/q5945112.html を参考に、 Sub test1() Dim i As Integer i = 2 If i Like "[1-3]" Then MsgBox i & "です" End If End Sub Sub test2() Dim i As Integer i = 2 If i Like "[1-5]" Then MsgBox i & "です" End If End Sub Sub test3() Dim i As Integer i = 2 If i Like "[1-10]" Then MsgBox i & "です" End If End Sub を作ったのですが、 test3はうまく行きません。 意味としては、 iが "[1-10]"の中の数字の間のどれかであれば、 MsgBox i & "です" を表示させたいです。 でも上記のマクロを実行させた結果、 "[1-10]"の中で計算が行われてるのではないかと思います。 だから、test3は、1-10=-9 という事になり、msgboxが反応しないのではないかと思っています。 でもそうすると、test2だって "[1-5]"は、-4になって、i=2とは違う値なのに なぜMsgBoxが反応してしまうのかわかりません。 でもそもそも[と”の意味が分からないのでそこから教えていただけませんか? “の意味、は二つで挟んで文字列にすると思っています。

  • VBAのUserFormでサブルーチンを用いる

    UserFormのコードに次のように書いてbuttomを押してみると コンパイルエラー:ByRef引数の型が一致しません。 と出てしまいます。 どこが間違っているのでしょうか?ご回答お願いします。 Private Sub buttom_Click() Dim i As Integer Dim name As String i = 1 name = "名前" Call test(i , name) End Sub ---------------------------------------------- Sub test(i As Integer, name As String) Cells(i , 1) = name End Sub

  • エクセル マクロ ループ処理の構文について

    お世話になります。エクセル初心者です。 i < j の関係があるときに、それぞれの数値をfor構文でループを回したいです。 i の数値は外部から入力される前提です。 現在、以下のような構文を考えています(istartとiendは外部から決められた数値とします)が、 この場合、jendはiend + 1とすれば良いのですが、jstartはどのように入力すれば良いでしょうか? 修正箇所を指摘(もしくは全文修正)していただけると、非常に助かります。 よろしくお願いいたします。 Sub test() Dim i As Integer Dim j As Integer Dim istart As Integer Dim iend As Integer Dim jstart As Integer Dim jend As Integer istart = 1 iend = 50 For i = istart To iend For j = jstart To jend '実行したい内容 Next Next End Sub

  • 列番号のAやBも、数値で指定するには

    Sub test() Dim int1 As Integer Dim int2 As Integer int1 = 1 int2 = 2 Cells(3, 1) = "=A" & int1 & "*B" & int2 End Sub このような場合、列番号のAやBも、 数値で指定するにはどうすればいいでしょうか?

  • VBAで縦一列に数字を入力したい

    Private Sub CommandButton1_Click() Dim n As Integer Dim i As Integer Dim x As Integer For i = 1 To n x = i + 3 n = InputBox("層数の値を入力してください") Cells(3, 1).Value = ("基板") Cells(x, 1).Value = i x = x + 1 Next End Sub 上記のようなマクロを組んだのですが、4行目に1が入ってとまってしまいました。 これを完成させるにはどうしたらいいでしょうか?