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で質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題です 課題1 (二分探索木とセット) 大きさ size の配列 array を考える。す 2 2023/01/10 21:08
- C言語・C++・C# C言語初心者 ポインタについて、お助けください、、 2 2023/03/15 23:50
- Visual Basic(VBA) Excel のユーザー定義関数でソルバーが動作しない 1 2022/09/05 19:51
- PHP 配列の値の更新方法について 1 2022/08/05 09:49
- Ruby 初心者プログラミング 3 2022/10/12 11:31
- Visual Basic(VBA) VBA横データを縦にしたいです 2 2023/08/08 19:38
- Visual Basic(VBA) Vbaで数式をポーランド記法に変換するコードを作って実行しようとするとフリーズします。 1 2022/05/24 17:53
- Visual Basic(VBA) Sheet1のA列にコードB列にメアド、Sheet2のB列にコード一覧とD列にメアド一覧があり、Sh 3 2022/10/19 11:57
- Visual Basic(VBA) VBAでのMATCH関数 3 2022/10/17 19:06
- Visual Basic(VBA) マクロVBA 1シートをまとめる 閉じ方 初心者 SOS! 1 2022/06/17 14:54
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelのセルの色指定をVBAから...
-
表にフィルターをかけ、絞った...
-
EXCEL VBA 2次元配列に格納さ...
-
VC#で配列の値の重複チェックに...
-
エクセルで、絶対値の平均を算...
-
SUMPRODUCT関数を用いた最小値
-
Split関数でLong配列に格納する...
-
Excel VBA 配列の分割について
-
array関数で格納した配列の型を...
-
VBA array()関数 配列の使い方...
-
数字をコンマで区切った文字列...
-
C#でFontStyleの列挙体に値を追...
-
VBAで指定期間の範囲を抽出し、...
-
VB6.0 ファイルの一括読込み
-
配列がとびとびである場合の書き方
-
[VBA]改行入りのセルの値を配列...
-
エクセルの配列数式、配列定数...
-
エクセル2007 VBA シート内のデ...
-
[エクセル]連続する指定範囲か...
-
ExcelのINDEXとMATCH関数でスピ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelのセルの色指定をVBAから...
-
ExcelのINDEXとMATCH関数でスピ...
-
[エクセル]連続する指定範囲か...
-
array関数で格納した配列の型を...
-
表にフィルターをかけ、絞った...
-
エクセルで、絶対値の平均を算...
-
配列がとびとびである場合の書き方
-
[VBA]改行入りのセルの値を配列...
-
Excel オートフィルタのリスト...
-
DataSetから、DataTableを取得...
-
iniファイルのキーと値を取得す...
-
配列のSession格納、及び取得方...
-
エクセルでエラーを無視して一...
-
Dictionaryを使い4つの条件の一...
-
エクセル 条件を指定した標準...
-
読み込みで一行おきに配列に格納
-
For Nextマクロの高速化につい...
-
.NET - 配列変数を省略可能の引...
-
SUMPRODUCT関数を用いた最小値
-
VB6.0 ファイルの一括読込み
おすすめ情報