Excel VBA質問箱 IV

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

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


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

【77251】配列 列を並び替える Mari 15/6/26(金) 14:06 質問[未読]
【77252】Re:配列 列を並び替える β 15/6/26(金) 15:08 発言[未読]
【77253】Re:配列 列を並び替える [名前なし] 15/6/26(金) 15:32 回答[未読]
【77254】Re:配列 列を並び替える ウッシ 15/6/26(金) 15:35 回答[未読]
【77255】Re:配列 列を並び替える ウッシ 15/6/26(金) 15:46 回答[未読]
【77256】Re:配列 列を並び替える β 15/6/26(金) 17:06 発言[未読]

【77251】配列 列を並び替える
質問  Mari  - 15/6/26(金) 14:06 -

引用なし
パスワード
   お世話になっております。

教えてください。
A1:Z10の範囲を配列にします。
配列にした範囲の欲しい列だけを並べ替えて、
抽出することはできるのでしょうか。

たとえば、
B列、D列、A列、N列、Z列、F列の順で配列を作りなおす。
他の列は必要ないです。

宜しくお願いします。

【77252】Re:配列 列を並び替える
発言  β  - 15/6/26(金) 15:08 -

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

処理方法としては、いろんな方法があるかと思いますが、大きくは2つ
のやりかたになります。Mariさんはいずれをご希望ですか。

1.配列に指定セル領域の値をまず取り込んで、その中から抽出。
2.セル領域から配列に取り込む際に、必要列をその順序も含めて指定。

【77253】Re:配列 列を並び替える
回答  [名前なし]  - 15/6/26(金) 15:32 -

引用なし
パスワード
   ▼β さん:
>
>1.配列に指定セル領域の値をまず取り込んで、その中から抽出。
>2.セル領域から配列に取り込む際に、必要列をその順序も含めて指定。

1しか頭に無かったですが、2が出来るならすごいです。
2を希望します。

やりたい事が、ブックAのデータ範囲から必要列と順序を指定して取り出し、
違うブックのシート(A)にはKEYコードAを含む行だけ転記、
シート(B)にはKEYコードBを含む行だけを転記、
としていくだけです。

また、別で質問しようと思っていますが、
この行を取り出す方法も悩んでおります。

配列(0) = KEYコードAの1行目
配列(1) = KEYコードAの3行目
配列(2) = KEYコードAの10行目



入れ終わった後に、Range("A1:Z" & ubound(配列)) = 配列
と一気に転記したいのです。
ちなみにループで次は、KEYコードBを、KEYコードCをという具合に、
転記していきたいです。

配列(0) = KEYコードAの1行目
転記
配列(1) = KEYコードAの3行目
転記


だと、処理が遅いと思うので。

【77254】Re:配列 列を並び替える
回答  ウッシ  - 15/6/26(金) 15:35 -

引用なし
パスワード
   こんにちは

項目行が有ればフィルタオプションで必要キーの必要列だけ抽出すれば
速いと思います。

【77255】Re:配列 列を並び替える
回答  ウッシ  - 15/6/26(金) 15:46 -

引用なし
パスワード
   配列に取込むなら、

Sub test1()
  Dim a As Variant
  Dim i As Long
  Dim j As Long
    
  a = Array("B1:B10", "D1:D10", "A1:A10", "N1:N10", "Z1:Z10", "F1:F10")
  
  ReDim v(0 To 9, 0 To 5)
  
  With Worksheets("Sheet1")
    For i = 0 To 5
      For j = 0 To 9
        v(j, i) = .Range(a(i)).Cells(j + 1, 1)
      Next
    Next
        
    .Range("A15").Resize(10, 6).Value = v
  
  End With
    
End Sub

こんな感じで。

【77256】Re:配列 列を並び替える
発言  β  - 15/6/26(金) 17:06 -

引用なし
パスワード
   ▼[名前なし] さん:

後者、行指定で配列を取り出すのは、シート関数のINDEXを使えば割合と楽です。
取り出した結果を A40から下に転記しています。

Sub Test1()
  Dim v As Variant
  Dim w As Variant
  
  v = Range("A1:Z10").Value
  v = WorksheetFunction.Transpose(v)
  w = Application.Index(v, Evaluate("row(1:" & UBound(v, 1) & ")"), Array(1, 3, 10))
  w = WorksheetFunction.Transpose(w)
  
  Range("A40").Resize(UBound(w, 1), UBound(w, 2)).Value = w
  
End Sub

列指定の取り出し、以下のような方法も。

まず、

Function makeArray(r As Range, ParamArray cols())
  Dim w As Variant
  Dim col As Variant
  Dim x As Long
  Dim c As Range
  Dim i As Long
  
  ReDim w(1 To r.Rows.Count, 1 To UBound(cols) + 1)
  
  For Each col In cols
    i = 0
    x = x + 1
    For Each c In Cells(r.Row, col).Resize(r.Rows.Count)
      i = i + 1
      w(i, x) = c.Value
    Next
  Next
  
  makeArray = w
  
End Function

こんなコードを準備しておいて、使う場合は

Sub Test2()
  Dim v As Variant
  
  v = makeArray(Range("A1:Z10"), "B", "D", "A", "N", "Z", "F")
  
  Range("A20").Resize(UBound(v, 1), UBound(v, 2)).Value = v
  
End Sub

取り出したい列記号を、その順番で、いくつでも記述。
結果を A20以降に転記しています。

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