初級19配列 電車 反対方向には

タグの編集
投稿者 あらあらあられ  (社会人) 投稿日時 2022/12/27 14:30:21
楽しく勉強させてもらっています。
さて、初級講座19 静的配列にある電車の所要時間での質問です。
登り方向(津田沼→市川)ではうまく計算されますが、
下り方向ではどうのように選んでも0分になります。
改訂版を出してください。
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2022/12/27 15:40:23
> 初級講座19 静的配列にある電車の所要時間での質問です。
VB6/VBA 版の方のコレですね?
http://rucio.o.oo7.jp/main/shokyu/jugyou19.htm

> 下り方向ではどうのように選んでも0分になります。
おそらく、上り/下りの判定処理が不足しているのではないでしょうか。
「初級講座24 デバッグ」の『ステップ実行』を習得すると、
何が問題なのかを追跡しやすくなるかと思います。


> 改訂版を出してください。
るきおさんに代わって、少し書き換えてみました。
ここでは、動的配列の作成に Split 関数や Array 関数を使っています。

Dim Stations() As String
Stations = Split("津田沼 東船橋 船橋 西船橋 下総中山 本八幡 市川")
Dim TrainTimes() As Variant
TrainTimes = Array(3, 2, 3, 2, 4, 4)

Dim StartStation As Integer, EndStation As Integer

''東船橋から本八幡まで 
'StartStation = 1 
'EndStation = 5 

'市川から津田沼まで 
StartStation = 6
EndStation = 0

Dim idx As Integer, Jikan As Integer
Jikan = 0
If StartStation <= EndStation Then
    For idx = StartStation To EndStation - 1
        Jikan = Jikan + TrainTimes(idx)
    Next
Else
    For idx = EndStation To StartStation - 1
        Jikan = Jikan + TrainTimes(idx)
    Next
End If
Dim msg As String
msg = Stations(StartStation) & "から" & Stations(EndStation) & "までは" & CStr(Jikan) & "分です"
MsgBox msg, vbInformation
投稿者 あらあらあられ  (社会人) 投稿日時 2023/1/27 15:05:30
ありがとうございます。
原本と訂正文と見比べながら、いろいろと手を加えていますが、初心者の私には理解できず、未だにプログラムを動かすことができません。

Stations = Split("津田沼 東船橋 船橋 西船橋 下総中山 本八幡 市川")で、「プロシージャの外では無効です」(私のPCではInvalid outside procedure)が表示されます。

ここは、もともとの下のような駅名の書き方と同義なのですよね。であれば便利だなーと思っています。お時間があれば、再度ご教授していただけないでしょうか?分からないところが分からなくて、もう泣きそうです(微笑)。

Private Sub Form_Load()

    Station(1) = "津田沼" ←訂正文では番号が0~6までのようですね。
    Station(2) = "東船橋"
    Station(3) = "船橋"
    Station(4) = "西船橋"
    Station(5) = "下総中山"
    Station(6) = "本八幡"
    Station(7) = "市川"

End Sub
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2023/1/27 15:42:30
> 私のPCではInvalid outside procedure
何故でしょうか。日本語版を使用していない…?

御利用中の開発環境(どのバージョンの Visual Basic なのか)を明記できますか?


> 「プロシージャの外では無効です」が表示されます。
プロシージャーの外に書くのではなく、
プロシージャーの中に書いてください。

プロシージャーとは、「Sub~End Sub」や「Function~End Function」ブロックのことを指します。

Private Stations() As String
Private Sub Form_Load()
    Stations = Split("津田沼 東船橋 船橋 西船橋 下総中山 本八幡 市川")
End Sub