Excel VBA質問箱 IV

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

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


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

【70295】指定分行列入れ替え help 11/10/31(月) 7:24 質問[未読]
【70296】Re:指定分行列入れ替え ichinose 11/10/31(月) 8:58 発言[未読]
【70297】Re:指定分行列入れ替え UO3 11/10/31(月) 10:45 回答[未読]
【70298】Re:指定分行列入れ替え UO3 11/10/31(月) 11:04 回答[未読]
【70299】Re:指定分行列入れ替え UO3 11/10/31(月) 11:28 発言[未読]

【70295】指定分行列入れ替え
質問  help  - 11/10/31(月) 7:24 -

引用なし
パスワード
   Private Sub CommandButton83_Click()
Dim myr As Variant
Dim cc As Variant
Dim ss As Variant
Dim i As Long
Dim n As Long
Dim r As Long
With Range("a1").CurrentRegion
 myr = .Value
 .clear
End With
For i = 1 To UBound(myr, 1) Step 4
 r = i + 3
  cc = Range(myr(i, 1), myr(r, 1))
   ss = WorksheetFunction.Transpose(cc) '配列の入れ替えたものをssに格納
 n = n + 1
 Cells(n, 1).rezise(UBound(ss, 1), UBound(ss, 2)) = ss
Next i
End Sub

ここでエラーが出ます。
cc = Range(myr(i, 1), myr(r, 1)) myrの4つの範囲ずつ行列を入れ替えたのですが・・・・・・

結構勉強したのですが。これ以上わかりません。なぜ?

【70296】Re:指定分行列入れ替え
発言  ichinose  - 11/10/31(月) 8:58 -

引用なし
パスワード
   おはようございます。


>Private Sub CommandButton83_Click()
>Dim myr As Variant
>Dim cc As Variant
>Dim ss As Variant
>Dim i As Long
>Dim n As Long
>Dim r As Long
>With Range("a1").CurrentRegion
 myr = .Value 'myrという配列には、何が入っているという認識ですか?
> .clear
>End With
>For i = 1 To UBound(myr, 1) Step 4
> r = i + 3
>  cc = Range(myr(i, 1), myr(r, 1))
>   ss = WorksheetFunction.Transpose(cc) '配列の入れ替えたものをssに格納
> n = n + 1
> Cells(n, 1).rezise(UBound(ss, 1), UBound(ss, 2)) = ss
>Next i
>End Sub
>
>ここでエラーが出ます。
>cc = Range(myr(i, 1), myr(r, 1)) myrの4つの範囲ずつ行列を入れ替えたのですが・・・・・・

  A   
1  ああ
2  いい
3  うう
4  ええ
5  おお
6  かか
7  きき
8  くく

この上記の例だとmyrには、何が入っているんでしょうか?

>cc = Range(myr(i, 1), myr(r, 1)) myrの4つの範囲ずつ行列を入れ替えたのですが・・・・・・

i=1,r=4の場合、
Range(myr(i, 1), myr(r, 1))は、
range("ああ","ええ") と記述したのと同じです。

再度、検討してみてください。

【70297】Re:指定分行列入れ替え
回答  UO3  - 11/10/31(月) 10:45 -

引用なし
パスワード
   ▼help さん:

こんにちは
エラーそのものは
 Cells(n, 1).rezise(UBound(ss, 1), UBound(ss, 2)) = ss
この「Resize」のスペルミスでしょうけど、配列内の一部領域を他の配列に
一序に取り込むことはできません。
(セル領域についてはできるわけで配列でもできればいいんですけどね)

おやりになりたかったことは以下のようなことでしょうか?

Sub Test()
  Dim myr As Variant
  Dim cc() As Variant
  Dim ss As Variant
  Dim i As Long
  Dim n As Long
  Dim r As Long
  Dim x As Long
  Dim y As Long
  Dim k As Long
  
  With Range("a1").CurrentRegion
    myr = .Value
    .Clear
    ReDim cc(1 To 4, 1 To UBound(myr, 2))
  End With
  
  n = 1
  
  For i = 1 To UBound(myr, 1) Step 4
    r = i + 3
    k = 0
    
    For y = i To r
      k = k + 1
      
      For x = 1 To UBound(myr, 2)
        cc(k, x) = myr(y, x)
      Next
      
    Next
    
    ss = WorksheetFunction.Transpose(cc) '配列の入れ替えたものをssに格納
    Cells(n, 1).Resize(UBound(ss, 1), UBound(ss, 2)).Value = ss
    n = n + UBound(ss, 1)
  Next i
  
End Sub

【70298】Re:指定分行列入れ替え
回答  UO3  - 11/10/31(月) 11:04 -

引用なし
パスワード
   ▼help さん:

もし、上記で提示した理解が正しいとすれば、以下のような処理も考えられます。
配列を使わず、セル領域を相手にしますので、直接Transposeが利用できます。

Sub Test2()
  Dim i As Long
  Dim n As Long
  Dim wCol As Long
  Dim mRow As Long
  Dim mCols As Long
  
  wCol = 4 + 2
  
  With Range("a1").CurrentRegion
    mRow = .Rows.Count
    mCols = .Columns.Count
    .Cells(1, wCol).Resize(mRow, mCols).Value = .Value
    .Clear
  End With
  
  n = 1
  
  For i = 1 To mRow Step 4
    Cells(n, 1).Resize(mCols, 4).Value = _
      WorksheetFunction.Transpose(Cells(i, wCol).Resize(4, mCols).Value)
    n = n + mCols
  Next
  
  Cells(1, wCol).CurrentRegion.Clear
  
End Sub

【70299】Re:指定分行列入れ替え
発言  UO3  - 11/10/31(月) 11:28 -

引用なし
パスワード
   ↑元のセル領域を作業域にコピーした上で元のセル領域にTranposeしていますが
逆に、元のセル領域を最初にクリアせず、そこから作業域にTransposeして、
最後に、元領域クリア、作業域から置き換え、作業域クリア という方法でもいいかもしれませんね。

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