- 締切済み
配列のコピー
BVA初心者です。 基礎の基礎なのですが、質問させていただけないでしょうか。 excel VBAで、いま画面に 12345678910 12345678910 12345678910 ・・・・・・ と、あります。 これと、同じ配列を、右端にも作りたいのですが、 ”A(i, 1) = A(i, JMAX + 1)” のような記述方法で、全体をコピーすることはできますか?(copyメソッドは使わないで、できるはずなのですが・・・。) コピーができずに困ってます、よろしくお願いします。 Const IMAX As Long = 10 Const JMAX As Long = 10 Sub A() Cells.Clear Dim A(IMAX + 1, JMAX + 1) As Long Dim B(IMAX + 1, JMAX + 1) As Long For i = 1 To IMAX + 1 For j = 1 To JMAX Cells(i, j) = j A(i, 1) = A(i, JMAX + 1) '左端の配列を一番右にコピーする A(i, JMAX + 2) = A(i, 2) '左から2番目の配列を右から2番目にコピーする Next Next End Sub
- みんなの回答 (2)
- 専門家の回答
みんなの回答
s_husky です。 cells.clear が、原因です。 クリアすれば当然に0! Option Explicit Option Base 1 Private Sub CommandButton1_Click() Const conRMAX = 5 Const conCMAX = 2 Const conOFFSET = 10 Dim R As Integer Dim C As Integer Dim X As Integer Dim lngLeft(conRMAX, conCMAX) As Long Dim lngRight(conRMAX, conCMAX) As Long For R = 1 To conRMAX For C = 1 To conCMAX X = conCMAX - C + 1 lngLeft(R, C) = Cells(R, C) lngRight(R, X) = lngLeft(R, C) Cells(R, conOFFSET - X) = lngLeft(R, C) Cells(R, C) = "" ' ここでクリアすべし! Next C Next R End Sub
多分、練習でしょうから・・・。 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 こういう風にやりたいのならば! Option Explicit Option Base 1 Private Sub CommandButton1_Click() Const conRMAX = 5 Const conCMAX = 2 Const conOFFSET = 10 Dim R As Integer Dim C As Integer Dim X As Integer Dim lngLeft(conRMAX, conCMAX) As Long Dim lngRight(conRMAX, conCMAX) As Long For R = 1 To conRMAX For C = 1 To conCMAX X = conCMAX - C + 1 lngLeft(R, C) = Cells(R, C) lngRight(R, X) = lngLeft(R, C) Cells(R, conOFFSET - X) = lngLeft(R, C) Next C Next R End Sub
補足
ありがとうございます。 ほんとに速い返事が来たので、嬉しかったです! でも・・・ このコードでやってみても、希望通りの結果にはなりませんでした、、、どうして? 結果は、 0 0 0 0 0 0 ・・・・・・・ のようになってしまいます。 これでは、どこをコピーしたのか、わからないのですね。 大変お手数おかけしますが、なにが足りないのか、わかったら教えていただけませんでしょうか? (回答の記述はここでは、lingLeft=B, lingRight=Aと置き換えてあります。) Option Explicit Option Base 1 Private Sub CommandButton1_Click() Cells.Clear Const conRMAX = 5 Const conCMAX = 2 Const conOFFSET = 10 Dim R As Integer Dim C As Integer Dim X As Integer Dim B(conRMAX, conCMAX) As Long Dim A(conRMAX, conCMAX) As Long For R = 1 To conRMAX For C = 1 To conCMAX X = conCMAX - C + 1 B(R, C) = Cells(R, C) A(R, X) = B(R, C) Cells(R, conOFFSET - X) = B(R, C) Next C Next R End Sub
お礼
なるほど!! できました! ありがとうございます、まだまだ勉強が足りないのだな、と実感させられました。 重ねがさね、お忙しいところありがとうございます。 Option Explicit Option Base 1 Private Sub CommandButton1_Click() Const conRMAX = 5 Const conCMAX = 2 Const conOFFSET = 10 Dim R As Integer Dim C As Integer Dim X As Integer Dim lngLeft(conRMAX, conCMAX) As Long Dim lngRight(conRMAX, conCMAX) As Long For R = 1 To conRMAX For C = 1 To conCMAX X = conCMAX - C + 1 lngLeft(R, C) = Cells(R, C) lngRight(R, X) = lngLeft(R, C) Cells(R, conOFFSET - X) = lngLeft(R, C) Cells(R, C) = 9 Next C Next R End Sub