Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


701 / 13645 ツリー ←次へ | 前へ→

【78884】検索し、各シートを検索したセルを表示したい はる 17/2/20(月) 2:03 質問[未読]
【78885】Re:検索し、各シートを検索したセルを表示... ウッシ 17/2/20(月) 8:40 回答[未読]
【78886】Re:検索し、各シートを検索したセルを表示... ウッシ 17/2/20(月) 8:42 回答[未読]
【78891】Re:検索し、各シートを検索したセルを表示... はる 17/2/20(月) 22:46 質問[未読]
【78892】Re:検索し、各シートを検索したセルを表示... β 17/2/20(月) 23:31 発言[未読]
【78894】Re:検索し、各シートを検索したセルを表示... HARU 17/2/21(火) 6:07 質問[未読]
【78895】Re:検索し、各シートを検索したセルを表示... β 17/2/21(火) 7:01 発言[未読]
【78896】Re:検索し、各シートを検索したセルを表示... β 17/2/21(火) 7:03 発言[未読]
【78897】Re:検索し、各シートを検索したセルを表示... はる 17/2/21(火) 8:08 質問[未読]
【78901】Re:検索し、各シートを検索したセルを表示... β 17/2/21(火) 16:09 発言[未読]
【78898】Re:検索し、各シートを検索したセルを表示... ウッシ 17/2/21(火) 8:12 回答[未読]
【78893】Re:検索し、各シートを検索したセルを表示... β 17/2/20(月) 23:40 発言[未読]

【78884】検索し、各シートを検索したセルを表示し...
質問  はる  - 17/2/20(月) 2:03 -

引用なし
パスワード
   書き込み失礼致します。ご指導よろしくお願いします。

SHEET2に昨日の日付を入力し、他シートでその値で検索、スクロールしたいです。
見よう見まねで書いてみましたが上手くスクロールしてくれません。
どのように修正したらいいでしょうか。ご教授願います。


Sub サーチ()
'
'
'高速化
'  Application.ScreenUpdating = False
'  Application.DisplayAlerts = False

'##日付設定
  Sheets("Sheet2").Select
  Range("A1").FormulaR1C1 = "=TODAY()-1"
  Sheets("Sheet2").Range("A1").Value = Sheets("Sheet2").Range("A1").Value
    
'##シートループ
  Dim i As Integer
  Dim DD As String
  DD = Range("A1").Value
  If ActiveWorkbook.Worksheets.Count < 1 Then Exit Sub
  For i = 1 To ActiveWorkbook.Worksheets.Count
  Worksheets(i).Select
  Range("A1").Select
 '###日付検索
  Dim Findcell As Range
  Set Findcell = Cells.Find(what:=DD)
  '##無かったら
  If Not Findcell Is Nothing Then
  On Error Resume Next
  '##移動
  Else
  ActiveWindow.ScrollRow = Findcell
  End If
  
  Next i
  
'  Application.ScreenUpdating = true
'  Application.DisplayAlerts = true
  
  '
  End Sub

【78885】Re:検索し、各シートを検索したセルを表...
回答  ウッシ  - 17/2/20(月) 8:40 -

引用なし
パスワード
   こんにちは

ActiveWindow.ScrollRow = Findcell



Application.GoTo Findcell, True



Application.GoTo Findcell.EntireRow.Cells(1, 1), True

とするとどうですか?


▼はる さん:
>書き込み失礼致します。ご指導よろしくお願いします。
>
>SHEET2に昨日の日付を入力し、他シートでその値で検索、スクロールしたいです。
>見よう見まねで書いてみましたが上手くスクロールしてくれません。
>どのように修正したらいいでしょうか。ご教授願います。
>
>
>Sub サーチ()
>'
>'
>'高速化
>'  Application.ScreenUpdating = False
>'  Application.DisplayAlerts = False
>
>'##日付設定
>  Sheets("Sheet2").Select
>  Range("A1").FormulaR1C1 = "=TODAY()-1"
>  Sheets("Sheet2").Range("A1").Value = Sheets("Sheet2").Range("A1").Value
>    
>'##シートループ
>  Dim i As Integer
>  Dim DD As String
>  DD = Range("A1").Value
>  If ActiveWorkbook.Worksheets.Count < 1 Then Exit Sub
>  For i = 1 To ActiveWorkbook.Worksheets.Count
>  Worksheets(i).Select
>  Range("A1").Select
> '###日付検索
>  Dim Findcell As Range
>  Set Findcell = Cells.Find(what:=DD)
>  '##無かったら
>  If Not Findcell Is Nothing Then
>  On Error Resume Next
>  '##移動
>  Else
>  ActiveWindow.ScrollRow = Findcell
>  End If
>  
>  Next i
>  
>'  Application.ScreenUpdating = true
>'  Application.DisplayAlerts = true
>  
>  '
>  End Sub

【78886】Re:検索し、各シートを検索したセルを表...
回答  ウッシ  - 17/2/20(月) 8:42 -

引用なし
パスワード
   追伸

コードの他の部分の動きは確認していません。

【78891】Re:検索し、各シートを検索したセルを表...
質問  はる  - 17/2/20(月) 22:46 -

引用なし
パスワード
   ▼ウッシ さん:
返信ありがとうございます。
早速試してみましたが、

上のコード
実行時エラー5
プロシージャの呼び出し、または引数が不正です。

下のコード
実行時エラー91
オブジェクト変数またはWithブロック変数が設定されていません。

と表示され動きませんでした。

自分の書いたコードのIFが悪さをしているのかと外してみましたが変わらず・・・
お助けくださいませ

【78892】Re:検索し、各シートを検索したセルを表...
発言  β  - 17/2/20(月) 23:31 -

引用なし
パスワード
   ▼はる さん:

日付検索は、なかなかやっかいです。
用いる手法(今回の場合はFindメソッド)により、適切な検索方法をとる必要があります。

それ以外のコード記述にも問題が少なくありませんが、それ以前に、仕様が少し、あいまいです。

最初に SHeet2 の A1 に 昨日の日付を入れているわけですが、
その値を元にすべてのシートを処理してますね。
すべてですから、Sheet2 も対象で、つまり、Sheet2 なら、A1 が左上隅になるように
スクロールさせたい?
それとも Sheet2 は対象外?

関係するブックですけど、ActiveWorkbookが登場していますね。
これはマクロブックを意図しておられるのですか?
それとも、別のブックを意図しておられるのですか?

ポイントは以下かな?

    If Not Findcell Is Nothing Then
      On Error Resume Next
      '##移動
    Else
      ActiveWindow.ScrollRow = Findcell
    End If

この On Error Resume Next 、これは何を意図して書かれたコードかわかりませんけど
見つかった場合は On Error Resume Next ??
見つからなかった場合は Else にいきますよね。
見つからなかったのにスクロール?
FindCell は Nothing ですからエラーになるのは当たり前なんですけど?


>▼ウッシ さん:
>返信ありがとうございます。
>早速試してみましたが、
>
>上のコード
>実行時エラー5
>プロシージャの呼び出し、または引数が不正です。
>
>下のコード
>実行時エラー91
>オブジェクト変数またはWithブロック変数が設定されていません。
>
>と表示され動きませんでした。
>
>自分の書いたコードのIFが悪さをしているのかと外してみましたが変わらず・・・
>お助けくださいませ

【78893】Re:検索し、各シートを検索したセルを表...
発言  β  - 17/2/20(月) 23:40 -

引用なし
パスワード
   ▼はる さん:

コメントした通り、仕様と要件がいまいち不明ですが、もしかしてやりたかったことは
以下ですか?

Findメソッドで日付を検索する場合、日付のValue(つまり日付型の値)で、LookIn を
xlFormulas にすることがポイントです。

Sub Test()
  Dim DD As Date
  Dim Findcell As Range
  Dim sh As Worksheet
  
  DD = Date - 1
  
  For Each sh In Worksheets
    Set Findcell = sh.Cells.Find(What:=DD, LookAt:=xlWhole, LookIn:=xlFormulas)
    If Not Findcell Is Nothing Then Application.Goto Findcell.EntireRow.Cells(1), True
  Next
  
End Sub

【78894】Re:検索し、各シートを検索したセルを表...
質問  HARU  - 17/2/21(火) 6:07 -

引用なし
パスワード
   ▼β さん:
色々説明不十分で申し訳ありません。

sheet2はデータの何も入っていないsheetですので、スクロールはしてもしなくても問題ありません。シート数も増減するので全シートを対象にしていました。

ActiveBookは最終的にはマクロブック作成を念頭においております。
まずはThisBOOKで動作させたいと思っています。

>ポイントは以下かな?
>
>    If Not Findcell Is Nothing Then
>      On Error Resume Next
>      '##移動
>    Else
>      ActiveWindow.ScrollRow = Findcell
>    End If
>
>この On Error Resume Next 、これは何を意図して書かれたコードかわかりませんけど
>見つかった場合は On Error Resume Next ??
>見つからなかった場合は Else にいきますよね。
>見つからなかったのにスクロール?
> FindCell は Nothing ですからエラーになるのは当たり前なんですけど?

思い違いをしておりました・・・
IF FindCell が見つからなかったら、
On Error Resume Next
見つかってElseに飛んでサーチのつもりで書いていました


書いていただいたマクロ動かしてみましたが上手く表示されませんでした。
現在、日付の書式がmm"月"dd"日"(aaa)になっております。
書式を変更することも出来ますが、
書いていただいたコードはどの書式で対応しているのでしょうか

【78895】Re:検索し、各シートを検索したセルを表...
発言  β  - 17/2/21(火) 7:01 -

引用なし
パスワード
   ▼HARU さん:

書式を決めつけて LookIn を xlValues で検索することもできますが、
アップしたコードでは書式は何であっても取り出せるはずです。

調べてみますが今から夜まで外出しますので、レスは明日になるかと思います。
それまでにウッシさんや、他の回答者さんが対応していただけるかもしれませんね。

【78896】Re:検索し、各シートを検索したセルを表...
発言  β  - 17/2/21(火) 7:03 -

引用なし
パスワード
   ▼HARU さん:

ところで、ほかのシートのセルの日付ですが、値で入っていますか?
それとも、数式で入っているのでしょうか?

【78897】Re:検索し、各シートを検索したセルを表...
質問  はる  - 17/2/21(火) 8:08 -

引用なし
パスワード
   ▼β さん:
>▼HARU さん:
>
>ところで、ほかのシートのセルの日付ですが、値で入っていますか?
>それとも、数式で入っているのでしょうか?

お手数おかけしております。
日付は値で入っております。

【78898】Re:検索し、各シートを検索したセルを表...
回答  ウッシ  - 17/2/21(火) 8:12 -

引用なし
パスワード
   こんにちは

こんな感じですか?

Sub サーチ()
  Dim i As Integer
  Dim DD As Date
  '##日付設定
  Sheets("Sheet2").Range("A1").FormulaR1C1 = "=TODAY()-1"
  Sheets("Sheet2").Range("A1").Value = Sheets("Sheet2").Range("A1").Value
  DD = Sheets("Sheet2").Range("A1").Value
  
  '##シートループ
  If ActiveWorkbook.Worksheets.Count < 1 Then Exit Sub
  For i = 1 To ActiveWorkbook.Worksheets.Count
    '###日付検索
    Dim Findcell As Range
    Set Findcell = Worksheets(i).Cells.Find(What:=DD, LookAt:=xlWhole, LookIn:=xlFormulas)
    '##無かったら
    If Not Findcell Is Nothing Then
      '##移動
      Application.Goto Findcell, True
      MsgBox "OK"
    End If
    
  Next i
End Sub

他の部分、出来てなかったんですね。
▼β さん:
>▼HARU さん:
>
>ところで、ほかのシートのセルの日付ですが、値で入っていますか?
>それとも、数式で入っているのでしょうか?

【78901】Re:検索し、各シートを検索したセルを表...
発言  β  - 17/2/21(火) 16:09 -

引用なし
パスワード
   ▼はる さん:

ウッシさんからコードが出ています。
これで、要件満足ということなら解決ですね。

>いていただいたマクロ動かしてみましたが上手く表示されませんでした。

この『表示』というのが、何のことだかわかりませんでした。
私がアップしたコードでは、目に見える表示変更はしていませんので。
ただ、(裏側で)各シートの該当行をトップ行にスクロールさせているだけですから。
実行後、各シートを見ると、そぷなっていると思うんですが?

で、ウッシさんのコードでは各シートスクロール処理のたびにメッセージボックスを出し
スクロールの状態を、各シート毎に確認できるようになっています。

そういうことが要件だったのでしょうか?
であれば、解決ということですね。

701 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free