[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『すべてのブックに対しての処理』(まさこ)
ブックAの原本シート
テストフォルダ以下のすべてのブック(レイアウトはすべて同じ)
平成 AN2 年 AQ2 月 AT2 日 それぞれ3つのセルで日付となっています。
テストフォルダ以下のすべてのブックを順番に開いて、すべてのシートに対して AN2 年 AQ2 月 AT2 日(この日付が、平成30年4月1日以降)
の場合のみ、原本シートにV17 X17 Z17 にそれぞれ貼り付けたい。
原本シートに貼り付けた後に、開いたブックに対して、原本シートを一番右のシートに入れたいです。
これをテストフォルダ以下のすべてのブックに対して、行いたいです。
Sub 原本シートを一番右のシートに指し込み()
Dim myPath As String Dim myFile As String
myPath = "C:\テスト\"
myFile = Dir(myPath & "*.xls*") Do Until myFile = ""
Workbooks.Open myPath & myFile Dim bk As Workbook Set bk = Workbooks("myPath & myFile") ActiveSheet.Copy _ After:=bk.Sheets(bk.Sheets.Count)
ActiveWorkbook.Close True myFile = Dir() Loop End Sub
ここまで頑張ってみましたが、出来ませんでした。
一回だけの作業ですが、数が多くて困っています。
< 使用 Excel:Excel2010、使用 OS:WindowsXP >
貼付け先は4つまでというのはわかりましたが
コピー元は、説明では1つなのでは??
(マナ) 2018/04/30(月) 21:15
シート1 平成 AN2 年 AQ2 月 AT2 日
シート2 平成 AN2 年 AQ2 月 AT2 日
シート3 平成 AN2 年 AQ2 月 AT2 日
このような形です。
(まさこ) 2018/04/30(月) 22:04
では、シートのループやブックのループは後からにして
ますは、1つのブックの1つのシートから
そのシートの日付が、平成30年4月1日以降という前提で
転記する部分だけを考えてください。
(マナ) 2018/04/30(月) 22:17
Dim d1 As Date d1 = "4/1/2018"
IF d1 < DATE(AN2,AQ2,AT2) then
Cells(2 , 40).Value= Cells(17, 22).Value
Cells(2 , 43).Value= Cells(19, 24).Value
Cells(2 , 46).Value= Cells(21, 26).Value
こんな形だと思います。
(まさこ) 2018/04/30(月) 22:50
d1 = "4/1/2018" For Each a In ThisWorkbook.Worksheets IF d1 < DATE(AN2,AQ2,AT2) then
a.Cells(2 , 40).Value= ws.Cells(17, 22).Value
a.Cells(2 , 43).Value= ws.Cells(19, 24).Value
a.Cells(2 , 46).Value= ws.Cells(21, 26).Value
編集が分からないので、追加で記載します。このような形と思います。
(まさこ) 2018/04/30(月) 22:58
d1 = "4/1/2018" For Each a In ThisWorkbook.Worksheets
IF d1 < DATE(AN2,AQ2,AT2) then
IF ws.Cells(17, 22).Value="" then a.Cells(2 , 40).Value= ws.Cells(17, 22).Value a.Cells(2 , 43).Value= ws.Cells(17, 24).Value a.Cells(2 , 46).Value= ws.Cells(17, 26).Value end if IF ws.Cells(17, 22).Value<>"" and ws.Cells(18, 22).Value="" a.Cells(2 , 40).Value= ws.Cells(18, 22).Value a.Cells(2 , 43).Value= ws.Cells(18, 24).Value a.Cells(2 , 46).Value= ws.Cells(18, 26).Value end if IF ws.Cells(17, 22).Value<>""= and ws.Cells(18, 22).Value<>"" and ws.Cells(19, 22).Value="" a.Cells(2 , 40).Value= ws.Cells(19, 22).Value a.Cells(2 , 43).Value= ws.Cells(19, 24).Value a.Cells(2 , 46).Value= ws.Cells(19, 26).Value end if IF ws.Cells(19, 22).Value<>"" a.Cells(2 , 40).Value= ws.Cells(20, 22).Value a.Cells(2 , 43).Value= ws.Cells(20, 24).Value a.Cells(2 , 46).Value= ws.Cells(20, 26).Value end if next a (まさこ) 2018/05/01(火) 00:01
>Set bk = Workbooks("myPath & myFile")
変数が文字列に成っちゃってますが・・・・。 開いた後は、パスは必要ないです。 Set bk = Workbooks(myFile)
これですむんですけどね。
Set bk = Workbooks.Open(myPath & myFile) (BJ) 2018/05/01(火) 04:02
(マナ) 2018/05/01(火) 07:52
ws.Cells(17, 22).Value = a.Cells(2 , 40).Value 反対でした汗。上記のようなコードです。 (まさこ) 2018/05/01(火) 19:07
1)ブックを開く 2)変数Nに17を代入 3)最初のシートの日付を調べ、4/1以降ならば 4)ブックAの原本シートのN行に転記 5)Nに1を加算 6)すべてのシートについて3〜5)を繰り返す 7)N>17ならば、原本シートをコピー 8)原本シートの転記先セルの値を消去 9)ブックを保存して閉じる 10)以上をフォルダ内のすべてのブックについて繰り返す
次は、3)の日付判定部分について考えてください。
>IF d1 < DATE(AN2,AQ2,AT2) then
そんな使い方ありません、
Dateserialと間違えていませんか?
(マナ) 2018/05/01(火) 19:49
ならば、Dateserialを使えばよいのでは?
(マナ) 2018/05/02(水) 10:08
Dim Wb As Workbook Set Wb = Workbooks("BOOKA.xls") Dim ws As Worksheet Set ws = Wb.Worksheets("原本シート")
Dim y As Long, m As Long, d As Long
Dim myPath As String Dim myFile As String myPath = "C:\TEST\" myFile = Dir(myPath & "*.xls*") Do Until myFile = "" Workbooks.Open myPath & myFile
Dim d1 As Date d1 = DateSerial(2018, 4, 1) Dim bk As Workbook Set bk = Workbooks(myFile) For Each a In bk.Worksheets y = a.Range("AN2").Value m = a.Range("AQ2").Value d = a.Range("AT2").Value Dim d2 As Date d2 = DateSerial(y + 1988, m, d) If d1 < d2 Then
If ws.Cells(17, 22).Value = "" Then ws.Cells(17, 22).Value = y ws.Cells(17, 24).Value = m ws.Cells(17, 26).Value = d End If
End If Next a
ws.Copy _ After:=bk.Sheets(bk.Sheets.Count)
ws.Range("V17") = ""
ws.ange("X17") = ""
ws.Range("Z17") = ""
ActiveWorkbook.Close True myFile = Dir() Loop End Sub
日付の所が無理やりですが、クリアできました(^^)
2、4、7、8が上手く出来ませんが、上記のコードで、やっと思うように上手く動きました。
(まさこ) 2018/05/03(木) 01:04
★の部分を参考にしてください
Option Explicit
Sub test() Dim ws As Worksheet Dim myPath As String Dim myFile As String Dim bk As Workbook Dim a As Worksheet Dim y As Long, m As Long, d As Long Dim d1 As Date Dim d2 As Date Dim n As Long
Set ws = Workbooks("BOOKA.xls").Worksheets("原本シート")
myPath = "C:\TEST\" myFile = Dir(myPath & "*.xls*")
d1 = DateSerial(2018, 4, 1)
Do Until myFile = "" Set bk = Workbooks.Open(myPath & myFile)
n = 17 '★2
For Each a In bk.Worksheets y = a.Range("AN2").Value m = a.Range("AQ2").Value d = a.Range("AT2").Value
d2 = DateSerial(y + 1988, m, d)
If d1 < d2 Then ws.Cells(n, 22).Value = y '★4 ws.Cells(n, 24).Value = m ws.Cells(n, 26).Value = d n = n + 1 '★5 If n > 20 Then Exit For End If Next a If n > 17 Then '★7 ws.Copy After:=bk.Sheets(bk.Sheets.Count) ws.Range("V17:V20,X17:X20,Z17:Z20").ClearContents '★8 End If bk.Close True '★9 myFile = Dir() Loop
End Sub
(マナ) 2018/05/03(木) 08:31
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.