過去ログ

                                Page     422
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫   
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 ▼FindでNothingがかえってくるのは?  こうき 02/12/2(月) 14:03
   ┣Re:FindでNothingがかえってくるのは?  kein 02/12/2(月) 14:35
   ┃  ┗Re:FindでNothingがかえってくるのは?  こうき 02/12/2(月) 15:41
   ┗Re:FindでNothingがかえってくるのは?  Taka-mk2 02/12/3(火) 10:45
      ┗Re:FindでNothingがかえってくるのは?  こうき 02/12/3(火) 17:58

 ───────────────────────────────────────
 ■題名 : FindでNothingがかえってくるのは?
 ■名前 : こうき
 ■日付 : 02/12/2(月) 14:03
 -------------------------------------------------------------------------
   以下のようなコードを作ったのですが、
実行するとset ran=nothingになってしまいます。
同じ日付はあるのですが、形式の問題なのでしょうか?
いまいちFindについてよく分かっていないので、
助言をお願いします。

Dim i As Integer
Dim a, o_dir As String
Dim ran As Range

 i = 2
Do While Len(Cells(i, 1)) <> 0
     
   Workbooks("DATA.xls").Activate
    a = Cells(i, 1)  '日付("yyyymmdd"形式のテキスト)
    d = DateSerial(Left(a, 4), Mid(a, 5, 2), Right(a, 2))
  opdir = Cells(1, 12) '開くフォルダ 
  opfn = Cells(i, 11)  '開くファイル
  
  Range(Cells(i, 7), Cells(i, 8)).Copy
 
   Workbooks.Open FileName:=opdir + opfn
   Workbooks(opfn).Activate
   
  Columns(1).Select '同じ日付を検索(形式はyyyy/mm/dd)
 Set ran = Selection.Find(what:=d,lookIn:=xlValues, _
     LookAt:=xlPart,LookAt:=xlPart,MatchByte:=False)

  '同じ日付を見つけたら、同じ行にデータを貼り付ける。
  iy = iy + 1
  Loop
 ───────────────────────────────────────  ■題名 : Re:FindでNothingがかえってくるのは?  ■名前 : kein  ■日付 : 02/12/2(月) 14:35  -------------------------------------------------------------------------
   ▼こうき さん:
>以下のようなコードを作ったのですが、
>実行するとset ran=nothingになってしまいます。
>同じ日付はあるのですが、形式の問題なのでしょうか?
>いまいちFindについてよく分かっていないので、
>助言をお願いします。
>
>Dim i As Integer
>Dim a, o_dir As String
>Dim ran As Range
>
> i = 2
> Do While Len(Cells(i, 1)) <> 0
>     
>   Workbooks("DATA.xls").Activate
>    a = Cells(i, 1)  '日付("yyyymmdd"形式のテキスト)
>    d = DateSerial(Left(a, 4), Mid(a, 5, 2), Right(a, 2))
>  opdir = Cells(1, 12) '開くフォルダ 
>  opfn = Cells(i, 11)  '開くファイル
>  
>  Range(Cells(i, 7), Cells(i, 8)).Copy
> 
>   Workbooks.Open FileName:=opdir + opfn
>   Workbooks(opfn).Activate
>   
>  Columns(1).Select '同じ日付を検索(形式はyyyy/mm/dd)
> Set ran = Selection.Find(what:=d,lookIn:=xlValues, _
>     LookAt:=xlPart,LookAt:=xlPart,MatchByte:=False)
>
>  '同じ日付を見つけたら、同じ行にデータを貼り付ける。
>  iy = iy + 1
>  Loop
このコードで最も問題なのは"ブックを開いたときのシートが処理対象になって
しまう"ということです。ブックから指定して参照するときは、必ずシートも
含めてセル範囲を特定しないと、思わぬトラブルを招きます。
たぶん、こんな感じにすると良いでしょう。(シート名は全てSheet1と仮定)

Dim MyR As Range
Dim MyD As Long
Dim MyF As String, a As String
Dim x As Variant
Const MyFol As String = "C:\My Documents\"
'Cells(1, 12)のフォルダー名は↑のように定数で宣言しておく

With ThisWorkbook.Sheets("Sheet1")
  Set MyR = .Range("A2", .Range("A2").End(xlDown))
End With
Application.ScreenUpdating = False
For Each C In MyR
  a = C.Text
  MyD = CLng(DateSerial(Left(a, 4), Mid(a, 5, 2), Right(a, 2)))
  MyF = MyFol & C.Offset(, 10).Value
  C.Offset(, 6).Resize(, 2).Copy
  Workbooks.Open MyF
  With ActiveWorkbook
   x = Application.Match(MyD, .Sheets("Sheet1").Columns(1), 0)
   If Not IsError(x) Then
     .Sheets("Sheet1").Cells(x, 7).PasteSpecial xlPasteValues
   End If
   Application.CutCopyMode = False
   .Close True
  End With
Next
Set MyR = Nothing
Application.ScreenUpdating = True
 ───────────────────────────────────────  ■題名 : Re:FindでNothingがかえってくるのは?  ■名前 : こうき  ■日付 : 02/12/2(月) 15:41  -------------------------------------------------------------------------
   ▼kein さん:
こんにちは。
先ほどの例を参考にして以下のように書いたのですが、
同じ日付でも(x =02/11/29, d =02/11/29)エラーが出てしまいます。
原因が全くわからないのですが、どうしてでしょう?

Dim y As Integer
Dim a As String
Const o_dir As String = "C:DATA\" 
 iy = 2
Do While Len(Cells(iy, 1)) <> 0
     
 Workbooks("FCV.xls").Activate
    a = Cells(iy, 1)
    d = DateSerial(Left(a, 4), Mid(a, 5, 2), Right(a, 2))

  o_f = Cells(iy, 11) '格納ファイル名
  
  Range(Cells(iy, 7), Cells(iy, 8)).Copy
 
  Workbooks.Open FileName:=o_dir + o_f
   With ActiveSheet
   Set ran = .Range(.Cells(1, 1), .Cells(1, 1).End(xlDown))
   End With
  
For Each x In ran
  With ActiveSheet '同じ日付を検索
  x = Application.Match(d, Columns(1), 0)
   If Not IsError(x) Then
    If iy < 15 Or iy = 20 Then
    ran.Offset(0, 7).Select
    Else
    ran.Offset(-1, 7).Select
    End If
   
  Selection.PasteSpecial Paste:=xlValues
  
  Workbooks("FCV.xls").Activate
   Range(Cells(iy, 9), Cells(iy, 10)).Copy
 
  Workbooks(o_f).Activate
   Selection.Offset(0, -2).Select
    Selection.PasteSpecial Paste:=xlValues
   End If
  End With
Next x

   ActiveWorkbook.Save
   ActiveWorkbook.Close
 ───────────────────────────────────────  ■題名 : Re:FindでNothingがかえってくるのは?  ■名前 : Taka-mk2  ■日付 : 02/12/3(火) 10:45  -------------------------------------------------------------------------
   ▼こうき さん:
こんにちはぁ。
快晴の東京です。
横レスを失礼致します。

>    a = Cells(i, 1)  '日付("yyyymmdd"形式のテキスト)
>    d = DateSerial(Left(a, 4), Mid(a, 5, 2), Right(a, 2))

>  Columns(1).Select '同じ日付を検索(形式はyyyy/mm/dd)
> Set ran = Selection.Find(what:=d,lookIn:=xlValues, _
>     LookAt:=xlPart,LookAt:=xlPart,MatchByte:=False)

ざっとみたところ、シリアル値で検索しているようですね。
ここが問題なのだと思います。
検索対象のシート側がシリアル値で表示されているのなら、Findでヒットしますが、
表示形式がyyyy/mm/ddなのですよね?
それであるならば、dをDate型で宣言して

d = CDate(Left(a, 4) & "/" & Mid(a, 5, 2) & "/" & Right(a, 2))

とすると、Findでひっかかるようになると思います。
自分のところではそれでひっかかりました(2000)。

いじょ、ご参考になれば。
よろしくです。
 ───────────────────────────────────────  ■題名 : Re:FindでNothingがかえってくるのは?  ■名前 : こうき  ■日付 : 02/12/3(火) 17:58  -------------------------------------------------------------------------
   ▼Taka-mk2 さん:
こんにちは。

>快晴の東京です。
ほんとにいい陽気で。(年寄りくさいですね)

>ざっとみたところ、シリアル値で検索しているようですね。
>ここが問題なのだと思います。
>検索対象のシート側がシリアル値で表示されているのなら、Findでヒットしますが、
>表示形式がyyyy/mm/ddなのですよね?
>それであるならば、dをDate型で宣言して
>
>d = CDate(Left(a, 4) & "/" & Mid(a, 5, 2) & "/" & Right(a, 2))
>
>とすると、Findでひっかかるようになると思います。
>自分のところではそれでひっかかりました(2000)。

確かに検索できました。
ありがとうございます。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━    通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━                                 Page 422