Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Pro : Microsoft 365)
配列変数に、A2からA10までの値を保管する方法につて教えて下さい。
投稿日時: 22/11/18 17:23:58
投稿者: takatada72

お世話になります。
 
Excelのワークシートに記載されているA2からA10までの値を
配列変数に記憶させたく悩んでおります。
Range メソッドに失敗とエラーになります。
色々と検索したのですが、わかりませんでした。
 
 
宜しくご指導をお願いいたします。
 
 
'最終行の検出
Dim a(100) as string
Sheets("事前入力用").Select
Dim 結果件数 As Long
Dim x As String
Dim tanto, Maker As String
結果件数 = WorksheetFunction.Subtotal(3, Columns(1))
 
'新規番号を記録
For i = 0 To 結果件数
Sheets("事前入力用").Select
a(i) = ws1.Range("A" & i).Select
MsgBox Range("A" & i):
Next i

回答
投稿日時: 22/11/18 18:23:01
投稿者: WinArrow
投稿者のウェブサイトに移動

エラーの原因は、
>a(i) = ws1.Range("A" & i).Select
ですよね?
 
問題個所1
「ws1」:変数(ws1)が宣言されていない。
 
問題個所2
「.Select」:Selectはメソッドです。
プロパティは、「.Value」です。
 
ところで、配列変数は、1次元でなければいけないですか?
参考コード

Dim a 'データ型を指定しない

    a = Range(Range("A2"), Range("A" & Rows.Count).End(xlUp)).Value
    a = WorksheetFunction.Transpose(a)

 
1行目:2次元の配列で格納される
Range("A" & Rows.Count).End(xlUp)は、A列のデータが入っている最終セル取得です。
2行目:2次元を1次元に変換

回答
投稿日時: 22/11/18 20:59:51
投稿者: WinArrow
投稿者のウェブサイトに移動

追加レス
 
>Dim a(100) as string
文字列型の配列変数に格納(代入)するわけですから、
メソッドは使いません。
配列変数に格納するのは「値」ですから、Valueプロパティを指定します。
データ件数が多い場合は、ループするのは、効率が悪いから、
セル範囲を一発で配列変数に格納する方法を利用します。→2次元で格納されます。
データ型は、指定しない or Valiantを指定します。
 
参考
2次元の配列変数ならば、1発でセルに格納も可能です。

投稿日時: 22/11/19 14:41:43
投稿者: takatada72

WinArrowさん
 
お疲れさまです。
回答をありがとうございました。
今回質問のExcelファイルは、会社にあるので、家のPCにあるExcelでテストしてみました。
結果、WinArrowさんが言われるように、多次元配列で試してみました。
 
配列というと
Dim A(10,10)のスタイルしか思いつきませんでした。
 
 a = Range(Range("A2"), Range("A" & Rows.Count).End(xlUp)).Valueの
形で、a(1,1)のように記録ができるのを今回知りました。
これからもどんどん使いたいとおもいました。
 
ありがとうございました。