VBAを学習しており、最近配列という仕組みを知り勉強中です。
array関数の使い方をいくつかサイトを見て回っているのですが、
実務として理解するのに躓いております。
要素の追加は直接指定しかないのでしょうか?
要素が多数ある場合などの使用例がわかりません。
ループやリスト参照等で格納することは可能なのでしょうか?
それとも他の関数を使用するのでしょうか?
Dim A As Variant
A = Array(10,20,30) ’・・・・100までなど多数の場合は?
B = A(2)
No.4ベストアンサー
- 回答日時:
No2です。
Array関数を使うのは、配列を作るときに、同時に初期値(配列の内容)も生成したい場合です。
従って、100個のデータを全て指定するのは、余り実用的ではありません。
従って、配列の要素の数が少なく、しかも、配列生成時に、同時に初期値も格納したい場合のみ、Array関数を使うべきです。
そうでないなら
Dim A(100) as String
Dim B(1000) as Long
のように配列を宣言すべきです。
尚、配列の要素数が事前に決められない場合は、
(例えば、テキストファイルを読み込み1行を1つの要素に格納したい場合、それが何行あるかは、ファイルを読み込んでみないと判らない)
Dim C() as Stringのように()内に数値を記入しないで宣言します。
(この使い方はテクニックが多少必要なので自分で調べてください。それでも判らない場合は質問してください)
tatsu99さん
>Array関数を使うのは、配列を作るときに、同時に初期値(配列の内容)も生成したい場>合です。
> 従って、100個のデータを全て指定するのは、余り実用的ではありません。
そういうことでしたか
納得です!
説明サイトでarray()をよく見かけたので使ってみたいと思ったですが、そういうことですね!
tatsu99さんに教えていただかなければ一生わかりませんでした、
ありがとうございました
No.5
- 回答日時:
モヤモヤがもっと膨らむかもしれません。
配列で疑問になった部分は、一通りカバーされているはずです。
ちなみに、Excel VBAでは、一般的に、3次元はありません。使わないという意味です。2次元までです。
以下は、配列を扱うテクニックです。
'------------
Sub Test1()
'文字列の場合
Dim ar
Const myDATA As String = "a,b,c,d,e,f,g"
ar = Split(myDATA, ",")
End Sub
'----------
Sub Test2()
'数値
Dim ar
ar = [{1,2,3,4,5,6,7}]
End Sub
'----------------
Sub Test3()
'ループを使う
Dim ar
Dim Rng As Range
Dim i As Long
For i = 1 To 100
Cells(i, 1).Value = i
Next
Set Rng = Range("A1", Cells(Rows.Count, 1).End(xlUp))
ar = Rng.Value '一括代入
ar = Application.Transpose(ar) '1次元に戻す
End Sub
'----------------
'Dynamic Array
Sub Test4()
'仕切り直し
Dim ar()
Dim i As Long
ReDim ar(1000)
For i = 0 To 99
ar(i) = i + 1
Next
ReDim Preserve ar(i - 1)
End Sub
'----------------
Sub Test5()
'連想配列
Dim objDic As Object 'New Scripting.Dictionary
Dim i As Long, k As Long
''×Dim i, k as Long ''このように書くと、i は、Variant型になってしまう
Dim Ar
Set objDic = CreateObject("Scripting.Dictionary")
Randomize
k = 1
For i = 1 To 100
j = Int((100 * Rnd) + 1)
If Not objDic.exists(j) Then
objDic.Add j, i
Cells(k, 1).Value = j
k = k + 1
End If
Next
Ar = objDic.Keys()
'並べ替えが必要なら、
Stop
Call Test5sort(Ar)
End Sub
Sub Test5sort(ByRef myData)
Dim DataList As Object
Dim Ar()
Dim i As Long
Set DataList = CreateObject("System.Collections.SortedList") '.Net Framework
For i = LBound(myData) To UBound(myData)
DataList.Add myData(i), i
Next i
ReDim Ar(UBound(myData))
For i = 0 To DataList.Count - 1
Ar(i) = DataList.GetKey(i) '.GetByIndex(i)
Next i
'一括で貼り付ける方法
Range("B1").Resize(UBound(Ar()) + 1).Value = Application.Transpose(Ar)
End Sub
WindFallerさん
こんにちわ
ご回答ありがとうございます!
>ちなみに、Excel VBAでは、一般的に、3次元はありません。使わないという意味です。>2次元までです。
なるほど!EXCELやCSVで行う業務は既に配列済みということですね
>Randomize
ほんとうに美しい記述ですね!ここまで使いこなせるのはうらやましいです!
業務でマクロを触っていた程度なのでランダムに出力することもありませんでした。
PHPも学習し始めたので配列のイメージが沸きました。
No.3
- 回答日時:
こんばんは。
ほとんど先のお二方に言われてしまいましたが、多次元配列に関して等、補足します。
Excelのワークシート自体が、二次元配列のようなものです。
Dim nums(1 To 100, 1 To 100) As Variant
のような宣言をすれば、
100マス×100マスの表のイメージが出来上がります。
すると、x軸(列)、y軸(行)の感覚で、座標を指定してデータを取得できるわけです。
実はワークブックが三次元配列に相当し、
Dim nums(1 To 100, 1 To 100, 1 To 100) As Variant
と宣言すれば、さらにz軸(シート)を、座標を指定してデータを取得できるわけです。
Dim i As Long
Dim j As Long
For i = 1 To 100
For j = 1 To 100
とし、For文を入れ子にしてよく利用します。
taigoitoさん
こんにちわ
ご回答ありがとうございます!
>Excelのワークシート自体が、二次元配列のようなものです。
>Dim nums(1 To 100, 1 To 100) As Variant
>のような宣言をすれば、
>100マス×100マスの表のイメージが出来上がります。
あ!なるほど!
最近PHPも学習し始めました。
EXCELありきで考えると、実態が既にあるので回りくどく見えますが
PC言語から見れば、この配列の考え方が効いてくるのですね!
No.2
- 回答日時:
100個の配列に数値を格納する場合の一例です。
dim A(99) as long
dim i as long
for i = 0 to 99
A(i) = 10 * (i+1)
next
------------
A(0)=10
A(1)=20
A(2)=30
・・・・
A(99)=1000
のように格納されます。
tatsu99さん
こんにちわ
ご回答ありがとうございます!
なるほど、配列の使い方が少しわかってきました。
今の自分にはこの例はしっくりきました。ありがとうございます。
No.1
- 回答日時:
B=30
でしょ?
>100までなど多数の場合は?
その為に
Dim userAddress(3) As Variant
userAddress(0) = "東京都"
userAddress(1) = "北海道"
userAddress(2) = "愛知県"
For で100回 まわして (i)で やるのが一般的かな
http://www.officepro.jp/excelvba/array/index6.html
2014itochan さん
こんにちわ
ご回答ありがとうございます!
そうですよね、
いただいた例で47都道府県に増やした場合・・・
For i = 1 To 47
userAddress(i) = Cells(i, 1).Value
Cells(i, 2) = userAddress(i)
Next i
array()の出番がないと感じていました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
array関数で格納した配列の型を...
-
エクセルで、絶対値の平均を算...
-
EXCEL VBA 2次元配列に格納さ...
-
【VBA】 動的な変数(定数)の指定
-
VB6.0 ファイルの一括読込み
-
仮想リストコントロールの表示
-
数字をコンマで区切った文字列...
-
過去ログの配列について質問
-
配列がとびとびである場合の書き方
-
UNIQUE関数について。
-
VBA 配列に格納した値の平均の...
-
以下のプログラムについて教え...
-
Datatableへの代入
-
Excelのセルの色指定をVBAから...
-
【Excel】見たことのない数式が...
-
[エクセル]連続する指定範囲か...
-
【VBA】配列に数式を仕込む方法...
-
テキストファイルを配列に
-
VBAでの100万行以上のデータの...
-
定数について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelのセルの色指定をVBAから...
-
エクセルで、絶対値の平均を算...
-
表にフィルターをかけ、絞った...
-
ExcelのINDEXとMATCH関数でスピ...
-
[エクセル]連続する指定範囲か...
-
array関数で格納した配列の型を...
-
配列がとびとびである場合の書き方
-
VBA 配列に格納した値の平均の...
-
DataSetから、DataTableを取得...
-
[VBA]改行入りのセルの値を配列...
-
読み込みで一行おきに配列に格納
-
Excel オートフィルタのリスト...
-
iniファイルのキーと値を取得す...
-
【VBA】ユーザーフォーム リス...
-
Split関数でLong配列に格納する...
-
配列のSession格納、及び取得方...
-
VB6.0 ファイルの一括読込み
-
Dictionaryを使い4つの条件の一...
-
INDEX(D:D,L3)の意味は?
-
SUMPRODUCT関数を用いた最小値
おすすめ情報