[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『VBAユーザー定義型の配列 エラー原因について』(ピノ)
いつもお世話になっております。
VBA初心者です。
ユーザー定義型の配列を使用し、
該当の採算管理コード・仕入れ先コードがあった場合に、
”次の処理”を行う、というマクロを作っています。
”次の処理”は、未完成なのですが、
その前段階でテスト稼働させたところ、
構文エラーが出てしまいました。
エラー詳細は下記の通りなのですが、
エラーの原因を教えていただけないでしょうか。
<エラー詳細>
1、 For i = 2 To lastRow
※変数が定義されていません
2、arrType
※コンパイルエラー 修飾子が不正です
<記載構文>
Option Explicit
Type ユーザー定義型
採算管理コード As String 採算管理名称 As String ' 店舗CD桁数 As Long 仕入れ先コード As String 仕入れ先名称 As String End Type
Sub ユーザー定義型の配列()
Dim ws As Worksheet '受注リスト Dim lastRow As Long Dim arrType() As ユーザー定義型 Dim i As Variant Set ws = Workbooks.Open(Filename:="C:\Users\YK\Desktop\店別明細リスト\受注リスト.xlsx") 'Excelの一覧表のパス
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
'Excelの一覧表を上から下までループする For i = 2 To lastRow
'ユーザー定義型の変数の要素数を変える ReDim Preserve arrType(i - 2)
arrType.採算管理コード = ws.Cells(i, 4).Value 'D列 arrType.採算管理名称 = ws.Cells(i, 5).Value 'E列 arrType.店舗CD桁数 = ws.Cells(i, 6).Value 'F列 arrType.仕入れ先コード = ws.Cells(i, 7).Value 'G列 arrType.仕入れ先名称 = ws.Cells(i, 8).Value 'H列
Next i
’<<ここからは未完成>>
'’'【不要】Excelとして開いたテキストファイルを上から下までループする 'テキストデータをエクセル形式にして開く Workbooks.OpenText Filename:= _ "C:\Users\YK\Desktop\店別明細リスト\店別データ.txt" _ , Origin:=932, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _ xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=False _ , Comma:=True, Space:=False, Other:=False, FieldInfo:=Array(Array(1, 1), _ Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), Array(7, 1), Array(8, 2), _ Array(9, 2), Array(10, 1), Array(11, 2), Array(12, 1), Array(13, 2), Array(14, 2), Array(15 _ , 2), Array(16, 1), Array(17, 1), Array(18, 1), Array(19, 1), Array(20, 1), Array(21, 1), _ Array(22, 1), Array(23, 1), Array(24, 2), Array(25, 2), Array(26, 1), Array(27, 1), Array( _ 28, 1), Array(29, 1), Array(30, 1), Array(31, 1), Array(32, 2), Array(33, 1), Array(34, 1), _ Array(35, 1)), TrailingMinusNumbers:=True
Set ws = "C:\Users\YK\Desktop\店別明細リスト\店別データ.txt" 'Excelとして開いたテキストファイルのパス lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
'【不要】Excelとして開いたテキストファイルのパスを先頭から末尾までループ 'For i = 2 To lastRow
'ユーザー定義型の配列を先頭から末尾までループ(LBound=最小 から UBound=最大) For j = LBound(arrType) To UBound(arrType)
'もし該当の採算管理コードと仕入れ先コードの組み合わせがExcelとして開いたテキストファイルにあったら次の処理を行う If arrType(j).採算管理コード = ws.Cells(i, 4) And arrType(j).仕入れ先コード = ws.Cells(i, 7) Then
'処理 (未完成)
'?@I列:フィルタで採算管理コードを選ぶ(txtファイル)※コード可変
ActiveSheet.Range("$A$1:$AH$" & LR).AutoFilter Field:=9, Criteria1:= _ arrType(j).採算管理コード
ActiveSheet.Range("$A$1:$AH$" & LR).AutoFilter Field:=9, Criteria1:= _ arrType(j).仕入れ先コード
'(店舗CD桁数を使用したいときは「arrType(j).店舗CD桁数」、 'ファイル名に仕入れ先コードと仕入れ先名称を使用したいときは「arrType(j).仕入れ先コード」、「arrType(j).仕入れ先名称」で使用できる
End If
Next j
Next i
< 使用 Excel:Excel2016、使用 OS:Windows10 >
>1、 For i = 2 To lastRow > ※変数が定義されていません
こちらではエラーにならないですけど。
>2、arrType > ※コンパイルエラー 修飾子が不正です > arrType.採算管理コード = ws.Cells(i, 4).Value 'D列
インデックスの指定がないですよ。 ↓ arrType(i - 2).採算管理コード = ws.Cells(i, 4).Value 'D列
(半平太) 2020/04/19(日) 17:44
下記の部分で、インデックス範囲が有効範囲にありませんと出てしまいます。
この原因わかりますでしょうか。
何度も申し訳ありません。
'ユーザー定義型の配列を先頭から末尾までループ(LBound=最小 から UBound=最大) For j = LBound(arrType) To UBound(arrType) (ピノ) 2020/04/19(日) 23:03
そこに行く前に、 Set ws = "C:\Users\YK\Desktop\店別明細リスト\店別データ.txt" lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row でエラーになりませんか? これだとwsは単なる文字列なので、ワークシートになるわけがないし。 なんか適当だなあ。 (γ) 2020/04/19(日) 23:51
エラーになったとき、ローカルウィンドウでarrTypeがどういう大きさの配列になっているか
確認して教えてもらえますか?
(γ) 2020/04/20(月) 00:07
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.