ExcelのVBAを独学で勉強しているのですが、分からない部分があります。

Visual Basic | Excel153閲覧

ベストアンサー

0
画像

図データの場合 下記値になります。 UBound(inData, 2) = 2 UBound(inData) = 3 UBound(inData) は下記記述の[次元]を省略した形です。 UBound(inData, 1) UBound(配列, 次元)

ThanksImg質問者からのお礼コメント

上手く出来ました! ソート計算部分のfor wは"横方向"の繰り返しという認識で合っていますでしょうか?

お礼日時:8/4 2:08

その他の回答(3件)

0

ReDim inData(l - 1, m - 1) 2次元配列を並べ替えるならtmpを列の分だけ用意して、どこかの列をキーにして並べ替えるのだが、その雰囲気はまるで見当たりませんね。 キーという概念が無いので1から出直しです。 まずは1次元配列を並べ替えることから始めたほうがいいですよ。

0

いっちょかみで、ごめんなさい もう今日仕事なんで、少しでも寝なきゃ・・・ で、ちょい気付いたこと パッと見なので、違ったらごめんね もしかしたら配列の要素数を取得する関数 UBound関数,LBound関数の使い方を勘違いしてるのかも? For a = UBound(inData) To LBound(inData) Step -1 For b = LBound(inData) To a - 1 For文のとこ、変数a,bを使ってまわしたいんだろうけれど・・・ 全体をちゃんと読み込んでないから、ボクの勘違いかもしれんけど、いいのかな? https://vba-create.jp/vba-array-ubound/ ← 念のため そして、さらに念のため Sub test() Dim d(2, 3) As Long MsgBox UBound(d) ’2が表示されるよ! ・・・① MsgBox UBound(d, 1) ’2が表示されるよ! ・・・② MsgBox UBound(d, 2) ’3が表示されるよ! End Sub ちなみに①は、②の ,1を省略した書き方だね 多次元配列になると、ちょっと書き方もかわってくるからね どっちの要素数を取得したいのか・・・ ちゃんと指定しないとダメだよ それと、もう一人の回答者:a_h*******さんから指摘もされてるようで、思ったんだけどね 配列,多次元配列がちゃんと認識して使えていないかも? もう一度、まずは配列を動作,働きをちゃんと確認してみよう!

0

>If inData(b) > inData(b + 1) Then ←←エラー部分 最初の方では、 inDataが2次元配列なのですけど この行では1次元配列です どこで配列の構成が変わったのでしょうか?

回答者様のご指摘を受け、二次元配列の表記に変更したのですが、それでも同じエラーが出てしまいます。 'ソートの計算 For a = UBound(inData) To LBound(inData) Step -1 For b = LBound(inData) To a - 1 If inData(b, a) > inData(b + 1, a) Then tmp = inData(b, a) inData(b, a) = inData(b + 1, a) inData(b + 1, a) = tmp End If Next b Next a