• 締切済み

エクセルのVBAで悩んでいます。

いつもありがとうございます。 エクセルのVBAで悩んでいます。 セルの範囲指定をVBAで行いたいのです。 ただし、引数に数値変数を使用する為、Cellsプロパティを使います。 すると、離れている範囲の範囲指定が出来ないのです。 例えば、Rangeプロパティだと、 Range("A5:E5,A9:E32").Select こうなるところを、 A9:E32 を変数に置き換えたくて、 Range("A5:E5", Cells(g, 1), Cells(h, 5)).Select と、するとエラーが出ます。 VBAの前文は次の通りです。 Private Sub CommandButton1_Click() a = Me.TextBox1.Value b = Me.TextBox2.Value Set c = Range("a:a").Find(what:=a, LookIn:=xlValues, lookat:=xlWhole) Set d = Range("a:a").Find(what:=b, LookIn:=xlValues, lookat:=xlWhole) 'MsgBox c + d e = c.Address 'MsgBox e f = d.Address 'MsgBox f g = Range(e).Row MsgBox g h = Range(f).Row MsgBox h Range(Cells(g, 1), Cells(h, 5)).Select End sub よろしくお願い致します。

noname#18837
noname#18837

みんなの回答

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.2

これでも良いように思います。 Sub Test() Dim Row1 As Long, Row2 As Long  Row1 = 9: Row2 = 32  Range("A5:E5,A" & Row1 & ":E" & Row2).Select End Sub

noname#18837
質問者

お礼

ありがとうございます。 助かりました。

  • gatyan
  • ベストアンサー率41% (160/385)
回答No.1

Range(Cells(g, 1).Address, Cells(h, 5).Address).Select ではどうですか?

noname#18837
質問者

補足

説明不足ですみません。 Range(Cells(g, 1), Cells(h, 5)).Select これは、うまくいきまして、 ここにRange("A5:E5")をたしたいのです。 Range(Cells(g, 1), Cells(h, 5)).Select Range("A5:E5")   この二つは離れた範囲の範囲指定です。 よろしくお願い致します。

関連するQ&A

  • エクセル VBA

    Dim h As Range If Application.CountIf(Range("p:p"), 5) = 0 Then Exit Sub Set h = Range("p:p").Find(what:=5, LookIn:=xlValues, lookat:=xlWhole, searchdirection:=xlPrevious) Range(Range("p2"), h).EntireRow.Delete Shift:=xlShiftUp 上記のマクロは、「2行目から、P列の数値が5の最下の行までを削除する」という内容です。 この5の部分を、<0(0未満)に変えたいのですがわかりません。 どうぞ教えてください。

  • エクセルVBAを勉強中の者です。

    エクセルVBAを勉強中の者です。 今、あるソースを書いていて、それなりに上手くいったので、仮で、これまで、 dim e as string と宣言していたのを、eをdataaddress1に変更して、ソース中のeも全て、dataaddress1に変更しました。以下は途中のソースです。変更まではソースは正常に作動していました。 Range("B2:B" & Rows.count).Interior.ColorIndex = xlColorIndexNone '初めての検索処理 Set data1 = .Find(What:=myKey, After:=.Cells(.count), LookIn:=xlValues, lookat:=xlPart, SearchOrder:=xlByColumns) '最初の検索で見つからなければ、 If data1 Is Nothing Then MsgBox "データは見つかりません", vbExclamation Exit Sub '最初の検索で見つかれば Else dataaddress1 = data1.Address TextBox1.Value = Range(dataaddress1).Value TextBox2.Value = Range(dataaddress1).Offset(0, 1).Value 分類.Value = Range(dataaddress1).Offset(0, 2).Value データ番号.Value = Range(dataaddress1).Offset(0, -1).Value dataaddress1に変更したとたんに、実行時エラー1004 Rangeメソッドは失敗しました'Globalオブジェルト"というメッセージがでました。 何か、stringでの変数の宣言の仕方に問題があるのでしょうか、ご存知の方教えて下さい、よろしくお願いします。

  • エクセルVBA selectionの書き方をヘルプ!

    ここで教えてもらったVBAを書き直して以下のように作りました。 Sub TEST() Dim sh1 As Worksheet Dim sh2 As Worksheet Set sh1 = Worksheets("Sheet1") Set sh2 = Worksheets("Sheet2") d = 5 For i = 1 To d Set x = sh2.Range("E7:F11").Find(What:=sh1.Cells(i, "C"), After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _ xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False) If Not x Is Nothing Then sh1.Cells(i, "D") = x.Offset(0, 1) Next i End Sub ところが「RangeクラスのFindプロパティが取得できません」とエラーになってしまいます。Range("E7:F11")をCellsにすればエラーにはならないのですが、検索範囲を指定したいのです。 sh2.Select Range("E7:F11").Select を入れ、Range("E7:F11")をSelectionにすれば動くのもわかりました。でもSelectせずにやりたいのです。 わがまま言いますが、お教えくださいませ。 お願いします。

  • エクセルで検索と貼り付けのマクロを組みたい

    エクセルで次のようなマクロを組みたいのですがうまくいきません。 ・C5からBB6の範囲において、Aという文字が入っているセルを検索し、その4行下1列右にコピーしておいたものを値だけ貼り付ける。 検索範囲を指定したいのは同じシート内に他にもAという文字が入っているセルがあるからです。このマクロを実行すると何故かC5からBB6の範囲以外のセルを選択し、貼り付けてしまいます。どこがいけないのでしょうか。ぜひ、教えてください。お願いします。 Range("C5:BB6").Select Cells.Find(What:="A", After:=ActiveCell, LookIn:=xlValues,LookAt:= _ xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:= _False, MatchByte:=False, SearchFormat:=False).select Selection.Offset(4, 1).Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _:=False, Transpose:=False

  • EXCELマクロのこの記述の意味を教えてください。

    こんにちは。 以前、教えてもらったマクロですが もう少し深く勉強したいので、記述の 意味(翻訳?)を教えてください。 Sub Test5() Dim FR1 As Range, FR2 As Range With ActiveSheet Set FR1 = .Cells.Find( _ "*", , xlValues, xlWhole, xlByRows, xlPrevious) Set FR2 = .Cells.Find( _ "*", , xlValues, xlWhole, xlByColumns, xlPrevious) End With Range("A1", Cells(FR1.Row, FR2.Column)).Select Set FR1 = Nothing: Set FR2 = Nothing End Sub また、この範囲をA列だけを見る場合、つまりA列の最終行を範囲とする場合は、どう記述すればよいのでしょうか? ぜひ、教えてください。

  • Excelでセル検索したセルの色をテキストボックスに表示

    セル検索した結果をテキストボックスに表示する時、文字は表示できましたが、セルの色もテキストボックスに表示したいのですが、何処を修正したらいいのか分かりません。 教えてください。 宜しくお願いします。 Sub AAA() strMoji$ = UserForm1.TextBox1.Text If UserForm1.TextBox1.Text = "" Then MsgBox "検索条件を入力してください。", 48 Exit Sub End If On Error GoTo Fail Worksheets("Sheet1").Range("a:a").Find(What:=strMoji, After:=ActiveCell, LookIn:=xlValues, LookAt:= _ xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _ ).Activate lonNUM& = Selection.Row UserForm1.TextBox2.Text = Cells(lonNUM, 2).Value UserForm1.TextBox3.Text = Cells(lonNUM, 3).Value UserForm1.TextBox4.Text = Cells(lonNUM, 4).Value UserForm1.TextBox5.Text = Cells(lonNUM, 5).Value UserForm1.TextBox6.Text = Cells(lonNUM, 6).Value UserForm1.TextBox7.Text = Cells(lonNUM, 7).Value UserForm1.TextBox8.Text = Cells(lonNUM, 8).Value Exit Sub Fail: MsgBox "該当なし", 48 End Sub

  • ExcelのVBA ListBox.RowSourceの範囲について教えてください。

    下記のように範囲を変数で検索指定したいのですが、うまくいきません。VBAは初心者です。誰か助けて。 内容は・・・五十音順にあるリストを作り、ウ音のみをListBoxに表示したいのですが。 Private Sub ToggleButton3_Click() Dim A As Range Dim BBB As String Dim C As Range Dim DDD As String Set A = Cells.Find(what:="ウ", lookat:=xlWhole) BBB = Cells(A.row, A.Column + 1).Address Set C = Cells.Find(what:="エ", lookat:=xlWhole) DDD = Cells(C.row - 1, C.Column + 1).Address ListBox商品名.RowSource = "BBB:DDD" End Sub PS 違う方法でもいいのでどなたか教えてください。

  • エクセルVBAの修正をお願いいたします。

    下記VBAをご教授受けて何とか作りましたが、一行指定で作成したのですが、その時によりデータ数にばらつきがありますので、現状データがあるセルだけを拾ってきてデータのあるなしを、JのセルとKのセルに2種類表示するように作成したつもりですが、データがないセルにも延々と Jのセルには 1040272 Kのセルには * が表示されますのでデータが現状ないセルには何も表示されないようにしたいと思います。 自分でいろいろ調べながらしてみるのですが埒が明かない状態になっておりますので、なにとぞお助け、ご教授をお願いいたします。 わかりにくい説明で申し訳ございませんがなにとぞよろしくお願いいたします。 Range("H2").Select ActiveCell.FormulaR1C1 = "=CONCATENATE(RC[-5],RC[-4])" Selection.AutoFill Destination:=Range("H2:H10000") Range("H2:H10000").Select Columns("H:H").Select Selection.Copy Columns("I:I").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Selection.Replace what:="-", Replacement:="", lookat:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False Selection.Replace what:="_", Replacement:="", lookat:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False Sheets("登録商品リスト").Select Columns("C:C").Select Application.CutCopyMode = False Selection.Copy Columns("E:E").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Selection.Replace what:="_", Replacement:="", lookat:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False Selection.Replace what:="-", Replacement:="", lookat:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False Range("F2").Select Application.CutCopyMode = False ActiveCell.FormulaR1C1 = "=UPPER(RC[-1])" Selection.AutoFill Destination:=Range("F2:F10000") Range("F:F").Select Columns("F:F").Select Selection.Copy Columns("G:G").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Sheets("Sheet2").Select Range("J2").Select Application.CutCopyMode = False ActiveCell.FormulaR1C1 = "=COUNTIFS(登録商品リスト!C[-3],C[-1])" Selection.AutoFill Destination:=Range("J2:J1500") Range("J:J").Select Dim i As Long, endRow As Long, str As String, c As Range, wS1 As Worksheet, wS2 As Worksheet Set wS1 = Worksheets("登録商品リスト") Set wS2 = Worksheets("Sheet2") endRow = wS2.Cells(Rows.Count, "K").End(xlUp).Row Application.ScreenUpdating = False If endRow > 1 Then Range(wS2.Cells(2, "K"), wS2.Cells(endRow, "K")).ClearContents End If For i = 2 To wS2.Cells(Rows.Count, "I").End(xlUp).Row str = Left(wS2.Cells(i, "I"), 5) Set c = wS1.Range("G:G").Find(what:=str, LookIn:=xlValues, lookat:=xlPart) If Not c Is Nothing Then wS2.Cells(i, "K") = "*" End If Next i Application.ScreenUpdating = True End Sub

  • Excelで検索結果表示の修正

    下記のマクロでA列だけ検索できるようにしたいのですが、どこを修正したらいいのか教えてください。 Private Sub CommandButton1_Click() AAA End Sub Sub AAA() strMoji$ = UserForm1.TextBox1.Text If UserForm1.TextBox1.Text = "" Then MsgBox "検索条件を入力してください。", 48 Exit Sub End If On Error GoTo Fail Cells.Find(What:=strMoji, After:=ActiveCell, LookIn:=xlValues, LookAt:= _ xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _ ).Activate lonNUM& = Selection.Row UserForm1.TextBox2.Text = Cells(lonNUM, 2).Value UserForm1.TextBox3.Text = Cells(lonNUM, 3).Value Exit Sub Fail: MsgBox "該当なし", 48 End Sub Private Sub UserForm_Click() End Sub

  • Excel VBAデータ登録のスピードアップしたい

    下記のようなコードがあります。 ■input データ閲覧・登録・編集シート ■data データを格納するシート inputシートとdataシートでdataの受け渡しを行っているのですが、データレコードを切り替えるだけで20秒ちょっとかかるため、作業効率が悪いです。 この時間を1~2秒ぐらいまで減らすには、どのように修正すれば、いいでしょうか?どうかアドバイスをお願いいたします。 Private Sub datatouroku() ’データを登録する Dim touroku As Integer Dim fRange As Range Set fRange = Sheets("data").Columns(1).Find(What:=Range("BC1").Value, _ LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows) touroku = fRange.Row '検索されたNoの行位置を求める Sheets("data").Cells(touroku, 1).Value = Range("BC1:BE1").Value Sheets("data").Cells(touroku, 2).Value = Range("AX1").Value Sheets("data").Cells(touroku, 3).Value = Range("I4").Value   '・・・上記のデータが全部で256件あります。 End Sub ------------------------------------------ Private Sub hyouji() 'データを表示させる Dim fRange As Range Dim kensaku As Long Set fRange = Sheets("data").Columns(1).Find(What:=Range("BC1").Value, _ LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows)    If (fRange Is Nothing) Then '見つからなかった?    MsgBox "入力された顧客コードが存在しません。", vbExclamation    Exit Sub    End If    kensaku = fRange.Row '検索された顧客DCの行位置を求める     Range("BC1:BE1").Value = Sheets("data").Cells(kensaku, 1).Value     Range("AX1").Value = Sheets("data").Cells(kensaku, 2).Value    Range("I4").Value = Sheets("data").Cells(kensaku, 3).Value     '・・・上記のデータが全部で256件あります。 Set trg = Sheets("data").Cells(kensaku, 1) End Sub