Excel VBA質問箱 IV

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

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


7063 / 13646 ツリー ←次へ | 前へ→

【41092】検索について しげ 06/7/28(金) 22:20 質問[未読]
【41118】Re:検索について kobasan 06/7/30(日) 22:40 発言[未読]
【41119】Re:検索について しげ 06/7/31(月) 0:02 発言[未読]
【41122】Re:検索について ハチ 06/7/31(月) 8:36 発言[未読]
【41127】Re:検索について ハチ 06/7/31(月) 14:32 発言[未読]
【41150】Re:検索について しげ 06/7/31(月) 22:40 お礼[未読]
【41153】Re:検索について ハチ 06/7/31(月) 23:52 発言[未読]
【41321】Re:検索について しげ 06/8/4(金) 23:27 発言[未読]
【41322】Re:検索について ハチ 06/8/5(土) 7:31 回答[未読]
【41337】Re:検索について しげ 06/8/6(日) 18:02 発言[未読]
【41424】Re:検索について しげ 06/8/9(水) 22:02 お礼[未読]
【41125】Re:検索について kobasan 06/7/31(月) 14:00 回答[未読]
【41151】Re:検索について しげ 06/7/31(月) 22:50 お礼[未読]

【41092】検索について
質問  しげ  - 06/7/28(金) 22:20 -

引用なし
パスワード
   こんにちは。
検索について色々前の投稿を見させて頂き、書いていたのですが
初心者のため、分からない事が出てきたので質問させてください。


BOOK1
シート1には
プロジェクト名     期間       
プロジェクト1 2005/10/1〜2006/4/30  
プロジェクト2 2006/4/30〜2006/9/30
プロジェクト3 2006/12/1〜2006/5/30

シート2には
        2006/4月  5月  6月  7月  8月  9月 ・・・ 2007/3月
プロジェクト1 
プロジェクト2 
プロジェクト3 

BOOK2(プロジェクト1)
10月  11月   12月   1月   2月   3月   4月
120   130   140   150   160  170   180

BOOK3(プロジェクト2)
4月   5月   6月   7月   8月   9月
100   120   120   140   150   120

BOOK4(プロジェクト3)
12月   1月   2月   3月   4月   5月
120   130   140   150  160    170

BOOK2、3、4の情報をBOOK1のシート2に転記したいのです。
ただ、1期が2006/4〜2007/3のため 2005年の情報は転記する必要がないのです。
プロジェクト1は4月のみ、プロジェクト2は4月から9月すべて
プロジェクト3は4月と5月 という具合です。

sub 転記()
  dim II as variant
  dim BRow as range
  set II =workbook("プロジェクト1").range("A1:A12").find(what:="4月",
      lookin:=values,lookat:=xlwhole)
  if not II is nothing then
   BRow=workbook(1).sheets(2).range("B65536").end(xlup).row
   workbook(1).sheets(2).range("B" & BRow+1) =II.offset(1).value
  else
   BRow=workbook(1).sheets(2).range("B65536").end(xlup).row
   workbook(1).sheets(2).range("B" & BRow+1)="0"
  end if
End sub

どう変えていけばよいのでしょうか?
ご教授お願いします。
いくつかの質問とかぶっているところが有ると思うのですが・・・申し訳ないです。

【41118】Re:検索について
発言  kobasan  - 06/7/30(日) 22:40 -

引用なし
パスワード
   今晩は。

なぜレスがつきにくいのか考えてみました。

>BOOK2(プロジェクト1)
>10月  11月   12月   1月   2月   3月   4月
>120   130   140   150   160  170   180
>
>BOOK3(プロジェクト2)
>4月   5月   6月   7月   8月   9月
>100   120   120   140   150   120
>
>BOOK4(プロジェクト3)
>12月   1月   2月   3月   4月   5月
>120   130   140   150  160    170


BOOK2、3、4のデータは2行目の1行しかないのですか。

それとも、次のようになっているのですか。

プロジェクト1
2006/10月    11月    12月    1月    2月   3月 2007/4月
1    120    130    140    150    160   170 180
2    120    130    140    150    160   170 180
3    120    130    140    150    160   170 180
4    120    130    140    150    160   170 180   

プロジェクト2
  2006/4月    5月    6月    7月    8月 2006/9月
1    100    120    120    140    150    120
2    100    120    120    140    150    120
3    100    120    120    140    150    120
4    100    120    120    140    150    120
5    100    120    120    140    150    120

プロジェクト3
  2006/12月    1月    2月    3月    4月    2007/5月
1    120    130    140    150    160    170
2    120    130    140    150    160    170
3    120    130    140    150    160    170
4    120    130    140    150    160    170
5    120    130    140    150    160    170
6    120    130    140    150    160    170

のようになっていて、各プロジェクトの合計を転記するのですか。

 それから、各プロジェクトの1行目の月は、丁寧に日付データで2006/6のように入力していた方が後々楽にプログラムできると思います。表示は書式で6月と表示するようにしたらよいと思いますが。

【41119】Re:検索について
発言  しげ  - 06/7/31(月) 0:02 -

引用なし
パスワード
   ▼kobasan さん:
>今晩は。
>
>なぜレスがつきにくいのか考えてみました。
>
>BOOK2、3、4のデータは2行目の1行しかないのですか。
>
>それとも、次のようになっているのですか。
>
>プロジェクト1
>2006/10月    11月    12月    1月    2月   3月 2007/4月
>1    120    130    140    150    160   170 180
>2    120    130    140    150    160   170 180
>3    120    130    140    150    160   170 180
>4    120    130    140    150    160   170 180  >のようになっていて、各プロジェクトの合計を転記するのですか。
>
> それから、各プロジェクトの1行目の月は、丁寧に日付データで2006/6のように入力していた方が後々楽にプログラムできると思います。表示は書式で6月と表示するようにしたらよいと思いますが。


いろいろ考えていただきありがとうございます。
そして言葉足らずで申し訳ありません。

追加で説明させていただきますと
・プロジェクト毎に転記したい情報は一行目だけで
 合計を転記する必要がなくて、書きませんでした。
・プロジェクトBOOKは各担当者が各自書かれていますので、私は入力方法を変え  ることができないのです。

BOOK2,3,4の表と別のシートに2006年○月○日〜2007年○月○日と期間が書かれてあるので、見た目には表の10月が何年の10月かは判断できるのですが、VBAで
判断させるとなると・・どう書いていったらよいのかに悩んでいます。

ご助言宜しくお願いします。  

【41122】Re:検索について
発言  ハチ  - 06/7/31(月) 8:36 -

引用なし
パスワード
   >BOOK2,3,4の表と別のシートに2006年○月○日〜2007年○月○日と期間が書かれてあるので、見た目には表の10月が何年の10月かは判断できるのですが、VBAで
>判断させるとなると・・どう書いていったらよいのかに悩んでいます。
>
>ご助言宜しくお願いします。  

おはようございます。

もう少し情報を明確にしないと、助言のしようがないのでは?

質問1
Book1のは、変更可能なのでしょうか?
>プロジェクト名     期間       
>プロジェクト1 2005/10/1〜2006/4/30
ここの期間の部分を「開始日」「終了日」と
2セルにわけるほうが処理しやすいのでは?

質問2
>BOOK2(プロジェクト1)
このBook名とプロジェクト名はどうやって関連付けているんですか?

質問3
Book2以降には、年を示す情報は一切無しですか?

質問4
各月のセルが列方向に順番にならんでいるのなら、
始めの位置さえ決めれば一月ごとに検索をかける必要はない と思いますが、
そのあたりはどうでしょうか?  

【41125】Re:検索について
回答  kobasan  - 06/7/31(月) 14:00 -

引用なし
パスワード
   しげ さん 今日は。

>追加で説明させていただきますと
>・プロジェクト毎に転記したい情報は一行目だけで
>・プロジェクトBOOKは各担当者が各自書かれていますので、私は入力方法を変え  ることができないのです。
>
>BOOK2,3,4の表と別のシートに2006年○月○日〜2007年○月○日と期間が書かれてあるので、見た目には表の10月が何年の10月かは判断できるのですが、VBAで
>判断させるとなると・・どう書いていったらよいのかに悩んでいます。

BOOK2,3,4の月が日付データで入力されていると、もっと楽にできるのですが。
できないということなので、難儀しました。

下記コードでできますが、各プロジェクトのデータは、BOOK2,3,4のSheet1に入っているものとします。
Bookの数は、Book1〜9まで対応できます。

このコードは、Book1の標準モジュールに、貼り付けて、一度保存してください。
ThisWorkbook.Path を使って、ファイル操作をしているので、BOOK1,2,3,4は、全て同じフォルダに入れてください。
これで一応できます。

Sub test()
Dim r As Range
Dim s As Worksheet
Dim i As Long, 抽出年 As Long
Dim v, vnt, vntM, myArray(1 To 13)
Dim m1 As String, m2 As String
Dim LastRow As Long, LastRow2 As Long, clmn As Long
  '
  ThisWorkbook.Sheets("Sheet2").Cells.ClearContents
  vntM = ThisWorkbook.Sheets("Sheet2").Range("A1:M1").Value
  vntM(1, 1) = "プロジェクト"
  抽出年 = InputBox("抽出年", "Title", 2006)
  For i = 4 To 12: vntM(1, i - 2) = 抽出年 & "/" & i: Next
  For i = 1 To 3: vntM(1, i + 10) = (抽出年 + 1) & "/" & i: Next
  ThisWorkbook.Sheets("Sheet2").Range("A1:M1").Value = vntM
  書式設定 ThisWorkbook.Sheets("Sheet2")
  '
  With ThisWorkbook.Worksheets("Sheet1")
    vnt = .Range("b2", .Cells(65536, 1).End(xlUp)).Value
  End With
  '
  Application.DisplayAlerts = False
  Application.ScreenUpdating = False
  For i = 1 To UBound(vnt, 1)
    Workbooks.Open ThisWorkbook.Path & "\Book" & (Val(Right(vnt(i, 1), 1)) + 1) & ".XLS"
    Set s = Workbooks("Book" & (Val(Right(vnt(i, 1), 1)) + 1)).Sheets("Sheet1")
    myArray(1) = vnt(i, 1)
    日付処理 s, vnt(i, 2)
    書式設定 s
    LastRow = s.Cells(65536, 1).End(xlUp).Row
    For Each r In s.Range("A1", s.Cells(1, 256).End(xlToLeft))
      For clmn = 2 To UBound(vntM, 2)
        m1 = Format(vntM(1, clmn), "yyyy/mm")
        m2 = Format(r.Value, "yyyy/mm")
        If m1 = m2 Then Exit For
      Next
      If clmn <= UBound(vntM, 2) Then
        myArray(clmn) = r.Offset(1).Value
      End If
    Next
    '
    With ThisWorkbook.Sheets("Sheet2")
      LastRow2 = .Cells(65536, 1).End(xlUp).Row
      .Cells(LastRow2 + 1, 1).Resize(1, UBound(vntM, 2)).Value = _
      Application.Transpose(Application.Transpose(myArray))
    End With
    Erase myArray
    Workbooks("Book" & (Val(Right(vnt(i, 1), 1)) + 1) & ".XLS").Close SaveChanges:=False
  Next
  Application.ScreenUpdating = True
  Application.DisplayAlerts = True
  '
  Set s = Nothing
  Erase vntM: Erase myArray
  ThisWorkbook.Worksheets("Sheet2").Select
End Sub

Sub 書式設定(ws As Worksheet)
  With ws
    .Range("C1", .Cells(1, 256).End(xlToLeft)).NumberFormatLocal = "m月"
    .Range("B1").NumberFormatLocal = "yyyy/m月"
    .Cells(1, 256).End(xlToLeft).NumberFormatLocal = "yyyy/m月"
  End With
End Sub

Sub 日付処理(s As Worksheet, dd)
Dim myday, d, myArray()
Dim i As Integer, m As Integer, y As Integer
  '
  myday = Split(dd, "〜")
  y = Year(myday(0))
  m = Month(myday(0))
  i = 0
  Do
    d = y & "/" & m ' & "/" & "1"
    ReDim Preserve myArray(i)
    myArray(i) = d
    i = i + 1: m = m + 1
    If m > 12 Then m = 1: y = y + 1
  Loop Until DateValue(d) >= DateValue(myday(1))
  s.Range("A1").Resize(1, UBound(myArray)).Value = myArray
End Sub

【41127】Re:検索について
発言  ハチ  - 06/7/31(月) 14:32 -

引用なし
パスワード
   >質問1
>Book1のは、変更可能なのでしょうか?
>>プロジェクト名     期間       
>>プロジェクト1 2005/10/1〜2006/4/30
>ここの期間の部分を「開始日」「終了日」と
>2セルにわけるほうが処理しやすいのでは?

B列に開始日が入っているとして・・

>
>質問2
>>BOOK2(プロジェクト1)
>このBook名とプロジェクト名はどうやって関連付けているんですか?

ファイル名が プロジェクト名.xlsになっているとして・・

>質問3
>Book2以降には、年を示す情報は一切無しですか?

無しとして・・

>質問4
>各月のセルが列方向に順番にならんでいるのなら、
>始めの位置さえ決めれば一月ごとに検索をかける必要はない と思いますが、
>そのあたりはどうでしょうか?  

A2から各月のデータが空白なく順番にならんでいるとして・・・

勝手に想像して作ってみました。

Option Explicit

Sub Test()

Dim Getu() As Long
Dim wb As Workbook
Dim ws As Worksheet
Dim St As Integer
Dim i As Long
Dim R, LastR As Long
Dim buf As Variant

Application.ScreenUpdating = False

With ThisWorkbook.Worksheets("Sheet1")
  LastR = .Range("A65536").End(xlUp).Row
  For R = 2 To LastR
    Set wb = Workbooks.Open(ThisWorkbook.Path & "\" & .Cells(R, 1).Value & ".xls")
    Set ws = wb.Worksheets("Sheet1")
    buf = ws.Range(ws.Range("A2"), ws.Range("A2").End(xlToRight))
    
    St = DateDiff("m", .Cells(R, 2).Value, "2006/04/01") + 1
    ReDim Getu(11)
    For i = 0 To 11
      If i + St > UBound(buf, 2) Then Exit For
      If i + St > 0 Then
        Getu(i) = buf(1, St + i)
      End If
    Next i
    ThisWorkbook.Worksheets("Sheet2").Cells(R, 1).Value = .Cells(R, 1).Value
    ThisWorkbook.Worksheets("Sheet2").Cells(R, 2).Resize(, 12).Value = Getu
    
    wb.Close False
  Next R
End With

Application.ScreenUpdating = True
Set wb = Nothing
Set ws = Nothing
Erase buf, Getu

End Sub

【41150】Re:検索について
お礼  しげ  - 06/7/31(月) 22:40 -

引用なし
パスワード
   ▼ハチ さん:
ご返信ありがとうございます。
分かりにくく申し訳ありませんでした。

>>質問1
>>Book1のは、変更可能なのでしょうか?
>>>プロジェクト名     期間       
>>>プロジェクト1 2005/10/1〜2006/4/30
>>ここの期間の部分を「開始日」「終了日」と
>>2セルにわけるほうが処理しやすいのでは?

期間を分けた方が処理しやすいということで分けてみます。
  B列   C列   D列
2005/10/1   〜   2006/4/30


>
>>
>>質問2
>>>BOOK2(プロジェクト1)
>>このBook名とプロジェクト名はどうやって関連付けているんですか?
>
>ファイル名が プロジェクト名.xlsになっているとして・・
>
そのとおりになっています!

>>質問3
>>Book2以降には、年を示す情報は一切無しですか?
>
>無しとして・・

BOOK2,3,4のsheet1にデータ表が入っています。
sheet2に○年○月○日〜○年○月○日と書いてあるだけです。これはセルを分割させて書かれてあります。(質問1のように)

>
>>質問4
>>各月のセルが列方向に順番にならんでいるのなら、
>>始めの位置さえ決めれば一月ごとに検索をかける必要はない と思いますが、
>>そのあたりはどうでしょうか?  
>
>A2から各月のデータが空白なく順番にならんでいるとして・・・
>
列方向に順番に並んでいます。が、12ヶ月分は全部並んでいません。
プロジェクト1であれば2005年10月〜2006年4月までなので7ヶ月データ分です。A1〜A7まで月が入っていてB1〜B7はデータです。A8〜A12、B8〜B12は空白です。
さらに始まる月がばらばらです。プロジェクト1のA1は10月、プロジェクト2のA1は4月といった具合です。


>勝手に想像して作ってみました。
>
>Option Explicit
>
>Sub Test()
>
>Dim Getu() As Long
>Dim wb As Workbook
>Dim ws As Worksheet
>Dim St As Integer
>Dim i As Long
>Dim R, LastR As Long
>Dim buf As Variant
>
>Application.ScreenUpdating = False
>
>With ThisWorkbook.Worksheets("Sheet1")
>  LastR = .Range("A65536").End(xlUp).Row
>  For R = 2 To LastR
>    Set wb = Workbooks.Open(ThisWorkbook.Path & "\" & .Cells(R, 1).Value & ".xls")
>    Set ws = wb.Worksheets("Sheet1")
>    buf = ws.Range(ws.Range("A2"), ws.Range("A2").End(xlToRight))
>    
>    St = DateDiff("m", .Cells(R, 2).Value, "2006/04/01") + 1
>    ReDim Getu(11)
>    For i = 0 To 11
>      If i + St > UBound(buf, 2) Then Exit For
>      If i + St > 0 Then
>        Getu(i) = buf(1, St + i)
>      End If
>    Next i
>    ThisWorkbook.Worksheets("Sheet2").Cells(R, 1).Value = .Cells(R, 1).Value
>    ThisWorkbook.Worksheets("Sheet2").Cells(R, 2).Resize(, 12).Value = Getu
>    
>    wb.Close False
>  Next R
>End With
>
>Application.ScreenUpdating = True
>Set wb = Nothing
>Set ws = Nothing
>Erase buf, Getu
>
>End Sub

【41151】Re:検索について
お礼  しげ  - 06/7/31(月) 22:50 -

引用なし
パスワード
   ▼kobasan さん、ハチさん:
ご丁寧にありがとうございます。

教えていただいたとおりにやってみようと思います。
理解できるまで少し時間がかかりそうだったので
先にお礼を言わせて頂きました。
できたら報告に参ります。

【41153】Re:検索について
発言  ハチ  - 06/7/31(月) 23:52 -

引用なし
パスワード
   ▼しげ さん:
>▼ハチ さん:
>ご返信ありがとうございます。
>分かりにくく申し訳ありませんでした。
>
>>>質問1
>>>Book1のは、変更可能なのでしょうか?
>>>>プロジェクト名     期間       
>>>>プロジェクト1 2005/10/1〜2006/4/30
>>>ここの期間の部分を「開始日」「終了日」と
>>>2セルにわけるほうが処理しやすいのでは?
>
>期間を分けた方が処理しやすいということで分けてみます。
>   B列   C列   D列
>2005/10/1   〜   2006/4/30
>
>
>>
>>>
>>>質問2
>>>>BOOK2(プロジェクト1)
>>>このBook名とプロジェクト名はどうやって関連付けているんですか?
>>
>>ファイル名が プロジェクト名.xlsになっているとして・・
>>
>そのとおりになっています!
>
>>>質問3
>>>Book2以降には、年を示す情報は一切無しですか?
>>
>>無しとして・・
>
>BOOK2,3,4のsheet1にデータ表が入っています。
>sheet2に○年○月○日〜○年○月○日と書いてあるだけです。これはセルを分割させて書かれてあります。(質問1のように)
>
>>
>>>質問4
>>>各月のセルが列方向に順番にならんでいるのなら、
>>>始めの位置さえ決めれば一月ごとに検索をかける必要はない と思いますが、
>>>そのあたりはどうでしょうか?  
>>
>>A2から各月のデータが空白なく順番にならんでいるとして・・・
>>
>列方向に順番に並んでいます。が、12ヶ月分は全部並んでいません。
>プロジェクト1であれば2005年10月〜2006年4月までなので7ヶ月データ分です。A1〜A7まで月が入っていてB1〜B7はデータです。A8〜A12、B8〜B12は空白です。
>さらに始まる月がばらばらです。プロジェクト1のA1は10月、プロジェクト2のA1は4月といった具合です。


ちょうど、そういう仕様になっています。
プロジェクトのファイルが同じフォルダ内なら動作する予定です。

【41321】Re:検索について
発言  しげ  - 06/8/4(金) 23:27 -

引用なし
パスワード
   こんばんは。
教えていただいたとおりに書いてみるとうまくいきました!
ありがとうございます!!

しかし・・・フォルダ内のファイルすべてのデータを
転記させるようにしなければならなくなりました。

が、最終行end(xlup)の使い方が間違っているのか、フォルダ内のファイルを拾う
コードが間違っているのかうまく作動しません。
ファイルが15個あれば15個目に拾ったファイルのデータのみ
15行並びます。さらに4月のデータはきちんと4月の列に入っていたり
10月のデータが4月に入っていたりします。
たとえば
10月 11月 12月 1月  2月  3月   4月  
120 130  140  150  160 170   180  
が15個目のファイルデータとすると
14個分のデータは入らず

BOOK1sheet2には
2006/4月  5月   6月   7月   8月   9月・・・・
 180    0    0    0    0    0   ・・・
 160    170   180   0    0    0   ・・・
 120    130   140   150   160   170  180  190・・・
という感じです。
伝わるでしょうか。。。

Sub test()
  Dim file As String
  Dim theDir As String
  Dim wb As Workbook
  Dim flg As Boolean
  flg = True
  Application.ScreenUpdating = False
  theDir = "C:\documents and Settings\集計\練習"
  file = Dir(theDir & "\*.xls")
  
  Do While thename <> ""
   Set wb = Workbook.Open(theDir & "\" & file)
   Call subtest(wb, flg)
   flg = False
   wb.Close savechanges:=False
   file = Dir
  Loop
End Sub
Sub subtest(wb as workbook,flg)
  Dim getu() As Long
  Dim ws As Worksheet
  Dim buf As Variant
  Dim st As Integer
  Dim i As Long
  Dim R, Row, LastRow As Long
  
  With ThisWorkbook.Worksheets(1)
    Row = .Range("A65536").End(xlUp).Row
    For R = 2 To Row
    Set ws = wb.Worksheets(2)
    LastRow = ws.Range("C65536").End(xlUp).Row
    buf = ws.Range(ws.Range("C" & LastRow), ws("C" & LastRow).End(xlToRight))
    st = DateDiff("m", .Cells(R, 2).Value, "2006/04/01") + 1
    ReDim getu(11)
    For i = 0 To 11
      If i + st > UBound(buf, 2) Then Exit For
      If i + st > 0 Then
        getu(i) = buf(1, st + i)
      End If
    Next i
    ThisWorkbook.Worksheets(2).Cells(R, 2).Resize(, 12).Value = getu
  End With
  Set wb = Nothing
  Set ws = Nothing
  Erase buf, getu
End Sub

ここで書いてしまってよいのかどうかわからなかったのですが
宜しくお願い致します。

【41322】Re:検索について
回答  ハチ  - 06/8/5(土) 7:31 -

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

おはようございます。
ステップ実行で試してみましたか?
どういった過程か確認するべきだと思います。

最後のデータですべて上書きしているような。
手元にテストデータがないので、
見た感じで回答します。間違ってたらスイマセン・・

>Sub test()
>  Dim file As String
>  Dim theDir As String
>  Dim wb As Workbook
>  Dim flg As Boolean
>  flg = True
>  Application.ScreenUpdating = False
>  theDir = "C:\documents and Settings\集計\練習"
>  file = Dir(theDir & "\*.xls")
>  
>  Do While thename <> ""
>   Set wb = Workbook.Open(theDir & "\" & file)
>   Call subtest(wb, flg)
>   flg = False
>   wb.Close savechanges:=False
>   file = Dir
>  Loop
>End Sub
>Sub subtest(wb as workbook,flg)
>  Dim getu() As Long
>  Dim ws As Worksheet
>  Dim buf As Variant
>  Dim st As Integer
>  Dim i As Long
  'ここの変数名"Row"はまずいのでは?Row関数と混同しそうです。
>  Dim R, Row, LastRow As Long
>  
>  With ThisWorkbook.Worksheets(1)
>    Row = .Range("A65536").End(xlUp).Row
    'ここでループすることで上書きしているような・・
    'ループはDirの箇所でしてますよね?
    '一回だけ実行すれば良いと思うけど
    'とすると期間はどうやって抽出するんですかねぇ?
>    For R = 2 To Row
>    Set ws = wb.Worksheets(2)
'前回は、2行目のデータとなっていましたが最終行に変更になった?
>    LastRow = ws.Range("C65536").End(xlUp).Row
>    buf = ws.Range(ws.Range("C" & LastRow), ws("C" & LastRow).End(xlToRight))

    '期間の情報と開いているBook"wb"をどうやって関連付けてるんですか?
>    st = DateDiff("m", .Cells(R, 2).Value, "2006/04/01") + 1
>    ReDim getu(11)
>    For i = 0 To 11
>      If i + st > UBound(buf, 2) Then Exit For
>      If i + st > 0 Then
>        getu(i) = buf(1, st + i)
>      End If
>    Next i
>    ThisWorkbook.Worksheets(2).Cells(R, 2).Resize(, 12).Value = getu
>  End With
>  Set wb = Nothing
>  Set ws = Nothing
>  Erase buf, getu
>End Sub
>

フォルダ内のファイル全部に実行したいなら・・・

1、フォルダ内のファイル一覧をThisWorkbook.WorkSheets(1)に作る。

2、できた一覧に"手動"で期間を埋めていく。

3、最初に作ったマクロを実行。(取得データが違うなら改良を)

で、いけるのでは?

【41337】Re:検索について
発言  しげ  - 06/8/6(日) 18:02 -

引用なし
パスワード
   何回もありがとうございます。
分かりにくくなってきてしまったので
もう一度説明させていただきます。


BOOK1シート1には
   A      B    C   D   E  F   G     M
プロジェクト名 2006/4月  5月  6月  7月  8月  9月 ・・・ 2007/3月
プロジェクト1 
プロジェクト2 
プロジェクト3 


ファイル名プロジェクト1のシート1に
2005/10/1   2006/4/30(B1とC1に記入)

シート2に下記の表があります
10月  11月   12月   1月   2月   3月   4月
120   130   140   150   160  170   180

ファイル名プロジェクト2のシート1に
2006/4/30  2006/9/30(B1とC1に記入)

シート2に下記の表があります
4月   5月   6月   7月   8月   9月
100   120   120   140   150   120


プロジェクトファイル内にこのようなかたちのファイルが多数に増えましたので
DIR関数を使って書いています。
2006年4月から2007年3月までの情報のみを転記するのは変わりないのですが
期間は各ファイルのシート1からの判断することとなりました。


おっしゃられるようにおかしなコードを書いてますね・・・
もう一度考え直してみます。

【41424】Re:検索について
お礼  しげ  - 06/8/9(水) 22:02 -

引用なし
パスワード
   無事解決したので
ここに報告させていただきます。
ありがとうございました!!

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