• ベストアンサー

エクセルVBA 変数への代入がうまくできない

エクセルVBA 変数への代入がうまくできない かなり初心者です。。。 選択範囲を変数に記憶したいのですがうまくいきません。 メソッドが対応していないとエラーになります。。。 stRng2に"A1:A8”のような範囲のデータを記憶したいのです。 dim stRng2 as Range stRng2 = wkb.Worksheets(stSheet1).Selection.Address(ColumnAbsolute:=False, RowAbsolute:=False) すいませんが、どなたか教えてください。

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

  • ベストアンサー
  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.4

Selection.Address は、アクティブなシートのセルの範囲しか取得できません。 取得したいシートをアクティブにしてから取得しましょう。 Dim stRng2 As String Dim NowActiveSheet As Worksheet Set NowActiveSheet = ActiveSheet '現在アクティブなシートを記憶 Application.ScreenUpdating = False '画面更新停止 wkb.Worksheets(stSheet1).Select 'stSheet1シートをアクティブ stRng2 = Selection.Address(ColumnAbsolute:=False, RowAbsolute:=False) NowActiveSheet.Select '元のシートをアクティブに Application.ScreenUpdating = True '画面更新再開

tochou4848
質問者

お礼

お礼が遅くなりすいません。 非常に助かりました! 画面更新の停止、再開も参考なりました! ありがとうございます!!

その他の回答 (3)

回答No.3

Dim wkBk As Workbook Dim wkSt As Worksheet Dim rgnA1 As Range Dim rgnA8 As Range Dim stRng2 As Range Dim str結果 As String Set wkBk = ThisWorkbook Set wkSt = wkBk.Worksheets("Sheet1") Set rgnA1 = wkSt.Range("A1") Set rgnA8 = wkSt.Range("A8") Set stRng2 = wkSt.Range(rgnA1, rgnA8) str結果 = stRng2.Address(ColumnAbsolute:=False, RowAbsolute:=False) MsgBox str結果

tochou4848
質問者

お礼

ご指導ありがとうございました!

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.2

オブジェクト型のデータの場合はSet命令が必要です。 Set stRng2 = ~ 上記のように修正してみてください。

回答No.1

>dim stRng2 as Range 文字列なら Dim stRng2 As String なのでは? Selection.Addressの結果も文字列ですし。

tochou4848
質問者

お礼

ご連絡ありがとうございます。 stringでも同じエラーが出てしまいました。 試しにSETを先頭につけてみましたがやはりだめです。。。

関連するQ&A

  • エクセルのVBAの記述について

    VBAの記述についてなのですが、 Sub filter() Dim gyo As Long Dim ws1 As Worksheet Dim ws2 As Worksheet Dim ws3 As Worksheet Set ws1 = Worksheets("データ") Set ws2 = Worksheets("チーム") Application.ScreenUpdating = False ws2.Range("A4:BH30").Clear gyo = ws1.Range("A65536").End(xlUp).Row ws1.Activate With ws1.Range(Cells(4, 1), Cells(gyo, 6)) .AutoFilter Field:=1, Criteria1:="A" .SpecialCells(xlCellTypeVisible).Copy ws2.Range("A4") Selection.AutoFilter End With Application.ScreenUpdating = True End Sub ならプログラムははしるのですが、 14行目を .SpecialCells(xlCellTypeVisible).Copy ws2.Range(Cells(4, 1)) だと 「実行時エラー 1004 Rangeメソッドは失敗しました Worksheet オブジェクト」 とでるのですが、出来ないのでしょうか? Cells(4, 1)の1のところを変数にして変えていきたいのですが、よい方法はありますか。 よろしくお願いいたします。

  • EXCEL VBA VLOOKUP 範囲を変数で

    Excel VBA で VLookup()の第2引数の範囲を行と列の数値の変数で指定したいのすが どのように記述すればよいでしょうか。 以下の式がエラーにならないように具体的に直していただけないでしょうか。 よろしくお願いします。 ----------------------------------- Dim d1 As String Dim d2 As String Dim r1 As Integer Dim r2 As Integer Dim c1 As Integer Dim c2 As Integer Dim c3 As Integer d1 = "愛知" r1 = 2 r2 = 782 c1 = 3 c2 = 5 c3 = 4 d2 = VLookup(d1, Worksheets("Sheet1").Range(Cells(r1, c1), Cells(r2, c2)), c3, False)

  • VBAのコピー

    VBAのコピー Dim xls As New Excel.Application Dim wbk As New Excel.Workbook Dim sh3 As Worksheet Set sh3 = Worksheets("全") sh3.Activate sh3.Range("A1:Z65536").Select Selection.Clear Set wbk = xls.Workbooks.Open("\\***.***.*.***\管理\全データ抽出.xls") wbk.Worksheets("全").Activate 'ワークシートをアクティブにする wbk.Worksheets("全").Range("A1:Z65536").Copy 'コピーする 'ActiveSheet.Paste Destination:=Worksheets("全").Range("A1") '貼り付ける Worksheets("全").Range("A1").PasteSpecial Paste:=xlPasteValues wbk.Close SaveChanges:=False 'Worksheets("メイン").Cells(1, 1).Select を実行すると 『wbk.Close SaveChanges:=False』のところで クリップボードに大きな情報があります。・・・・ と言うメッセージがでて必ずとまってしまうのですが メッセージをでないようにしたいのですが 教えてください。お願いします。

  • エクセルVBA

    よろしくお願いいたします。 エクセルのVBAですが、下記のコードを実行すると処理が遅いです。処理が早くなるコード教えてください。 よろしくお願いいたします。 Sub Macro3() Dim aa As Variant Dim i As Variant Application.ScreenUpdating = False Range("A14:i46").Select aa = ActiveSheet.Name ActiveWorkbook.Worksheets(aa).Sort.SortFields.Clear ActiveWorkbook.Worksheets(aa).Sort.SortFields.Add Key:=Range("B15:B46"), _ SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal ActiveWorkbook.Worksheets(aa).Sort.SortFields.Add Key:=Range("C15:C46"), _ SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets(aa).Sort .SetRange Range("A14:i46") .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With For i = 0 To 31 Cells(15 + i, 7).Select If Selection.Value = 0 Then Selection.EntireRow.Hidden = True End If Next i Range("A1").Select Application.ScreenUpdating = True End Sub

  • 変数の代入について

    他のファイルを参照し変数に代入しましたが 参照式まで代入されてしまいますが、これを回避したいです。 ='C:\フォルダ名\[ファイル名.csv]シート名'!$A$1 理由としては、参照先を知られたくないためです。 Dim A(9) As Variant A(0) = Path & "!$A$1" 'ここの部分の書き方を教えてください。 .Range("B1").Value = A(0) 変数は入力ミスをした場合に元に戻すために使います。

  • VBA 変数について

    VBA初心者でございます。 VBAでgrpという変数を設定し、それをキーにしてオートフィルタをしたいです。 以下のコードではエラーがでてしまうのは、なぜでしょうか? どうぞ宜しくお願いいたします。 Sub 絞り込み2() Dim grp Set grp = Worksheets("リスト").Cells(3, 2) Worksheets("マスタ0701").AutoFilterMode = False With Worksheets("マスタ0701").Range(Cells(3, "B"), Cells(Rows.Count, "CK").End(xlUp)) .AutoFilter Field:=13, Criteria1:=grp '.CurrentRegion.Select Range(Cells(3, "B"), Cells(Rows.Count, "CK").End(xlUp)).SpecialCells(xlVisible).Copy Worksheets("検索結果").Range("A1") '.AutoFilter End With End Sub

  • VBA 変数の指定について

    エクセル2010を使っている者です。 過去の質問を見ていると、以下の記述が見つかりました。 Sub swap() Dim w, x As Range, y As Range If Selection.Areas.Count <> 2 Then Exit Sub Set x = Selection.Areas(1) Set y = Selection.Areas(2) w = x.Formula x.Formula = y.Formula y.Formula = w End Sub 変数の指定のところで、x, yはRangeの型を指定していますが、 wはどのようになっているのでしょうか? 検索してみると、変数の型を書かないと自動でVariantとして扱われるように なっているとのことですが、この場合もwもVariant型になっているのでしょうか? また、このようにwを中途半端に書かずに Dim x As Range, y As Range とwを外して書いてしまってもwは変数として機能するのでしょうか? よろしくお願いいたします。

  • VBAの関数について

    VBA初心者です。 VLOOKUP関数の使い方がわかりません。 具体的に書かせてもらうと VBAの中にVLOOKUP関数を使いたいです 試験1ファイルのシート"sheet1"にある 検索値を使い 試験2ファイルの指定した検索範囲を 試験1ファイルのシート"sheet1"の指定した位置に数値を挿入することです。 例えばですが(この使い方も間違ってるかもしれません)コードを書いてみると 試験1の検索値はA5セルとします 試験2の検索範囲はB1~C20とします 検索範囲から取得した数値の位置はD5とします VLOOKUPに関してですが 検索値は変数を使い 検索値範囲も変数を使い 列番号はC列がいいので3で 検索方法はFALSEでお願いします sub test() dim a as range dim b as workbooks dim c as range set a = range("B1~C20") set b = workbooks("sheet1") set c = range("A5") workbooks("試験1").worksheets("sheet1").range("D5").value=workbooks("試験2").activesheet."=VLOOKUP(ここがわかりません)".value end sub そもそも変数やsetの使い方が間違ってるかもしれませんm(__)m コードを書いて貰えるととても助かります。 回答お願いします。

  • VB2005でのEXCEL操作

    いつもお世話になってます。 VBレスキュー花ちゃんを参考にやってみたのですがうまくいかないのでアドバイス頂きたいと思います。 下記のコードにてセル内にテキストを書き、罫線をつけたあと 文字を中央揃えにする場合は、どのようにすればいいのでしょうか。 エクセルにてマクロ記録を行い、開いたところ Range("B1").Select With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter .WrapText = False .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = False End With と、ありましたがHorizontalAlignment = xlCenterを xlBook.Worksheets(1).Range("A1")以降に貼り付けても xlCenterが宣言されていない、とエラーが出てしまいました。 又、空白セルであるE1,F1,G1及びE2,F2,G2、E3,F3,G3は"選択セルの中央揃え"とする場合 HorizontalAlignment = xlCenterAcrossSelection はどのように転載すればいいのでしょうか。 EXCELとの連携について全然理解できていないことが原因なのですが VB6を対象としているサイトでもVB2005にそのまま参考となるのでしょうか。 EXCEL操作については基礎の部分から学びたいので、もし私のように 入門者向けに解説を行っているサイトがありましたら教えてください。 Sub excel2() Dim xlApp As Excel.Application = Nothing Dim xlBooks As Excel.Workbooks = Nothing Dim xlBook As Excel.Workbook = Nothing Dim xlSheets As Excel.Sheets = Nothing Dim xlSheet As Excel.Worksheet = Nothing Dim xlRange As Excel.Range = Nothing Dim xlBorders As Excel.Borders = Nothing Dim xlBorder As Excel.Border = Nothing Try ' 必要な変数は Try の中でインスタンス化する xlApp = New Excel.Application() xlBooks = xlApp.Workbooks xlBook = xlBooks.Open("C:\test.xls") xlSheets = xlBook.Worksheets xlApp.Visible = True xlBook.Worksheets(1).Range("A1") = "No." xlBook.Worksheets(1).Range("B1") = "HOGEHOGE" xlBook.Worksheets(1).Range("B2") = "番号" xlBook.Worksheets(1).Range("C1") = "honyarara" xlBook.Worksheets(1).Range("C2") = "番号" xlBook.Worksheets(1).Range("D1") = "SAMPLE" xlBook.Worksheets(1).Range("E4") = "X" xlBook.Worksheets(1).Range("F4") = "Y" xlBook.Worksheets(1).Range("G4") = "Z" '外枠罫線のコードは省略しました xlApp.Quit()

  • VBAの変数の使い方

    すみません、VBA初心者です。 日付が3か月後の月末(2020/10/31)より小さいデータを他のシートにコピーするコードを作りたいです。 3か月後の日付を、2020/10/31と直打ちすると正常に機能するのですが、以下のように変数(sLast)を使用すると上手くいきません。 変数の使い方が間違っていますでしょうか? ・上手くいく Criteria1:="<=2020/10/31" ・上手くいかない Criteria1:="<=sLast " アドバイス頂戴できますと幸いです。 Sub 期限管理() Dim sLast As Date sLast = DateSerial(Year(Date), Month(Date) + 3, 0) With Worksheets("Sheet1").Range("A1") .AutoFilter Field:=14, Criteria1:="<= sLast " .CurrentRegion.SpecialCells(xlVisible).Copy .Worksheets("期限管理").Range("A1") .AutoFilter End With Worksheets("期限管理").Activate End Sub

専門家に質問してみよう