- ベストアンサー
オブジェクト? inputboxで入力した日付を検索して複数選択 unionの使い方がわからない
- オブジェクトが必要ですというエラーが発生しています。inputboxで入力した日付を検索し、複数の値を選択したいとしていますが、unionの使い方がわかりません。どこが間違っているか、または足りていない部分があれば教えてください。
- VBAでグラフ作成のためのコードを記述していますが、inputboxで入力した日付を検索し、それに一致するセルを選択したいと考えています。しかし、unionの使い方が正しくないようで、オブジェクトが必要ですというエラーが発生しています。解決策を教えてください。
- VBAを使用してグラフ作成をしようとしています。inputboxで入力された日付を検索し、それに一致するセルを選択したいと思っていますが、unionの使い方が正しくないようです。エラーが発生し、オブジェクトが必要ですと表示されます。どうすればよいでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
セルにどのような値が入っており、どのような結果を得たいかが明確に記述されず コードだけ書かれた場合想定できる範囲に限界があります。 ご質問のコードより読みとれる範囲で作成した添付画像のデーたを用いて 最下のコードで実行しましたが完走いたします。 問題を具体的にご提示ください。 (1)対象のシート名は「VBA」である Const SH_NAME As String = "VBA" Set ws = ThisWorkbook.Worksheets(SH_NAME) (2)B列の最終行を検索対象の最終行とし endrow = .Cells(Rows.Count, 2).End(xlUp).Row For i = 2 To endrow ~ Next (3)A列の各行が入力値(日付)と一致しているか判定 If art = .Range("A" & i) Then ~ Else ~ End If (4)入力値以外かつ、重複していないA列の一覧をダイアログ表示 If InStr(msg, .Range("A" & i)) = 0 Then msg = msg & .Range("A" & i) & vbCrLf End If MsgBox msg Option Explicit ■修正後のVBAコード Sub グラフ() Const SH_NAME As String = "VBA" Dim art As String Dim i Dim ws As Worksheet Dim endrow As Long Dim msg As String Dim writerow As Integer Dim grahu As Chart Dim target As Range Set ws = ThisWorkbook.Worksheets(SH_NAME) writerow = 2 art = InputBox("日付を入力してください") With ws endrow = .Cells(Rows.Count, 2).End(xlUp).Row For i = 2 To endrow If art = .Range("A" & i) Then If target Is Nothing Then Set target = Range("D" & i) Else Set target = Union(target, "D" & i) End If Else If InStr(msg, .Range("A" & i)) = 0 Then msg = msg & .Range("A" & i) & vbCrLf End If End If Next i target.Select End With If msg <> "" Then MsgBox msg End If MsgBox "グラフベースを作成しました" End Sub
その他の回答 (1)
- eden3616
- ベストアンサー率65% (267/405)
Set target = Union(target, "D" & i) ヘルプを見て頂いたらわかるのですが、Rangeオブジェクトを指定する必要があります。 「"D" & i」ではなく「Range("D" & i)」や「Cells(i, 4)」など。 またtargetに初期のRangeを指定しておく必要があります。 ですので以下のような感じでどうでしょ。 Set target = Union(target, "D" & i) の部分を以下のように修正 If target Is Nothing Then Set target = Range("D" & i) Else Set target = Union(target, "D" & i) End if 以下はunionの使用サンプルです。 (A列1,3,5,7,9行目を選択します) Sub test() Dim i As Long Dim myRange As Range Set myRange = Range("A1") For i = 3 To 9 Step 2 Set myRange = Union(myRange, Range("A" & i)) Next i myRange.Select End Sub
お礼
ありがとうございます! そこの問題は解決しました!(^^)! でもそうしたら次は target.select のところでエラーが起きてしまいました(・_・;) 変数を設定しろと言われたのですがどうすればいいんでしょう、、、 お手数ですがよろしくお願いします、、
補足
訂正です、、、 さきほど最初の問題が解決したと言いましたが、 また同じエラーが起こるようになってしまいました 教えていただいたところを直した以外は上のコードと同じです 何度もすいませんがよろしくお願いします(~_~;)