IMPUT BOXで複数のセルを選択すると、「オブジェクトが必要です」

このQ&Aのポイント
  • IMPUT BOXで複数のセルを選択すると、「オブジェクトが必要です」というエラーが発生します。
  • IMPUTBOXでひとつのセルを選択すると、正常に作動しますが、複数のセルを選択するとエラーが発生します(たまに複数のセルを選択しても正常にさどうすることがあります)
  • 原因のわかる方、ご回答のほどよろしくお願いいたします。
回答を見る
  • ベストアンサー

IMPUT BOXで複数のセルを選択すると、「オブジェクトが必要です」

IMPUT BOXで複数のセルを選択すると、「オブジェクトが必要です」というエラーが発生します。 IMPUTBOXでひとつのセルを選択すると、正常に作動しますが、複数のセルを選択するとエラーが発生します(たまに複数のセルを選択しても正常にさどうすることがあります) コードは下記のようなものです。   Dim myRange1 As Range Dim myRange2 As Range Dim myArea As Range      Set myArea = Range("A1:B50") Set myRange1 = Application.InputBox _ (Prompt:="セル範囲をドラッグしてください", Type:=8) For Each myRange2 In myRange1 myRange2 = Application.WorksheetFunction.VLookup(myRange2.Offset(, 13), myArea, 2, False) Next 原因のわかる方、ご回答のほどよろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • hige_082
  • ベストアンサー率50% (379/747)
回答No.2

>他のサイトで、エクセル2003で条件式書式を使用しているランジを指定すると、エラーになるという情報がありました 検索するとヒットしました http://support.microsoft.com/kb/959029/ja?spid=2512&sid=659 しかし、回避策として >RefEdit コントロールを使用して同じ機能を実装するように開発します。 と、なっておりUserFormを作成しなくてはならないようです そこで、UserFormを使用しない回避策 Dim myRange1 As Range Dim myRange2 As Range Dim myArea As Range Dim myStr As String Set myArea = Range("A1:B50") 'Set myRange1 = Application.InputBox _ (Prompt:="セル範囲をドラッグしてください", Type:=8) '回避策---------------------------------------------------------------------- myStr = Application.InputBox(Prompt:="セル範囲をドラッグしてください", Type:=0) myStr = Application.ConvertFormula(myStr, xlR1C1, xlA1) Set myRange1 = Range(myStr) '---------------------------------------------------------------------------- For Each myRange2 In myRange1 myRange2 = Application.WorksheetFunction.VLookup(myRange2.Offset(, 13), myArea, 2, False) Next 参考まで

krocawa
質問者

お礼

ご回答ありがとうございます。 本日上記のコードで試したところ、問題なく作動いたしました。 本当にありがとうございます!助かりました。

その他の回答 (1)

  • hige_082
  • ベストアンサー率50% (379/747)
回答No.1

質問にあるようなエラーが出ないのですが エラー時、デバッグボタンを押すと どの行が黄色くなりますか?

krocawa
質問者

お礼

Set myRange1 = Application.InputBox _ (Prompt:="セル範囲をドラッグしてください", Type:=8)の部分です。 ここで複数のセルを指定すると、「オブジェクトが必要です」というエラーが発生します。 ブック内では条件付き書式を使用しているのですが、それも関係しているのでしょうか(他のサイトで、エクセル2003で条件式書式を使用しているランジを指定すると、エラーになるという情報がありました)。 そのため、該当するセルの条件付き書式を解除したのですが、それでも複数選択ですと、エラーになります。 逆に条件付き書式の使用していも、指定したセルがひとつであると、正常に作動します。

関連するQ&A

  • Excelで選択したセルのある位置をMsgboxで表示するにはどうしたらいいでしょうか?

    Dim r As Range Set r = Application.InputBox(Prompt:="セルを選択", Type:=8) rをMsgboxで表示するにはどうしたらいいでしょうか? rのアドレスを文字列として取りたいのです。

  • セルの位置を表示するには?

    Dim r As Range Set r = Application.InputBox(Prompt:="セルを選択", Type:=8) ここで得た答えを何行目、何列目とMsgboxを用いて表示したいです。ただ何列目は英字で表現したいのですが。よろしくお願いします。

  • 行番号の取得

    4483740 で質問させていただいたものです。このなかで下記コードを実行したときに最大値、最小値のセルの行番号も取得するには、どうすればよいでしょうか。 '-------------------------------------------- Sub Test()  Dim MaxValue As Double  Dim MinValue As Double  Dim LastRow As Long  Dim myRange As Range Application.ScreenUpdating = False  LastRow = Cells(Rows.Count, "B").Row  Set myRange = Range(Cells(2, "B"), Cells(LastRow, "B"))  myRange.AutoFilter Field:=1, Criteria1:=">=0", Operator:=xlAnd  MinValue = WorksheetFunction.Min(myRange.SpecialCells(xlCellTypeVisible))  myRange.AutoFilter Field:=1, Criteria1:="<0", Operator:=xlAnd  MaxValue = WorksheetFunction.Max(myRange.SpecialCells(xlCellTypeVisible))  myRange.AutoFilter  MsgBox "最小値: " & MinValue & vbLf & "最大値: " & MaxValue Application.ScreenUpdating = True End Sub '----------------------

  • 【vba】複数のセルをfor文で選択したい

    vbaを独学で学んでおります。 質問内容は、 for文で条件に合ったセルを複数選択するにはどうすればいいのかというものです。 下のプログラムを作ってみたんですが、ループする回数がある一定の数を超えるとエラーが起こります。rangeオブジェクトにつかえる文字列の長さは、255文字までだとかなんとかだそうです。 Public Sub test() Dim str As String Dim i As Integer str = Cells(1, 1).Address For i = 2 To 50 str = str & "," & Cells(i, i).Address Next Range(str).Select End Sub さらに、次のプログラム使っても、256個ぐらいしかセルが選択できません。(これも何かの上限?) Public Sub test2() On Error GoTo エラー Dim r As Range Dim i As Integer Set r = Cells(1, 1) For i = 2 To 300 Set r = Union(r, Cells(i, i)) Next r.Select エラー: r.Select MsgBox ("256個しか選べませんでした") End Sub もっと、無制限に、たくさんのセルを選択できるようにしたいのですが、何か手はないでしょうか? ご教授お願いします。

  • 2007エクセルVBが2013エクセルで動かない

    よろしくお願いします。 エクセル2007VBをエクセル2013に移行して動かしたところ >>>>の部分でエラーが出ました 2007では動いていたのですが、なぜエラーになったのかわかりません。 プログラムは下記の通りです。 Dim iti1 As String Dim ITI2 As String Dim ITI3 As String Dim ITI4 As String Dim ITI5 As String Dim ITI6 As String Dim ITI7 As String Dim ITI8 As String Dim myRange As Range Dim myrange1 As Range Dim answer As Integer Dim c As Double Dim n As Double Workbooks(book1).Activate Sheets("A").Select ITI4 = Range("D65536").End(xlUp).Address '----D列の最終行から上方向の終端セルを選択 Set myRange = Worksheets("A").Range("d6", ITI4) answer = Application.WorksheetFunction.Count(myRange) Set myrange1 = Worksheets("A").Range("g5") For c = 1 To answer 'データー個数のカウント If myrange1.Offset(c) = myday Then n = n + 1 Next     Workbooks(book1).Activate Sheets("A").Select 'コピー座標の取得 iti1 = Range("D65536").End(xlUp).Address '----D列の最終行から上方向の終端セルを選択 ITI7 = Range(iti1).Offset(, 9).Address Range("a5", ITI7).AutoFilter FIELD:=7, Criteria1:=myday ITI2 = Range("M65536").End(xlUp).Address '----M列の最終行から上方向の終端セルを選択 'コードコピー ITI5 = Range(ITI2).Offset(-n + 1, -10).Address '左上のセル>>>>>>>>>ここでアプリケーション定義又はオブジェクトの定義エラーがおこります。 ITI6 = Range(ITI2).Offset(, -9).Address '右下のセル Range(ITI5, ITI6).Copy 'scと銘柄コード貼り付け Workbooks(book3).Activate Sheets("記入").Select ITI3 = Range("c65536").End(xlUp).Address '----C列の最終行から上方向の終端セルを選択 ITI8 = Range(ITI3).Address '終端セルの次を選択 Range(ITI8).Offset(1).PasteSpecial Paste:=xlPasteValues よろしくお願いします。 まだ何本かVBのプログラムがあるのですが移行に際しての注意などがあるサイトがあったら教えてください。

  • オブジェクトが必要です

    またまた困ってます、、 このコードを実行したとき .Range("H" & i).Copy.wsDetail.Range ("D24") ここでエラーが起きて 「オブジェクトが必要です」 と言われてしまいます(・・;) だれかよろしくお願いします<m(__)m> ※シートの宣言は上でやってます Private Sub 社会保険() Dim i Dim endrow As Long Dim kihon As Long Set wshoken = Worksheets("各種保険料表") Set wsDetail = Worksheets("給与明細") Set wsData = Worksheets("データ入力") kihon = WorksheetFunction.Round(wsData.Range("C5"), -4) endrow = Cells(Rows.Count, 3).End(xlUp).Row With wshoken For i = 2 To endrow If kihon = .Range("C" & i) Then .Range("H" & i).Copy.wsDetail.Range ("D24") .Range("L" & i).Copy.wsDetail.Range ("H24") .Range("N" & i).Copy.wsDetail.Range ("L24") Application.CutCopyMode = False End If Next i End With End Sub

  • インプットボックスで選択したシートをselectした

    先日ここで、インプットボックスを使ったシート間コピーを教えて頂きました。 その中で、コピー先を選択した後にそのシートがselectされた状態にして、ペースト確認のmsgboxを表示したいのですが、どの様したらいいのでしょうか? Sub コピー() Dim CopyArea As Range Dim PasteArea As Range On Error GoTo ErrorHandler Dim a As String Set CopyArea = Application.InputBox(prompt:= _ "コピー元を指定して下さい", Title:="コピー元", Type:=8) BUCK: Set PasteArea = Application.InputBox(prompt:= _ "貼り付け先を指定して下さい", Title:="貼り付け先", Type:=8) Sheets(****).Select If MsgBox("貼り付けます。" & Chr(10) & "よろしいですか?キャンセルで再選択。", vbOKCancel + vbQuestion) = vbOK Then CopyArea.Copy PasteArea Else GoTo BUCK End If Exit Sub ErrorHandler: MsgBox "処理が取り消されました" End Sub

  • 結合されたセルを列方向に検索したい

    excel2003 結合されたセルを列方向に検索したい Bセルで同じ文字列が入っているセルをダブルクリックすると、順繰りに検索する。 下記が、マクロの内容です。 ------------------------------------------------------------------------- Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) On Err GoTo Myerr: Dim MyRange As Range Dim FirstRow As Integer Application.EnableEvents = False If Target.Column = 2 And Target.Value <> "" Then If Target.Row = Range("B" & Rows.Count).End(xlUp).Row Then FirstRow = 1 Else FirstRow = Target.Row End If With Range("B" & FirstRow & ":B" & Range("B" & Rows.Count).End(xlUp).Row) Set MyRange = .Find(Target.Value, LookIn:=xlValues, After:=ActiveCell) If FirstRow = Target.Row Then Set MyRange = Range("B1:B" & Range("B" & Rows.Count).End(xlUp).Row).Find(Target.Value, LookIn:=xlValues, After:=ActiveCell) MyRange.Select Else MyRange.Select End If End With End If Application.EnableEvents = True Myerr: Application.EnableEvents = True End Sub ------------------------------------------------------------------------- 上記内容で、単独セルであれば動作するのですが、 行方向に結合されている(B1とB2が結合されている)セルをダブルクリックすると 実行時エラー’13’: 型が一致しません。 というエラーが発生します。 上記マクロでどこを修正したらよいのか、教えていただきたく。 B列は、結合されたセル、単独のセルが混在しています。

  • エクセルVBAで特定の文字を削除したい

    選択しているセルの中に入っている文字「■」を 削除したいのですがうまくいきません。 お願いいたします。 Sub ■削除() Dim myRange As Range Dim keyWord1 As String, keyWord2 As String Dim bool As Boolean Set myRange = ActiveCell keyWord1 = "■" keyWord2 = "" bool = myRange.Replace(keyWord1, keyWord2, LookAt:=xlWhole) End Sub

  • EXCEL VBA RANGEオブジェクトの位置情報取得について。

    EXCEL VBA RANGEオブジェクトの位置情報取得について。 下記INPUTBOXでユーザーに任意のセル範囲を選択させます。   Set MyRange = Application.InputBox(prompt:=MyMsg, Type:=8) このMyRangeのセル範囲の位置と行数、列数を取得したいのです。 行数、列数は下記マクロでいいかと思います。   n = MyRange.Rows.Count   m = MyRange.Columns.Count あとは、このMyRangeがどこから始まっているかを取得したいのです。 たとえばMyRangeがB3:D6だとすると、n=4、m=3、左上の位置は3行目、2列目となります。 この「3行目、2列目」という情報を取得したいのです。 ご存知の方、よろしくお願いします。

専門家に質問してみよう