dポイントプレゼントキャンペーン実施中!

VBA初心者です。
ネットで見つけたやりたい動きのコードをアレンジしました。
コンボで選ぶのは、2列目で数値型の値です。
myCri = myData(UserForm1.ComboBox1.ListIndex + 2, 1)
のところで、型が違うとエラーがでます。
ネットで元々あったサンプルは文字列型のstringでした。そこをintgerに変えました。
どこが悪いかご教授の程宜しくお願い致します。

'CommandButton1でオートフィルターでデータを抽出します

Private Sub CommandButton1_Click()

Dim myFld As String, myCri As Integer
Dim myRow As Long
Dim Sh2 As Worksheet, Sh3 As Worksheet
Dim lRow As Long
Dim myData

'コンボボックスで何も選択されていないときの処理
If UserForm1.ComboBox1.ListIndex < 0 Then
MsgBox "処理月を選択してください"

Exit Sub

End If

Set Sh2 = Worksheets("1_蓄積データ更新")
 Set Sh3 = Worksheets("対象月データ")

myFld = 2 '2列目をキーとする

'コンボボックスで選択している月を変数myCriに読み込み、キーとする
myCri = myData(UserForm1.ComboBox1.ListIndex + 2, 1)

'オートフィルターでデータを抽出する
With Sh2

.Range("A1").AutoFilter Field:=myFld, Criteria1:=myCri

myRow = .Range("A" & Rows.Count).End(xlUp).Row

'抽出先のSh3をクリアする
  Sh3.Range("A:O").ClearContents
'抽出データをSh3へコピー&貼り付けする
.Range("A1:O" & myRow).Copy Sh3.Range("A1")
.Range("A1").AutoFilter

End With
 Sh3.Activate
 Range("A1").Select
End Sub

質問者からの補足コメント

  • ListIndex + 2 なぜ + 2
    すみません。
    質問欄への入力ミスで、
    ListIndex + 1, 1)で、実行してのエラーです。
    宜しくお願い致します。

    No.1の回答に寄せられた補足コメントです。 補足日時:2020/03/13 22:18
  • すみません。
    デバックのやり方も知らないので、月曜日出勤したときにやってみます。
    会社のデータで、持ち帰りもできないので、自宅で下調べしておりました。

    No.2の回答に寄せられた補足コメントです。 補足日時:2020/03/13 23:10

A 回答 (3件)

myDataの値を設定しているコードが見当たらないようですが・・・。


宣言「Dim myData」をこのプロシジャ内で定義しているので、当然、値の設定もこのプロシジャ内で行う必要があると思うのですが、それが無いです。

「月曜日出勤したときにやってみます」とのことですが、そんな局所的なレベルではないと思います。
自宅でしっかりした調べしておかないと上司に怒られちゃいますよ。
    • good
    • 0
この回答へのお礼

Private Sub UserForm_Initialize()
Dim lRow As Long
Dim i As Long, myCnt As Long
Dim myData

With Worksheets("Sheet2")
lRow = .Range("A" & Rows.Count).End(xlUp).Row
myData = .Range("A2:A" & lRow).Value
End With

With ComboBox1
.List = myData
End With
End Sub

途中省略
'商品名リストを配列myDataに読み込む
With Worksheets("Sheet2")
lRow = .Range("A" & Rows.Count).End(xlUp).Row
myData = .Range("A2:A" & lRow).Value
End With

Set Sh2 = Worksheets("1_蓄積データ更新")
Set Sh3 = Worksheets("対象月データ")

myFld = 2 '2列目をキーとする
'コンボボックスで選択している商品名を変数myCriに読み込み、キーとする
myCri = myData(UserForm1.ComboBox1.ListIndex + 1, 1)
以下省略

これで思い通りの結果がでました。
ご指導、ありがとうございました。
VBA初心者で、ネットで見つけたコートをまねただけでしたが何とか目途が付きました。

お礼日時:2020/03/15 00:41

いやいや。


なんでプラスすんのかなと。
それだと、選択した行の次の行を指定したことになるけど?

デバッグ実行はしてみた?
ちゃんと選択した値は取れてる?
この回答への補足あり
    • good
    • 0

ListIndex + 2



なぜ + 2?
この回答への補足あり
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています