VBAで検索と置換ができない理由

このQ&Aのポイント
  • VBAで検索と置換を実行した後、ワークシート画面で検索と置換を開くと、日付の形式が変わってしまいます。
  • VBAで検索と置換を実行した結果と手作業で検索と置換を実行した結果が異なる理由は、日付のフォーマットが変換されてしまうためです。
  • VBAでは日付の形式が維持されるが、手作業では日付が変換されるため、検索結果が異なる場合があります。
回答を見る
  • ベストアンサー

検索と置換 vba後、そのまま検索できない

シートに 2014/1/1 が入力されていて VBAで Sub test() If Not Cells.Find(What:=CDate("2014/1/1"), MatchByte:=False) Is Nothing Then Debug.Print "2014/1/1はあります" End If End Sub を実行すると、"2014/1/1はあります"が返りますが このコードを実行し終わってから、ワークシート画面で検索と置換を開くと、 「1/1/2014」の状態で入っています。 そのまま検索ボタンを押しても、さっきはVBAでは"2014/1/1はあります" だったのに、手作業だと「ありません」になります。 どういうことなのでしょう?

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

  • ベストアンサー
回答No.1

こんばんは。 Cells.Find(What:=CDate("2014/1/1"), MatchByte:=False) こちらで返る値は [2014/01/01] →Cells.Findで返る値を表示してみてください。 ワークシートで検索したことになっている値は [1/1/2014] おわかりでしょうか。 Findではデータ型を日付とし、2014/1/1ではなくシリアル値として検索しています。 ですので、検索履歴としては正しいといえます。 しかしながら検索窓で操作する場合はあくまで文字列と書式でのみ検索しています。 よってキャラクターが[2014/1/1] Formatが[*2000/1/1]となります。 このようにそれぞれの操作で行われている処理が異なるため結果不一致となります。 ご確認ください。 ※差し支えなければ、やりたいことをご質問内容に含んでおいてもらえますと、回答がスムーズかと思います。

stjpduenuakic
質問者

お礼

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

その他の回答 (1)

回答No.2

追記です。 Sub test() Dim a As Date Dim b As String a = Cells.Find(what:=CDate("2014/1/1"), Matchbyte:=False) b = Format(a, "yyyy/m/d") If Not b = "" Then Cells.Find (b) End If End Sub これで窓に表示される値が一致します。

stjpduenuakic
質問者

お礼

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

関連するQ&A

  • ワード vba

    ワードの文書内に、文字があるかどうかをvbaで確認したいのですが エクセルのコードを張り付けてみましたが、 もちろんエラーになります。 Sub Macro() If Not Cells.Find(What:="test", MatchByte:=False) Is Nothing Then Debug.Print "testはあります" End If End Sub Cellsで、エラーになります。 このようなコードをワードで使う場合はどう書き換えればいいでしょうか? よろしくお願いします。

  • エクセルvba 検索対象をシートではなく、ブック全

    このコードでシート内に検索文字があるかどうかを取得できるのですが 検索対象をシートではなく、ブック全体にするには どうすればいいでしょうか? Sub Sample() If Not Cells.Find(What:="test", LookAt:=xlPart) Is Nothing Then Debug.Print "あります" Else Debug.Print "ありません" End If End Sub

  • 置換(検索場所に「ブック」を指定した)

    vbaでわからないので教えてください。 手作業なら可能ですが 何回も行なうのでマクロを組みたいのですが Sub 置換() Cells.Replace What:="スッキリ", Replacement:="すっきり", LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False End Sub のコードのどこに「検索場所」が書かれているのでしょか? 前回、シート単位で置換した後、上記のコードを実行すると、 またシート単位での置換になってしまいます。 検索場所を「ブック」にするコードを教えてください!ご教授よろしくお願い致します。

  • excelのvbaを使って日付を置換したいのです

    こんにちは。いつも質問ばかりですみません。 今、excell の VBAの勉強をしているのですが、たとえば、B列に2004/5/3 とか、2004/5/5とか、5月の日付ばかりはいっていたとして、その2004/5の部分を2004/6に置換したいとします。 それを、マクロでやらせてみて、VBAを見ると Sub Macro9() Cells.Replace What:="2004/5", Replacement:="2004/6", LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False End Sub のようになるのですが、このプロシージャーを実行しても、うまく置換できません。 どのように記述したら、できるのか、教えていただけるとうれしいです。 よろしくお願いいたします。

  • VBAで2つのプロシージャーをつなげるには

    VBAでSub ~ End Subまで書き終えて、一つのプロシジャーを完成させたあと、 その下に、もう一つのプロシジャーを作り、連続してマクロを動かしたいと思ってます。 例に例えると、 Sub test() Dim MyRange As Range Set MyRange = Columns("c").Find(What:="﨑") If MyRange Is Nothing Then Debug.Print "環境依存文字ははみつかりません" Else MyRange.Font.ColorIndex = 3  End If Dim MyCells As Range Set MyCells = Columns("c").Find(What:="髙") If MyCells Is Nothing Then Debug.Print "環境依存文字ははみつかりません" Else MyCells.Font.ColorIndex = 3 End If End Sub      Sub sample()    Dim i As Long   For i = 1 To Cells(Rows.Count, "I").End(xlUp).Row    If InStr(1, Cells(i, "I"), "VBA", vbTextCompare) > 0 Then   Cells(i, "M") = "YES"   End If   Next   End Sub 上記のような2つのマクロをつなげて1つの実家行えるようにするにはどうしたらよろしいのでしょうか。 どうしても実行時に上のマクロと下のマクロが別々に表示されてしまします。 (ちなみに、上側のマクロは環境依存文字を探すマクロ、下側はVBAの文字を見つけ出すマクロです。) どなたかご存知の方いらっしゃいましたら、教えて頂けないでしょうか。 よろしくお願い致します。

  • エクセルの置換の検索場所に「ブック」を指定し置換

    エクセルの置換の検索場所に「ブック」を指定し置換するには? 過去ログを見たのですが http://okwave.jp/qa/q5268557.html シートをループするしかないのでしょうか? Sub Macro2() Cells.Replace What:="aaaa", Replacement:="zzz", LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False End Sub のように、シート全体にするかブック全体にするかのプロパティは存在しないのでしょうか?

  • 置換のVBA

    エクセルのあるシート内の「abc」という文字列を「abc20」に置換するには以下で可能ですが、 Sub chikan() Cells.Replace What:="abc", Replacement:="abc" & "20", _ LookAt:=xlPart,SearchOrder:=xlByRows, MatchCase:=False End Sub 「abc」という文字列を連番で「abc20」「abc21」「abc22」・・・・・というふうに置換するにはどうすればいいでしょうか?

  • VBで作成したアプリからExcelを開き文字列を検索・置換したい

    環境:OS.Win2000、Excel2000、VB6 VBで作成したアプリからExcelを開き文字列を検索・置換し保存して閉じる という流れの処理をしたいのですがエラーが発生してしまいます。 Private Sub Command1_Click() Dim xlApp As Object Dim xlBook As Object Dim ret As Object 'OPEN Set xlApp = CreateObject("Excel.Application") Set xlBook = xlApp.Workbooks.Open("c:\aaa.xls") xlApp.Application.Visible = True '置換 xlApp.ActiveCell.Replace what:=TextBox1.Value, _ replacement:=TextBox2.Value, LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False, MatchByte:=False '検索 Set ret = xlBook.Application.Cells.Find(what:=TextBox1.Value, _ After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlPart, _ SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, _ MatchByte:=False) ret.Activate '終了 xlApp.Quit '開放 Set xlBook = Nothing Set xlApp = Nothing End Sub 上記の状態だと ”指定された文字列に置換” の所で ”オブジェクトが必 要です”とエラーが出てしまいます。エラーNOは424です。ちなみに検索 では”Rangeクラスのfindプロパティを取得できません”(1004)となりま す。どうすればエラーが出ないように出来るのか分かりません。また、外部 のアプリでオートメーションを利用する際に気おつけなければいけない事が あれば教えてください。ちなみにExcelのVBA上で実行すると置換までは動作 します。検索の所でエラー1004が発生します。さっぱり理解できません。で きればこの違いも教えてください。続けての質問ですがよろしくお願いします。

  • 検索した後の見つかった件数を取得したい

    画像のように手作業で検索した場合、下に検索結果の個数が表示されますが これをVBA内で取得することは可能でしょうか? マクロの記録だと Sub Macro() Cells.Find(What:="a", After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _ xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _ , MatchByte:=False, SearchFormat:=False).Activate End Sub となるのですが、最後に全部の個数を取得したいです。

  • WORD VBA 繰り返し処理

    WORD VBAについて教えてください。 つぎのようなマクロがあり、これを検索する文字列がなくなるまで、繰り返して、処理するようにしたいのですが、どうすればよいのでしょうか? Sub Macro1() Selection.Find.ClearFormatting With Selection.Find .Text = "あ" .Replacement.Text = "" .Forward = True .Wrap = wdFindContinue .Format = False .MatchCase = False .MatchWholeWord = False .MatchByte = False .MatchAllWordForms = False .MatchSoundsLike = False .MatchWildcards = False .MatchFuzzy = True End With Selection.Find.Execute Selection.MoveRight Unit:=wdCharacter, Count:=1 End Sub

専門家に質問してみよう