Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


6063 / 13645 ツリー ←次へ | 前へ→

【47411】二次元配列のデータを一次元に変換 三浦(照) 07/3/9(金) 14:22 質問[未読]
【47414】Re:二次元配列のデータを一次元に変換 へっぽこ 07/3/9(金) 14:48 発言[未読]
【47422】Re:二次元配列のデータを一次元に変換 三浦(照) 07/3/9(金) 15:40 お礼[未読]
【47419】Re:二次元配列のデータを一次元に変換 ひげくま 07/3/9(金) 15:12 発言[未読]
【47421】Re:二次元配列のデータを一次元に変換 三浦(照) 07/3/9(金) 15:33 お礼[未読]

【47411】二次元配列のデータを一次元に変換
質問  三浦(照)  - 07/3/9(金) 14:22 -

引用なし
パスワード
   50行150列の二次元配列のデータをA列7500(=50*150)行の一次元配列のデータ
に変換しようと下記のマクロを作成中です。
下から、4行目の以下の式が 受け付けられません。

       ActiveCell.FormulaR1C1 = "=Sheet2!R[k]C[j]"

R[k]C[j]の部分は j=1の時 R[-50]C[1]
        j=2の時 R[-100]C[2]
        ・・・
        j=jの時 R[-50*j]C[j]
        ・・・
        j=150の時 R[-7500]C[150]
jの値に従って、変える操作を考えています。
  
よろしくご教示をお願いします。

作成中のマクロ
-------------------------------------------------------------------------
Sub 移動3()
'
' 移動3 Macro
' マクロ記録日 : 2007/3/9 ユーザー名 : 三浦(照)
'
'
  Sheets("Sheet3").Select
  ActiveCell.FormulaR1C1 = "=Sheet2!RC"
  Range("A1").Select
  Selection.AutoFill Destination:=Range("A1:A50"), Type:=xlFillDefault
  Range("A1:A50").Select
  m = 150
  For j = 1 To m
    k = -50 * j
     l = 50
     For h = 1 To l
       i = h + 50
       Cells(i, 1).Select
       ActiveCell.FormulaR1C1 = "=Sheet2!R[k]C[j]"
     Next
  Next
End Sub
--------------------------------------------------------------------------

【47414】Re:二次元配列のデータを一次元に変換
発言  へっぽこ  - 07/3/9(金) 14:48 -

引用なし
パスワード
   良く見てませんがこうではないでしょうか?

ActiveCell.FormulaR1C1 = "=Sheet2!R[" & k & "]C[" & j & "]"

試しに
MsgBox "=Sheet2!R[k]C[j]"
MsgBox "=Sheet2!R[" & k & "]C[" & j & "]"
とすると良く分かって頂けるかと。

【47419】Re:二次元配列のデータを一次元に変換
発言  ひげくま  - 07/3/9(金) 15:12 -

引用なし
パスワード
   ▼三浦(照) さん:
こんにちは。

>R[k]C[j]の部分は j=1の時 R[-50]C[1]

この書き方は相対座標の書き方なのは解っていますか?
そして、座標をマイナスにすることは出来ないはずです。
そもそも、なぜ-50なのかも私には理解できません。

Sheet3のセルに書き込みたいのは、
(1) Sheet2のセルの値
(2) Sheet2のセルの値を参照する数式
のどちらなのでしょうか?

>       ActiveCell.FormulaR1C1 = "=Sheet2!R[k]C[j]"

これだと、(2)ということになります。

(1)で良いのであれば、

  Dim cc As Long
  
  Dim Sh2 As Worksheet
  Dim Sh3 As Worksheet
  
  Set Sh2 = Sheets("Sheet2")
  Set Sh3 = Sheets("Sheet3")
  
  For cc = 1 To 150
    Sh3.Cells((cc - 1) * 50 + 1, 1).Resize(50, 1).Value = _
    Sh2.Cells(1, cc).Resize(50, 1).Value
  Next cc

これで出来ますけど、どうでしょうか?

【47421】Re:二次元配列のデータを一次元に変換
お礼  三浦(照)  - 07/3/9(金) 15:33 -

引用なし
パスワード
   ▼ひげくま さん:

ご提示いただいたマクロを実行して、予定の変換ができました。
ありがとうございます。

>この書き方は相対座標の書き方なのは解っていますか?
初心者で解っていません。

>そして、座標をマイナスにすることは出来ないはずです。
新しいマクロの記録で手順を追って、作成したところR[-50]C[1]
から、順に数値が変化していたので、繰り返しの演算式になるの
ではと思った次第です。

素早く、適切な回答ありがとうございます。
今後とも、よろしくお願いいたします。

三浦(照)
>▼三浦(照) さん:
>こんにちは。
>
>>R[k]C[j]の部分は j=1の時 R[-50]C[1]
>
>この書き方は相対座標の書き方なのは解っていますか?
>そして、座標をマイナスにすることは出来ないはずです。
>そもそも、なぜ-50なのかも私には理解できません。
>
>Sheet3のセルに書き込みたいのは、
>(1) Sheet2のセルの値
>(2) Sheet2のセルの値を参照する数式
>のどちらなのでしょうか?
>
>>       ActiveCell.FormulaR1C1 = "=Sheet2!R[k]C[j]"
>
>これだと、(2)ということになります。
>
>(1)で良いのであれば、
>
>  Dim cc As Long
>  
>  Dim Sh2 As Worksheet
>  Dim Sh3 As Worksheet
>  
>  Set Sh2 = Sheets("Sheet2")
>  Set Sh3 = Sheets("Sheet3")
>  
>  For cc = 1 To 150
>    Sh3.Cells((cc - 1) * 50 + 1, 1).Resize(50, 1).Value = _
>    Sh2.Cells(1, cc).Resize(50, 1).Value
>  Next cc
>
>これで出来ますけど、どうでしょうか?

【47422】Re:二次元配列のデータを一次元に変換
お礼  三浦(照)  - 07/3/9(金) 15:40 -

引用なし
パスワード
   へっぽこ さん:

アドバイスいただいた変更により、マクロは実行されました。
ただし、他の構文が不適当なため、予定した変換はできていません。
よく考えてみようと思います。

取り敢えず、迅速な回答ありがとうございました。

三浦(照)
▼へっぽこ さん:
>良く見てませんがこうではないでしょうか?
>
>ActiveCell.FormulaR1C1 = "=Sheet2!R[" & k & "]C[" & j & "]"
>
>試しに
>MsgBox "=Sheet2!R[k]C[j]"
>MsgBox "=Sheet2!R[" & k & "]C[" & j & "]"
>とすると良く分かって頂けるかと。

6063 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free