Excel VBA質問箱 IV

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

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


4876 / 13644 ツリー ←次へ | 前へ→

【53847】Array関数 yoshimura 08/2/10(日) 15:03 質問[未読]
【53848】Re:Array関数 かみちゃん 08/2/10(日) 15:13 発言[未読]
【53849】Re:Array関数 yoshimura 08/2/10(日) 16:10 質問[未読]
【53850】Re:Array関数 かみちゃん 08/2/10(日) 16:42 発言[未読]
【53851】Re:Array関数 ichinose 08/2/10(日) 20:15 発言[未読]
【53885】Re:Array関数 VBWASURETA 08/2/13(水) 17:50 発言[未読]

【53847】Array関数
質問  yoshimura  - 08/2/10(日) 15:03 -

引用なし
パスワード
   過去ログを見させていただきましたが、
私の疑問のテーマがありませんでしたので、どなたかお答え
いただけませんでしょうか。

Array関数に
例えばシート1のA1〜A5まで文字が入っている
その文字「A、B、C、D、E」を自動的にArray関数に入れることって
出来ますか(数の増減に追随する普遍性を持たせたいのです)。

Arrayは個別に設定された、いわば固有名詞的なものしか
扱えないのでしょうか

仕上がりはこのようにしたいのです。
Array("A","B","C","D")

さらに、配列で美味く扱えないのでしょうか?

【53848】Re:Array関数
発言  かみちゃん  - 08/2/10(日) 15:13 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>Array関数に
>例えばシート1のA1〜A5まで文字が入っている
>その文字「A、B、C、D、E」を自動的にArray関数に入れる

Array関数に入れるというのは、どういう意味でしょうか?
配列変数として入れるということであれば、以下のような感じでできます。

Sub Test()
 Dim vntData As Variant
 Dim x As Long
 
 vntData = Range("A1:A5").Value
 For x = 1 To UBound(vntData, 1)
  MsgBox vntData(x, 1)
 Next
End Sub

【53849】Re:Array関数
質問  yoshimura  - 08/2/10(日) 16:10 -

引用なし
パスワード
   ▼かみちゃん さん:
返答有難うございます

>>例えばシート1のA1〜A5まで文字が入っている
>>その文字「A、B、C、D、E」を自動的にArray関数に入れる

表現が悪いですが
Array("A","B","C")
のようなコードを自動で作成したいのですが。

今はA・B・CであってもD・E・Fの追加があっても
対応できるコードで
Arrayの括弧内は("A"〜"F")まで自動的に(普遍的に)追従・追加動作できることが
出来ないでしょうか。

実際のデータは会社名です。
現在は10数社ですが、将来増加されてシートに追加して
それをArrayで処理していきたいと考えています。

社名   販売商品  金額
A      AA
B      BC
C      CA
A      AB
B
A      AA
この後将来
D
G

【53850】Re:Array関数
発言  かみちゃん  - 08/2/10(日) 16:42 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>>>例えばシート1のA1〜A5まで文字が入っている
>>>その文字「A、B、C、D、E」を自動的にArray関数に入れる
>
>表現が悪いですが
>Array("A","B","C")
>のようなコードを自動で作成したいのですが。

なぜ、そのようなことがしたいのかわかりませんので、他の方のコメントを
お待ちください。

たぶんできないと思います。

【53851】Re:Array関数
発言  ichinose  - 08/2/10(日) 20:15 -

引用なし
パスワード
   ▼yoshimura さん:
こんばんは。


まず、かみちゃん さんの投稿では
何がyoshimura さんの希望と違うのか
説明された方がよいですよ!!


vntData = Range("A1:A5").Value

かみちゃん さんの投稿でも結果的にこの1行で

配列が作成されていますよね?

次元が違うだけです。
次元までArray関数に合わせたいなら・・・。

>実際のデータは会社名です。
>現在は10数社ですが、将来増加されてシートに追加して
>それをArrayで処理していきたいと考えています。
>
>社名   販売商品  金額
>A      AA
>B      BC
>C      CA
>A      AB
>B
>A      AA
>この後将来
>D
>G

Sub sample()
  Dim myarray As Variant
  With Range("a2", Cells(Rows.Count, "a").End(xlUp))
    If .Row > 1 Then
     myarray = Application.Transpose(.Value)
     MsgBox "変数myarrayは、添え字の最小値が " & LBound(myarray) _
         & vbCrLf & _
         "           添え字の最大値は " & UBound(myarray) _
         & vbCrLf & "の1次元配列です" & vbCrLf & _
         "因みに myarray(1)の値は " & myarray(1) & "  です"
     End If
    End With
End Sub

上記のコードを試してください

セルは、配列ですから、Array関数なんて使わなくても
配列に取り込めるのですよ!!

【53885】Re:Array関数
発言  VBWASURETA  - 08/2/13(水) 17:50 -

引用なし
パスワード
   ▼ichinose さん、yoshimura さん、かみちゃん さん:

こんにちは。
ちょっと違うかも知れませんが。
ReDim Preserve で追加できます。
aという配列に新しく定義し直して
且つ持っている元々の配列内容は保持します。

Sub main()
  Dim length As Integer
  Dim a As Variant
  
  a = Array("A", "B", "C", "D")
  length = UBound(a)
  
  ReDim Preserve a(length + 1)
  a(length + 1) = "E"
  
End Sub

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