[[20200419164011]] 『VBAユーザー定義型の配列 エラー原因について』(ピノ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『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


半平太様
ありがとうございます。
arrType(i - 2)と設定したらできました。
すみません、もう一つ分かれば教えてください。

下記の部分で、インデックス範囲が有効範囲にありませんと出てしまいます。
この原因わかりますでしょうか。
何度も申し訳ありません。

      'ユーザー定義型の配列を先頭から末尾までループ(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


γ様、y様
コメントありがとうございます。
適当な内容に感じる質問をしてしまい、申し訳ありません。
もう一度自分の中でまとめてから、質問させていただきます。
不快な質問をしてしまい、申し訳ありませんでした。
(ピノ) 2020/04/20(月) 23:09

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.