プロが教える店舗&オフィスのセキュリティ対策術

下記のコードを詳しく教えて
   
x2 = Range("C3:E5").Value

ReDim ans2(1 To 1, 1 To UBound(x2)) ←この部分の意味

    For i = LBound(x2, 2) To UBound(x2, 2)

      For j = LBound(x2) To UBound(x2)

       この部分の意味 → ans2(1, i) = ans2(1, i) + x2(j, i)

      Next j

    Next i

質問者からの補足コメント

  • うーん・・・

    For i = LBound(x2) To UBound(x2) ← UBound(x2) UBound(x2,2)としても結果同じになります。

    For j = LBound(x2, 1) To UBound(x2, 2)

    ans2(1, i) = ans2(1, i) + x2(j, i)

    ans2 1,1 ← 格納←1,1  1,1 1,2 1,3
    ans2 1,2 ← 格納←1,2 2,1 2,2 2,3
    ans2 1,3 ← 格納←1,3 3,1 2,3 3,3
    こういうことでしょうか
    わかりにくいかもしれませんが。

    No.1の回答に寄せられた補足コメントです。 補足日時:2018/12/26 11:02
  • どう思う?

    LBound(x2, 2) To UBound(x2, 2)ということは
    LBound(x2, 2)  列の最小値
    UBound(x2, 2)  列の最大値

    とうことですか。すなわち

    LBound(x2, 2) 2だと列
    LBound(x2)  だと行ということですか

    No.2の回答に寄せられた補足コメントです。 補足日時:2018/12/28 14:20

A 回答 (4件)

全体として以下の様な動作をしています。


ans2(1,1) = Range("C3")~Range("C5")の合計を代入
ans2(1,2) = Range("D3")~Range("D5")の合計を代入
ans2(1,3) = Range("E3")~Range("E5")の合計を代入


> x2 = Range("C3:E5").Value

x2は、要素が行方向1~3、列方向1~3の二次元配列になります。
 x2(1,1)がC3セルの値
 x2(1,2)はD3セルの値
 …
 X2(3,3)がE5セルの値



> ReDim ans2(1 To 1, 1 To UBound(x2))

各列の合計を代入するans2は要素が行方向1~1,列方向が1~3の二次元配列の構成が必要となります。
その割り当てを行っています。



そして以下で各列の合計を計算しています。
> For i = LBound(x2, 2) To UBound(x2, 2)   '列方向の要素変化(1~3/C列~E列)
>   For j = LBound(x2) To UBound(x2)    '行方向の要素変化(1~3/3行~5行)
>     ans2(1, i) = ans2(1, i) + x2(j, i) '各列ごとに行の値を足しこむ
>   Next j
> Next i



試しに
 Range("A1:C1").Value = ans2
とすれば対応するセルに計算結果が表示されます。
この回答への補足あり
    • good
    • 0

No.1です。


補足に対して。
間が空いてしまい申し訳なかったです。
PCが古いので調整などしてまして。。。。。

>For i = LBound(x2) To UBound(x2) ← UBound(x2) UBound(x2,2)としても結果同じになります。

質問文の内容では確かに同じになります。
でも
・UBound(x2)
・UBound(x2,2)
は意味が違います。

同じになる原因はセルの範囲が【行・列同じ数】だからですね。
テストされるなら揃えなければ気づいたはずです。

・UBound(x2) ・・・・・セル範囲の行方向を見てます。
・UBound(x2,2) ・・・・セル範囲の列方向を見てます。

ここは既にsiffon9さんが補足して頂いてて感謝です。

補足の後半につきましては記載されているような受け取り方で宜しいのではと思います。
    • good
    • 0

No.2です。


No.1さんの仰るとおり

ReDim ans2(1 To 1, 1 To UBound(x2,))

ReDim ans2(1 To 1, 1 To UBound(x2, 2))
だと思います。
    • good
    • 0

>下記のコードを詳しく教えて


>x2 = Range("C3:E5").Value
>ReDim ans2(1 To 1, 1 To UBound(x2)) ←この部分の意味

詳しくの前に何をしたいのかが不明。
と言うより間違いでしょうね。
多分本来は2次元配列の2番目の要素数を与えたいのでしょうから、

ReDim ans2(1 To 1, 1 To UBound(x2, 2))

こんな感じでは?

>この部分の意味 → ans2(1, i) = ans2(1, i) + x2(j, i)

2次元配列の個々の値( x2(j, i)  )を2番目の要素毎に加算していくって感じでしょうか。
この回答への補足あり
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!