Excel VBA質問箱 IV

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

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


73179 / 76738 ←次へ | 前へ→

【8042】Re:Arrayへのデータ追加について
発言  ichinose  - 03/9/27(土) 17:08 -

引用なし
パスワード
   ▼kawata さん:
>kawataです、お世話になっております、よろしくお願いします。
>(Windows2000/Excel2000)
>
>ただいま配列勉強中です、多少でも使えるようになると
>これまでのコードもガラッと変わってしまいます、
>データ量が多いときの処理速度は圧倒的で、もう元に
>戻れませんね(少ないデータの時は、使いやすいほうを
>選択していますけども)。
>
>で、質問なんですが、
>
>  With Sheets("sheet1")
>    myArray = .Range("a1:a10")
>    .Range("b1").Resize(, UBound(myArray)) = Application.Transpose(myArray)
>  End With
>
>セルA1〜A10の値を、B1から横に書き出すものなんですが、
>このA1〜A10のデータをループさせて、条件の合うものだけ
>Array配列に追加していきたいと考えているのですが、
>このArray配列への継ぎ足しの記述がわかりません。
>
>  myArray() = myArray() + a ← やりたいことのイメージです(^^;。
>
>ぜひ、よろしくお願いします。
例にあげられたような仕様なら(セルA1〜A10の範囲で条件に合った値をセルB1から右方向に移すのに配列変数を問屋さんにする)、
仮にA1:A10には、1〜10が入っていたとしましょう。
例は、値が5から7のデータをB1から横に並べるものです。
‘======================================================
Sub test()
  Dim myarray()
  jdx = 1
  For idx = 1 To 10
    With Cells(idx, 1)
     If .Value >= 5 And .Value <= 7 Then
       ReDim Preserve myarray(1 To jdx)
       myarray(jdx) = .Value
       jdx = jdx + 1
       End If
     End With
    Next idx
  If UBound(myarray()) > 0 Then
    Range("b1").Resize(, UBound(myarray())).Value = myarray()
    End If
End Sub

なんて方法で可能ですが、
見ればおわかりかと思いますが、
上記のコードの配列は、1次元配列です。

>    myArray = .Range("a1:a10")

の配列とは次元が違ってしまいます。

RedimステートメントのHELPの引用
「Preserve   省略可能です。既存の配列に格納されている値を失うことなく、配列の最後の次元の要素数を変更する場合に使用する、キーワードです。」
のとおり、Preserve使用のmyarray(x,y)のxの要素数の変更は、無理なようです。

最初に条件に合ったセルの数がわかっていれば
‘=======================================================
Sub samp()
'これは、条件にあったセルをB列に移す
  Dim myarray()
  jdx = 1
  With Range("a1:a10")
    cnt = Application.Evaluate( _
      "=SumProduct((a1:a10 >= 5) * (a1:a10 <= 7))")
    End With
  If cnt > 1 Then
    ReDim myarray(1 To cnt, 1 To 1)
    jdx = 1
    For idx = 1 To 10
     With Cells(idx, 1)
       If .Value >= 5 And .Value <= 7 Then
        myarray(jdx, 1) = .Value
        jdx = jdx + 1
        End If
       End With
     Next idx
    Range("b1").Resize(UBound(myarray())).Value = myarray()
    End If
  
End Sub

というコードを書くことができますが・・・・。
こんな情報でよろしいでしょうか?
0 hits

【8037】Arrayへのデータ追加について kawata 03/9/27(土) 9:43 質問
【8042】Re:Arrayへのデータ追加について ichinose 03/9/27(土) 17:08 発言
【8044】Re:Arrayへのデータ追加について kawata 03/9/27(土) 17:23 お礼
【8047】Re:Arrayへのデータ追加について bykin 03/9/27(土) 20:36 回答
【8060】Re:Arrayへのデータ追加について kawata 03/9/29(月) 8:31 お礼
【8069】Re:Arrayへのデータ追加について kawata 03/9/29(月) 11:35 お礼

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