[[20170104230829]] 『変数への初期値の設定方法』(京子) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『変数への初期値の設定方法』(京子)

 お世話になります

Sub hensu()
Dim a As Long, b As Long, c As Long, d As Long, e As Long
Dim f As Long, g As Long, h As Long, i As Long, j As Long

  a = 1
  b = 1
  c = 1
  d = 1
  e = 1
  f = 10000
  g = 10000
  h = 10000
  i = 10000
  j = 10000

      '各変数を使用しての処理

End Sub

 変数の初期値を設定する際、上の例の様に
 変数の個数は10個で "1" とするのが5個、10000とするのが5個の場合に
 まとめて設定する様な方法はありますでしょうか?
 もしありましたら教えて下さい
 宜しくお願いします

< 使用 Excel:Excel2010、使用 OS:Windows7 >


 できないですね。残念ながら。

 一括Set といった関数があればいいですね。なので作っちゃいましょう。

 Sub Test()
    Dim a As Long, b As Long, c As Long, d As Long, e As Long
    Dim f As Long, g As Long, h As Long, i As Long, j As Long
    Dim x As String, y As String, z As String

    一括Set 1, a, b, c, d, e
    一括Set 1000, f, g, h, i, j
    一括Set "こんにちは", x, y, z

    MsgBox a & vbLf & b & vbLf & c & vbLf & d & vbLf & e
    MsgBox f & vbLf & g & vbLf & h & vbLf & i & vbLf & j
    MsgBox x & vbLf & y & vbLf & z

 End Sub

 Sub 一括Set(ParamArray arg())
    Dim d As Variant
    Dim i As Long

    d = arg(LBound(arg))
    For i = LBound(arg) + 1 To UBound(arg)
        arg(i) = d
    Next
 End Sub

(β) 2017/01/04(水) 23:47


変数の初期値を設定する際、上の例の様に 変数の個数は10個で "1" とするのが5個、10000とするのが5個の場合に まとめて設定する様な方法はありますでしょうか?

んと、
その前にホントに10個も変数を用意しなければいけないか、
もう一度、推敲してみてください。

もし、

Sub test()

    Dim a As Long, b As Long, c As Long, d As Long, e As Long
    Dim f As Long, g As Long, h As Long, i As Long, j As Long

    a = 1
    b = 1
    c = 1
    d = 1
    e = 1
    f = 10000
    g = 10000
    h = 10000
    i = 10000
    j = 10000

    Do Until a = f
        Range("A1").Value = a
        a = a + 1
    Loop

    Do Until b = g
        Range("B1").Value = b
        b = b + 1
    Loop

    Do Until c = h
        Range("C1").Value = c
        c = c + 1
    Loop

End Sub

みたいなことをしたいなら、

Sub test2()

    Dim i As Long, j As Long
    Dim c As Range

    Set c = Range("A1")
    For i = 1 To 5
        For j = 1 To 10000
            c.Value = i
        Next
        Set c = c.Offset(, 1)
    Next
End Sub

のように纏められます。
その名の通り「変数」なのですから、
都度都度、使いまわして色々な値を必要に応じて変えてやるように、
柔軟に考えましょう^^

また、どうしても10個ないとだめだけど、
メインのプロシージャに長々と代入式を羅列するのが、
読みにくいと思うなら、別のプロシージャに追い出すのも
ありかなぁと思います。

Sub test()

    Dim a As Long, b As Long, c As Long, d As Long, e As Long
    Dim f As Long, g As Long, h As Long, i As Long, j As Long

    Get変数初期化 a, b, c, d, e, f, g, h, i, j

    Stop
    '続いて何かの処理
End Sub

Function Get変数初期化(a As Long, b As Long, c As Long, d As Long, e As Long, _

                  f As Long, g As Long, h As Long, i As Long, j As Long)
    a = 1
    b = 1
    c = 1
    d = 1
    e = 1
    f = 10000
    g = 10000
    h = 10000
    i = 10000
    j = 10000
End Function

ただ、タイピングの量を減らしたいだけなら、諦めてください。

いずれにしても、一般論で話しても有意義とは思えません。
どんなことをやろうとしているのかで、
効率的な書き方は変わるので、
やろうとしていることを明確にした方がいいと思います。
(まっつわん) 2017/01/05(木) 10:43


 βさん まっつぁんさん
 回答有難う御座います
 ん〜
 通常の方法では無理なのですね。了解です
 諸々事情があり2種類の初期値設定を行う変数の数は実際には10個ではなく23個なんです
 コードの中で縦にズラーッと並び
 不都合は無いのですが、ひょっとして記述方法を私が知らないだけ?
 と思っての質問でした。
(京子) 2017/01/05(木) 23:33

    a = 1:  b = 1:  c = 1:  d = 1:  e = 1
といったマルチステートメントは可能です。
可読性が低下するという意見もありますが。
(γ) 2017/01/05(木) 23:59

 こんばんわ。

 変数名は全て別の名前にしないといけないんですか?
 配列を使用出来るなら、以下のような記述で格納できると思いますが、

    For i = 1 To 10
        If i < 6 Then
            a(i) = 1
        Else
            a(i) = 10000
        End If
    Next i

 とか以下とか

    For i = 1 To 5
        a(i) = 1
    Next i
    For i = 6 To 10
        a(i) = 10000
    Next i

 そもそも同じ中身の変数は1つにして(a=1 と b=10000 の2つだけにして)使い回ししたらダメなんですか?
 コードの中身を質問者さん以外の人も見て何か指摘されるとかですか?

( sy) 2017/01/06(金) 00:19


私も配列化ができないのかと思います。
質問者さんのいう、普通の方法って、どんなのかな?
a=b=c=d=e=1
みたいなこと?
そうなら、アウト、という他ありません。

配列利用が不可なら、一括Setが良いと思うけど、どこが不満ですか?

(γ) 2017/01/06(金) 00:39


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.