• 締切済み

配列のコピー

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

みんなの回答

noname#22222
noname#22222
回答No.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

nanakokko
質問者

お礼

なるほど!! できました! ありがとうございます、まだまだ勉強が足りないのだな、と実感させられました。 重ねがさね、お忙しいところありがとうございます。 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

noname#22222
noname#22222
回答No.1

多分、練習でしょうから・・・。 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

nanakokko
質問者

補足

ありがとうございます。 ほんとに速い返事が来たので、嬉しかったです! でも・・・ このコードでやってみても、希望通りの結果にはなりませんでした、、、どうして? 結果は、 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