シート内の目的の文字のセルアドレスを取得する方法

このQ&Aのポイント
  • シート内の目的の文字のセルアドレスを取得するには、Findメソッドを使用します。
  • Findメソッドは、指定した文字列を含む最初のセルを検索し、そのセルのアドレスを返します。
  • Findメソッドを使用する際は、対象の範囲を明示的に指定することが重要です。
回答を見る
  • ベストアンサー

あるならばそのアドレスを取得したい

シートに目的の文字があるのならば、そのセルのアドレスを取得したいのですが いつも$1:$1048576が返されます。 コードは、 Function test() With Sheets("Sheet1") If Not .Cells.Find(What:="aaa") Is Nothing Then 'あるならば Debug.Print .Cells.Address End If End With End Function です。 aaaはA3にあるとします。 なので、A3という戻り値がほしいのですが、いつも決まった値が返ってきてしまうので、 見つかったセルの値を取得する方法を教えてください。

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

  • ベストアンサー
  • okgoripon
  • ベストアンサー率44% (1141/2550)
回答No.3

Debug.Print .Cells.Find(What:="aaa").Address 単なる書き間違い。 質問に書かれている書き方だと「Sheet1全体のAddressプロパティ」ですから$1:$1048576にしかならないです。

LSNUUONNWWBP
質問者

お礼

回答ありがとうございました。

その他の回答 (2)

  • okormazd
  • ベストアンサー率50% (1224/2412)
回答No.2

Debug.Print .Cells.Address としているのだから、検索とは関係なしに、シートの全セルが返されるのは当然。 "aaa"のあるセルを返したいなら、 With Sheets("Sheet1") Set c = .Cells.Find(What:="aaa") If Not c Is Nothing Then 'あるならば Debug.Print c.Address End If End With とでもしなければダメでしょう。 なお、Findを使うなら、ワークシート上で検索した場合も含めて、前に検索した条件を引き継ぐので、そのままでは予期せぬ結果になることがある。これを防止するために、Lookinとかのほかの引数も指定してやった方がいい。

LSNUUONNWWBP
質問者

お礼

回答ありがとうございました。

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

Function test() With Sheets("Sheet1") If Not .Cells.Find(What:="aaa") Is Nothing Then 'あるならば Debug.Print .Cells.Find(What:="aaa").Address  ’致命的勘違い End If End With End Function #参考 sub macro1() debug.print test2("aaa") end sub function test2(a) on error resume next test2 = worksheets("Sheet1").cells.find(what:=a).address end function

LSNUUONNWWBP
質問者

お礼

回答ありがとうございました。

関連するQ&A

  • EXCEL VBA 文字 アドレス 検索 消去 セル

    こんにちは。 EXCELの中にボタンを設置して以下のような動作をさせたいと思っておりますが、うまくいきません。 どのように改良すればよろしいでしょうか? 1.「end」の文字を検索し、そのセルのアドレスを取得する 2.取得したアドレスの行に関する値から一つ引いた値を計算で求める。例えばendがA10にあれば、A9とする 3.次にA3からA9までの範囲を消去する。 以下が自作したプログラムです。 Sub ボタン1_Click() Dim srcSheets As Worksheet Dim sinki As Integer sinki = MsgBox("データを消去しますか", vbYesNo) Select Case sinki Case vbYes '選択肢 Dim lngYLine As Long Dim intXLine As Integer Set Obj = Worksheets("Sheet2").Cells.Find("end") 'Sheet2の中でendを検索する。セルの場所を特定する。 If Obj Is Nothing Then MsgBox "endが見つかりません" Else lngYLine = Worksheets("Sheet2").Cells.Find("end").Row intXLine = Worksheets("Sheet2").Cells.Find("end").Column lngYLine = lngYLine - 1 End If With Sheets("Sheet2").Range("A3:intXLine+lngYLine").ClearContents End With End Select End Sub

  • エクセル マクロ 抽出

    教えてください。 ○と記入されたセルを参照して、一つ上のセル・A列にある同じ行のセル・ 9行目にある同じ列のセルを抽出しようとしています。 下記の通り入力すると 行数=値.Rowでエラーが出たしまいました。 試行錯誤頑張りましたが解決できそうにありませんのでお力を貸して頂けないでしょうか。 Sub 抽出() Dim i, 行数, 列数 As Long Dim 値 As Range i = 0 行数 = 値.Row 列数 = 値.Column For Each 値 In Sheets("sheet1").Range("C12:R171") If 値.Value = "○" Then i = i + 1 With Sheets("sheet2") .Cells(i, 3).Value = Sheets("sheet1").Cells(行数, 1).Value .Cells(i, 4).Value = Sheets("sheet1").Cells(9, 列数).Value .Cells(i, 5).Value = 値.Offset(-1, 0).Value End With End If Next End Sub

  • エクセルVBA:取得したファイル情報を別シートに貼るには・・・

    いつもお世話になっています。 今エクセルVBAで指定したフォルダ内のファイル情報を取得し、sheet2に貼り付けるものを作っています。 指定したフォルダ内のファイル情報を取得するまでは分かったのですが、作ったVBAを実行するとsheet1のA2セルから自動的に貼り付けられてしまいます。 sheet2のA1セルから貼り付けるにはどうすれば良いのでしょうか?? 作ったVBAはこんな感じです。 まず、フォルダのパスを取得しA2セルへ表示します。 Sub test2()  With Application.FileDialog(msoFileDialogFolderPicker) If .Show = 0 Then Exit Sub Range("A2").Value = .SelectedItems(1) End With End Sub 次に、A2セルの値を使ってファイル名を取得しました。 Sub Test() Dim i As Long Dim pass As String pass = Range("A2").Value With Application.FileSearch .NewSearch .LookIn = pass .FileType = msoFileTypeAllFiles .SearchSubFolders = True If .Execute() > 0 Then For i = 1 To .FoundFiles.Count Cells(i + 1, 1) = .FoundFiles(i) Cells(i + 1, 3) = FileDateTime(.FoundFiles(i)) Next i End If End With End Sub です。 長くて申し訳ありません。よろしくお願いします。

  • ユーザー定義関数でシート名を取得したい

    例えば、以下のユーザー定義関数で Public Function Test(A As Range) Test=A.Address End Function AにアクティブシートのセルA1~セルB2を指定すると「$A$1:$B$2」という値が帰ってきますが、 別のシートのセルA1~セルB2を指定しても、「$A$1:$B$2」という値が帰ってきます。 シート名が抜けてしまっているのですが、シート名はどのようにしたら取得できますか?

  • 最大行数を取得するVBAコードとは?

     人生で初めてエクセルのマクロに挑戦してみた。が、《最大行数を取得するVBAコード》で躓いた。2時間ばかり、悪戦苦闘したがサッパリ判らない。苦肉の策で、SQL文を使った。でも、それじゃー解決したことにはならない。 Public Sub Do_XferPer()   Dim I As Integer   Dim N As Integer      Application.ScreenUpdating = False   '   ' 先頭行の取得   '   N = DLookup("SELECT COUNT(*) FROM [Sheet3$A:A1000]") - 1   Debug.Print N   For I = 2 To N     If 0 Then       Cells(I, 1) = XferPer(Cells(I, 1))     End If   Next I   Application.ScreenUpdating = True      With ThisWorkbook.Worksheets("Sheet3").UsedRange     N = .Rows.Count - 1     Debug.Print N   End With   With Range("A1").SpecialCells(xlLastCell)     N = .Row - 1     Debug.Print N   End With End Sub 【質問】 みなさんは、最大行数を取得するのにどのようなコードを書かれていますか?  宜しくお願いします。

  • エクセルVBAでセル選択するコードが変

    エクセルのワークシートでVBAでセル選択するコードで理解に苦しむことがあります。 通常、Cells(2, 1)はセル番地で言えばA2セル Cells(4, 1)はセル番地で言えばA4セルです。 しかし、 With .Range("B5:B15")でくくれば  .Cells(2, 1)はセル番地で言えばB6セルだと思います。 .Cells(4, 1) はセル番地で言えばB8セルだと思います。 ところが下記のコードを動かすと、なぜかC10:C12が選択されてしまいます。 この理屈がわかりません。 Sub test02()   With Sheets("Sheet1")     With .Range("B5:B15")       .Range(.Cells(2, 1), .Cells(4, 1)).Select     End With   End With End Sub なお、 .Range(.Cells(2, 1), .Cells(4, 1)).Selectを .Range(“A2:A4”).Selectに書きかえると、希望のB6:B8が選択されます。

  • 指定した範囲のセル内の数値を検索したい(VBA)

    いつもありがとうございます。 また皆様のお知恵を拝借したいと思い質問をさせて頂きました。 現在VBAを勉強中なのですが、以下の場合、コードはもっと簡単になるでしょうか? 【やりたい事】 プログラムを実行すると、シート2に数値が返されます。  ※数値が返される範囲は「A1~A100」だとします。 シート2の「A1~A100」には「1~4」の数値が返され、それぞれの数値が何個あるかを検索。 検索した結果を、「シート1」の指定したセルに表示する。 【記述したコード】 dim x as integer x = 0 For x = 1 To 101 If Sheets("シート2").Cells(x, 1) = "1" Then 1count = 1count + 1 End If If Sheets("シート2").Cells(x, 1) = "2" Then 2count = 2count + 1 End If If Sheets("シート2").Cells(x, 1) = "3" Then 3count = 3count + 1 End If If Sheets("シート2").Cells(x, 1) = "4" Then 4count = 4count + 1 End If Next x 上記のコードで「"x"count」に数値を加算していき、最終的に以下のように各数値をシート1に表示させています。 Sheets("シート1").Range("A1") = 1count Sheets("シート1").Range("A2") = 2count Sheets("シート1").Range("A3") = 3count Sheets("シート1").Range("A4") = 4count 結果的にはうまくカウントされて、結果も正しく表示されるのですが、 列をまとめて検索してやる方法などがあれば、もっと短く分かりやすく おさまるのではと思い、質問をさせて頂きました。 こうやるともっと簡単にできるよなどがあれば、教えて頂けないでしょうか。 Excelの関数などを使用しても構いません。 以上、よろしくお願いします。

  • Match関数がうまく機能していない??

    すみません。また教えて下さい。 過去ログを見てシート1にあったデータをシート4にあるデータと照らし合わせてすでにあれば書き換え、なければ追加というようにできるようにしたく過去ログを参考にしてやったのですが、どうしてもエラーが出てしまいます。 Private Sub aa() Dim intlastrow1 As Integer Dim strb As String Dim longlastrow1 As Long intlastrow1 = Sheets(1).Range("A7").End(xlDown).Row longlastrow1 = Sheets(4).Range("A1").End(xlDown).Row Dim c As Object Dim rtn As Variant Dim d As Integer With Sheets(4) .Select For Each c In .Range("A1", "A" & longlastrow1) rtn = Application.Match(c.Value, Sheets(1).Range("A7:A" & intlastrow1), 0) d = c.Row strb = Cells(d, "A").Value If IsError(rtn) Then With Sheets(4).Cells(longlastrow1 + 1, "A") .Value = strb With .Font .Name = "MS Pゴシック" .Bold = False .Size = 8 End With End With Sheets(4).Cells(longlastrow1 + 1, "B").Value = Sheets(1).Range("A2").Value Sheets(4).Cells(longlastrow1 + 1, "F").Value = ShowFormula(Sheet1.Range(Cells(d, "J"), Cells(d, "N"))) longlastrow1 = longlastrow1 + 1 End If If Not IsError(rtn) Then Exit Sub End If Next c End With End Sub 以上のように組んだのですがうまくいきません。 具体的に言うとシート1のA7よりしたに名前が並んでいる(山田、鈴木・・・)とお考え下さい(シート4のA2以下にも同様に名前が並んでいる)。字数の関係で判定後の処理が不十分になっています。

  • excel;マクロ;表現をもっと縮小したい

    質問します。下記のようなモジュールで中に同様の数字のみが順に変わるブロック繰り返しが多数あるのですが、もっと簡略化した表現 が可能でしょうか。よろしくお願いします。 Sub usb_count() d = Range("A65536").End(xlUp).Row j = 3 For i = 2 To d Select Case Cells(i, "B") Case Sheets("sheet2").Cells(4, "A") Sheets("sheet2").Cells(4, "B").Value = Sheets("sheet2").Cells(4, "B").Value + 1 If Cells(i, "K").Value = "USB" Then Sheets("sheet2").Cells(4, "C").Value = Sheets("sheet2").Cells(4, "C").Value + 1 Else Sheets("sheet2").Cells(4, "D").Value = Sheets("sheet2").Cells(4, "D").Value + 1 ' End If ‘------------------------------------------------------------------------------------------------------------------------------------ Case Sheets("sheet2").Cells(5, "A") Sheets("sheet2").Cells(5, "B").Value = Sheets("sheet2").Cells(5, "B").Value + 1 If Cells(i, "K").Value = "USB" Then Sheets("sheet2").Cells(5, "C").Value = Sheets("sheet2").Cells(5, "C").Value + 1 Else Sheets("sheet2").Cells(5, "D").Value = Sheets("sheet2").Cells(5, "D").Value + 1 End If ‘----------------------------------------- ‘以下上記の‘-----------から‘-----------で囲まれたブロックが( )内の数字が6から20まで繰り返され続く が略す End Select Next i End Su

  • エクセル2007 参照セルの値が認識されない

    エクセル2007の環境で下記マクロを実行すると、 アクティブシートのセルA1に数字が入っている場合、Sheet1のセルA1に値を転記しても そのセルA1の値をVLOOKUP関数で参照できません。 マクロに問題があるためなのか何処に問題があるのか分からないので教えてください。 宜しくお願いいたします。 【sheet】は アクティブシートの3行目から1000行目までのA列のセルをクリックしたらセルA1に値を表示 その後、下記【モジュール】を使用し、 アクティブシートのセルA1が空白の場合、 A列の数値をSheet1のセルA1に転記し、アクティブシートのA列の数値が空白になるまで循環する。 Sheet1のセルA1の値をVLOOKUP関数で参照した内容を表示、印刷します。 ----------------------------------------------------------------- '【sheet】 Private Sub Worksheet_SelectionChange(ByVal Target As Range) With Target If .Count > 1 + IsEmpty(.Value) Then Exit Sub If Application.Intersect(.Cells, Range("A3:A1000")) Is Nothing Then Exit Sub ActiveSheet.Cells(1, 1).Value = .Value End With End Sub ----------------------------------------------------------------- '【モジュール】 Sub TEST() Dim myBtn As Integer Dim myMsg As String, myTitle As String Dim WS1 As Worksheet, WS2 As Worksheet Dim i As Long myMsg = "●●●" myTitle = "確 認" myBtn = MsgBox(myMsg, vbYesNo + vbExclamation, myTitle) If myBtn = vbYes Then Set WS1 = ActiveSheet Set WS2 = Sheet1 If WS1.Cells(1, 1).Value = "" Then With WS1 For i = 3 To 65536 If .Cells(i, 1).Value = "" Then Exit For WS2.Cells(1, 1).Value = .Cells(i, 1).Value WS2.Cells(1, 2).Value = ActiveSheet.Name 'WS2.PrintOut Copies:=1 Next i End With ElseIf WS1.Cells(1, 1).Value >= 1 Then WS2.Cells(1, 1).Value = WS1.Cells(1, 1).Value WS2.Cells(1, 2).Value = WS1.Name 'WS2.PrintOut Copies:=1 Else End If End If End Sub -----------------------------------------------------------------

専門家に質問してみよう