[[20120903141806]] 『4.VBAでファイル名の一部を一括変換』(ミニー) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『4.VBAでファイル名の一部を一括変換』(ミニー)

 3.VBAでファイル名の一部を一括変換の続きです [[20120725222144]] 

 HANAさま
 また新しく立ち上げさせていただきました。

 実は、先月から知らない間にブックが増えていて、
 その上、作業者に前回のようなチェックボックスで除外できる方が
 自分で選べてよかったといわれてしまいました…(−−;)
 ですが、遅いPCでもかなり早くなったと喜んでいました。

 固有名詞以外は本物と同じブック名で記載しております。
 3つ追加などのご報告があります。 

 ・ABC_PL_客先別.xlsは、リンクの更新もして値貼り付け作業もしたい。
 ・年間Hにあたるブックが1つ増えた
 ・Private Sub CopyWork のCase 3 aryDelRng = Array("E", "K", "V", "AG")
  E列の前月実績に入っている値をクリア

 <コード>

 Option Explicit
 Private Const 初期フォルダ As String = "\D:\temp\"
 Private Const 年間L As String = "ABC_PL.,拠点別事業部別PLCR." '----リンク更新があるブック
 Private Const 年間H As String = "報告会_客先別売上高表,報告会_事業別客先別売上高,2012年事業別客先別売上高" '----リンク更新がないブック

 Private Sub UserForm_Initialize()
    With Me
      With .ListBox1
        .ColumnCount = 2
      End With
    End With
  End Sub
 Private Sub CommandButton1_Click()
    Dim myFol   As String
    Dim myPath  As String
    Dim myMonth As String
    myFol = GetFolderPath
    If myFol Like "*月*" Then
      Me.TextBox1.Value = myFol
      myPath = GetMonth(myFol)
      Me.TextBox3.Value = myPath
      myMonth = AddMonth(myPath)
      Me.TextBox4.Value = myMonth
      Me.TextBox2.Value = Replace(myFol, myPath, myMonth)
    End If
  End Sub
 Private Sub CommandButton2_Click()
    Me.TextBox2.Value = GetFolderPath
  End Sub
 Private Sub CommandButton3_Click()
    Dim CopyPath As String
    Dim PastPath As String
    Dim CopyFile As String
    Dim PastFile As String
    Dim i        As Long
    Dim ws       As Worksheet
    Dim MyFName  As String
    Dim Buf      As Variant
    Dim Flg      As Boolean
    CopyPath = Me.TextBox1.Value
    PastPath = Me.TextBox2.Value
       If CopyPath = "" Or PastPath = "" Then
      MsgBox "フォルダが指定されていません"
    Else
      'フォルダチェック&作成
      If Dir(PastPath, vbDirectory) = "" Then
        If MsgBox(PastPath & "フォルダがありません。" & vbCr & _
                  "フォルダを作成しますか?", vbYesNo) = vbYes Then
          MkDir PastPath
        Else
          MsgBox "キャンセルされました"
          Exit Sub
        End If
      End If
      '年間リンクファイルOPEN
      For Each Buf In Split(年間L, ",")
        MyFName = Dir(CopyPath & "\*" & Buf & "*xls*")
        If MyFName = "" Then
            If MsgBox(Buf & "ファイルが有りません。" & vbCr & _
                        "続行しますか?", vbYesNo) = vbNo Then
                Exit Sub
            End If
        Else
            Workbooks.Open Filename:=CopyPath & "\" & MyFName, UpdateLinks:=0
        End If
      Next
      'ファイルコピー&リネーム
      With Me.ListBox1
        For i = 0 To .ListCount - 1
            For Each Buf In Split(年間L, ",")
                If InStr(.List(i, 0), Buf) Then
                    Flg = True
                End If
            Next
            If Flg Then
                CopyProc .List(i, 0), PastPath & "\" & .List(i, 1), True
                Flg = False
            Else
                CopyProc CopyPath & "\" & .List(i, 0), PastPath & "\" & .List(i, 1), False
            End If
        Next i
      End With
      '部署毎値更新
      With Me.ListBox1
        For i = 0 To .ListCount - 1
            For Each Buf In Split(年間L & "," & 年間H, ",")
                If InStr(.List(i, 0), Buf) Then
                    Flg = True
                End If
            Next
            If Flg Then
                Flg = False
            Else
                RenewProc PastPath & "\" & .List(i, 1)
            End If
        Next i
      End With
      MsgBox "作業完了"
    End If
  End Sub
'Private Sub CommandButton4_Click()
'     With Me
'      With .ListBox1
'       .Height = Application.RoundUp(.Height, -1)
'        If .MultiSelect = fmMultiSelectMulti Then
'        .ListStyle = fmListStylePlain
'         .MultiSelect = fmMultiSelectSingle
'        Else
'         .ListStyle = fmListStyleOption
'         .MultiSelect = fmMultiSelectMulti
'        End If
'       End With
'    End With
'End Sub
  Private Sub ListBox1_AfterUpdate()
    Dim Buf As Variant
    With Me.ListBox1
      If .Tag = "" Then
        If MsgBox("個別修正しますか?", vbYesNo) = vbYes Then
          Buf = Application.InputBox("ファイル名を修正してください。" & vbLf & vbLf & _
                                     .List(.ListIndex, 0), , .List(.ListIndex, 1))
          If VarType(Buf) <> vbBoolean Then
            .List(.ListIndex, 1) = Buf
          End If
        End If
        .Tag = "Rename"
        .ListIndex = -1
      Else
        .Tag = ""
      End If
    End With
  End Sub
  Private Sub TextBox1_Change()
    SetFileList
  End Sub
  Private Sub TextBox2_Change()
    SetFileList
  End Sub
  Private Sub TextBox3_Change()
    SetFileList
  End Sub
  Private Sub TextBox4_Change()
    SetFileList
  End Sub
  Private Sub SetFileList()
    Dim myFile As String
    Dim myC As New Collection
    Dim Buf As Variant
    Dim i As Long
    Me.ListBox1.Clear
    With Me.TextBox1
      If .Value <> "" Then
        myFile = Dir(.Value & "\*.xls*")
        Do Until myFile = ""
          With Me.ListBox1
            .AddItem
            .List(.ListCount - 1, 0) = myFile
            .List(.ListCount - 1, 1) = Replace(myFile, Me.TextBox3.Value, Me.TextBox4.Value)
          End With
          myFile = Dir()
        Loop
      End If
    End With
    With Me.ListBox1
        For Each Buf In Split(年間L & "," & 年間H, ",")
            For i = .ListCount - 1 To 0 Step -1
                If InStr(.List(i), Buf) Then
                    .AddItem
                    .List(.ListCount - 1, 0) = .List(i, 0)
                    .List(.ListCount - 1, 1) = .List(i, 1)
                    .RemoveItem (i)
                    Exit For
                End If
            Next i
        Next
    End With
  End Sub
  '-------------------------------------------------------
  '月の取得
  '-----------------------
 Private Function GetMonth(myStr As String) As String
    With CreateObject("VBScript.RegExp")
      .Global = True
      .Pattern = "\d{1,2}月"
      GetMonth = .Execute(myStr)(0)
    End With
  End Function
'----------------------------------------------------------
  Private Function AddMonth(ByVal myStr As String) As String
    Dim myReg As Object
    Dim myMonth As Integer
    With CreateObject("VBScript.RegExp")
      .Global = True
      .Pattern = "\d{1,2}月"
      For Each myReg In .Execute(myStr)
        myMonth = Val(myReg.Value)
        myMonth = Month(DateSerial(Year(Date), myMonth + 1, 1))
        myStr = .Replace(myStr, myMonth & "月")
      Next myReg
    End With
    AddMonth = myStr
  End Function
  Private Function GetFolderPath() As String
    With Application.FileDialog(msoFileDialogFolderPicker)
      .InitialFileName = 初期フォルダ
      If .Show = True Then
        GetFolderPath = .SelectedItems(1)
      End If
    End With
  End Function
  Private Sub CopyProc(OpenPath As String, SavePath As String, Flg As Boolean)
    Dim wb As Workbook
    If Flg Then
        Set wb = Workbooks(OpenPath)
    Else
        Set wb = Workbooks.Open(OpenPath, UpdateLinks:=0)
    End If
    Application.DisplayAlerts = False
    With wb
      .SaveAs SavePath
      .Close False
    End With
    Application.DisplayAlerts = True
    Set wb = Nothing
  End Sub
  Private Sub RenewProc(SavePath As String)
    Dim ws As Worksheet
        With Application
         .ScreenUpdating = False   '----Falseに変更
         .Calculation = xlCalculationManual '------計算方法「手動」
         .DisplayAlerts = False
        End With
    With Workbooks.Open(SavePath, UpdateLinks:=0) '----リンク更新しない
      '値コピー作業
        If .Worksheets.Count = 1 Then
          CopyWork .Worksheets(1), 3
        Else
          For Each ws In .Worksheets
            If ws.Name = "差額" Then
              CopyWork ws, 1
            ElseIf ws.Name = "システム" Then
              CopyWork ws, 2
            ElseIf Not ws.Name Like "あいう*" And ws.Name <> "会社差額" Then
           CopyWork ws, 3
            End If
          Next ws
        End If
      Application.Calculation = xlCalculationAutomatic      '------計算方法「自動」
      Application.DisplayAlerts = True
      Application.ScreenUpdating = True
      .Save
      .Close False
    End With
  End Sub
  Private Sub CopyWork(myWs As Worksheet, Ptn As Integer)
    'コピーを3パターンで分岐
    Dim myArea    As Range
    Dim myCol     As Variant
    Dim myRng     As Range
    Dim strRowRng As String
    Dim aryCpyRng As Variant
    Dim aryDelRng As Variant
    Dim Buf       As Variant
    Select Case Ptn
    'ワークシート"差額"
      Case 1
        strRowRng = "7:9,23:26,30:42,47:48,51:52,56:56,64:66,68:76,81:89"
        aryCpyRng = Array("H→E", "J→G")
        aryDelRng = Array("F", "H", "J")
    'ワークシート"システム"
      Case 2
        strRowRng = "4:27,30:49,56:75,82:101,118:130,139:151,159:167,176:184,193:195,204:206,214:228,237:251"
        aryCpyRng = Array("T→G", "AF→S")
        aryDelRng = Array("H", "T", "AF")
      'その他ワークシート("会社差額"、"あいう*"ws除外)
      Case 3
        strRowRng = "7:9,12:19,23:26,30:42,47:48,51:52,56:56,64:66,68:72,74:77,79:81,86:94"
        aryCpyRng = Array("V→J", "AG→U")
        aryDelRng = Array("E", "K", "V", "AG") '----E列追加、実績にある数値をクリア
    End Select
    With myWs
      For Each myArea In .Range(strRowRng).Areas
        For Each myCol In aryCpyRng
          Buf = Split(myCol, "→")
          With myArea
            .Columns(Buf(1)).Value = .Columns(Buf(0)).Value
          End With
        Next myCol
      Next myArea
        For Each myCol In aryDelRng
           Application.Intersect(.Range(strRowRng), .Columns(myCol)).ClearContents
        Next myCol
    End With
 End Sub
 Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    If MsgBox("終了しますか?", vbYesNo, "確認ダイアログ") = vbYes Then   '----------終了
        Cancel = False
    Else
        Cancel = True
    End If
 End Sub
 Private Sub CommandButton5_Click()
    Unload Me
 End Sub
 '------


 まず
 >ABC_PL_客先別.xlsは、リンクの更新もして値貼り付け作業もしたい。
 に絞って考えてみてください。

 (HANA)

 >ABC_PL_客先別.xlsは、リンクの更新もして値貼り付け作業もしたい。
  年間Lかつ、部署毎と同じ作業ですよね。

 ブック名の一覧ですが、保存頂くことはできますでしょうか。
 念のためここから削除させて頂きたいのですがよろしいでしょうか?


 ブック名か Private Const で変数に入れたブック名のどちらかは違っている様に思えます。
 ですから、せっかく載せて頂きましたがあまり意味が無い様に思えます。

 こちらで保存しておくつもりは有りませんが
 整合性の無いデータ(サンプルとして使えないデータ)なら
 載せておく意味は無いと思います。

 (HANA) 

ブック名か Private Const で変数に入れたブック名のどちらかは違っている様に思えます。

 "D:\Test"違っていたのでなおしました。
 あと年間Hは、できるだけブック名ごと入れた方がいいのかと思って入れてしまったのですが
 最初は、Private Const 年間H As String = "客先別売上表,レート一覧"でした。

 年間Hに記載した2012年事業別客先別売上高が、前回"レート一覧"と記載していたものです。
 本当のブック名は 2012年事業別客先別売上高レート.xlsというブック名です
 新たに増えたのが ○月報告会_事業別客先別売上高レート.xls です。
 そしてこのブックは○月報告会_客先別売上高表.xlsと同じく、ブック名の月の更新が必要となるものでした。

 Option Explicit
 Private Const 初期フォルダ As String = "D:\Test"
 Private Const 年間L As String = "ABC_PL.,拠点別事業部別PLCR." '----リンク更新があるブック
 Private Const 年間H As String = "報告会_客先別売上高表,報告会_事業別客先別売上高,2012年事業別客先別売上高" '----リンク更新がないブック

 (ミニー)
 

 まずは、上手く行かない問題点を見つけて下さい。

 (HANA)

 >まずは、上手く行かない問題点を見つけて下さい。
 ABC_PL_客先別.xls のブックが
 リンクの更新がされておらず、対象ではないシートなのに値貼り付けをしていました。
 その原因は、年間Hのファイル名に"客先別"と入ってしまっているブックがあるからでしょうか?
 それぐらいしか思いつかなかったのですが…

 (ミニー)

 コードがどの様に動いているか、検証して下さい。

 実際のコードを動かすのは大変なので
 これまでやってきた様に
 問題が含まれる部分だけを取り出したコードを作り
 検証してみると良いと思います。

 思っただけではコードは直りませんし
 眺めているだけでは、何処で思い違いが有るのか簡単には分かりません。

 (HANA)

 >コードがどの様に動いているか、検証して下さい。

 実際のブック名を入れてみました。
 まずリストボックスのところは、年間Lと年間Hのブックが下に集まっていたので
 そのまま続けると
 年間Lに記載した、○月ABC_PL_客先別.xlsをリンクにもつブックの、ABC_PL_客先別.xlsだけが
 前月のままでした。
 ためしに、年間Lの最後をABC_PL.にすると、やはりABC_PL.xlsのブックが前月のまま
 リンクされておりました

 Option Explicit
 Private Const 初期フォルダ As String = "D:\Test"
 Private Const 年間L As String = "ABC_PL.,拠点別事業部別PLCR.,ABC-PL_事業・客先別."
 Private Const 年間H As String = "報告会_客先別売上高表.,報告会_事業別客先売上高(レート).,事業別客先別売上高実績(レート)." 

 .xlsまで指定したほうがいいのでしょうか?

 (ミニー)

 えっと。。。。「*ABC_PL_客先別.」と言うブックが
 部署毎のブックと判断されないのは当然ですよね?

 (HANA)

 はい、年間Lにいれたブックは、リンク更新だけしてほしいのですが

 ブック名はみんな先月から今月に変わっているのに、
 そのブックをリンクしているブック一覧をみると、他のブックはすべて8月に変わったブックがリンクしてますが、 ABC_PL.xlsだけ前月のままのブック名です(7月ABC_PL.xls)

 でも、 "ABC_PL_客先別.xls"はリンク更新もして値貼り付けの作業も
 しなくてはいけないいので、年間Lに入れてはいけないやつです。
 最初間違っていれてしまいました。

 ABC_PL.xlsとABC-PL_事業・客先別.xlsは更新のみなので、年間Lですよね??

 (ミニー)


 書き込んでいただいたものを見て返信しているので
 その部分をさかのぼって変更されると、何がどうなっていたのか
 わからなくなってしまいますが。。。

 >最初間違っていれてしまいました。
 削除したら、きちんと動く様になったのですか?
 それを正しくしても、やはりうまくいかないのですか?

 結局、どういう事ですか?

 >ABC_PL.xlsだけ前月のままのブック名です
 8月フォルダに、7月ABC_PL.xls の名前で保存されてる ってことですか?

 >そのブックをリンクしているブック一覧をみると
 そのブック ってのは どのブックの事ですか?

 (HANA)

 意味不明なこと書いてしまいました。
  一つ前のものは、ムシしてください(−−;)

 いまの問題なのは、"*ABC_PL_客先別.xls"だけ更新と値貼り付けもしなくては
 いけないということでした・・・すみません。

 コードを実行すると、
 このブックだけリンクの更新も値貼り付け作業もされない、
 ブック名だけが当月になった状態です。
 年間Lの作業と部署毎のブックを足した新しいパターンになると思うのですが
 どのようにしたらいいのでしょうか。

 >年間Lの作業と部署毎のブックを足した新しいパターンになる
 ってことですか??

 それはまた、どうすればよいのか 考え直さないといけないんじゃないでしょうか。

 (HANA)

 って事で、処理の理屈はわかってますよね?

 その操作を手作業でする時に、今回のブックも処理するとしたら、どの段階で何をするか。
 考えてみてください。

 いずれにしても、どれがそのブックなのか分かる様にしておくのが良いでしょうね。

 (HANA)

 >その操作を手作業でする時に、今回のブックも処理するとしたら、どの段階で何をするか。
 手作業でするときは・・・
 部署毎のブックをすべて当月で作ったあと
 ブック名を当月に変えて、ブックを開く
 対象のワークシートのリンクの更新をする
 対象のワークシートの値貼り付け、クリアの作業
 ブックを閉じる・・・ をします。

 >いずれにしても、どれがそのブックなのか分かる様にしておくのが良いでしょうね。
 前回のように、ブック名に"■"をつけたりとかでしょうか?
 名前が似たものが多いので、わたしも目印的なものをつけたいのですが
 ブック名の変更はダメといわれています(TT)
 他に何か方法はありますか?

 (ミニー)

 >手作業でするときは・・・
 それは、今までの手順ですよね?
 今できているコードに組み込む事を考えているので
 それを主体に考えないと、どこに何を組み込めばよいのか
 わからないですが。。。

 >前回のように、ブック名に"■"をつけたりとかでしょうか?
 ■をつけられないから、リストボックスで選ぶことにして
 現在は、変数に入れることにしてますよね。

 あくまでも、これまでできているコードが主体です。
 もちろん ご破算にして作り直すというのなら別ですが。

 (HANA)

 >それは、今までの手順ですよね?
 すみません、
 どのようにお答えをすればいいのかわからないのですが・・・

 >現在は、変数に入れることにしてますよね。
 はい、
 このブック用に新しく Private Const を追加するのでしょうか

 (ミニー)

 そうですね。。。質問がざっくりしすぎてました。

 でしたらまずは、コードが何をどの順番で処理しているか
 先ほどのご説明の様な 文章にしてみてください。

 >このブック用に新しく Private Const を追加するのでしょうか
 フォルダの中にはブックが複数ありますが、
  どのような処理をするのか
 という観点からグループに分けると
  年間L・・・・リンク有り・値更新不要 なブック
  年間H・・・・リンク無し・値更新不要 なブック
  その他 ・・・リンク無し・値更新必要 なブック
 の3つのグループにわけられました。

 現在は
  リンク有り・値更新必要
 というグループが増えたのですよね?

 どのブックがそのグループのものなのか、教えてあげないと
 知らない人(エクセル)はわからないですよ。。。

 (HANA)

 おはようございます。

 >先ほどのご説明の様な 文章にしてみてください。
 細かいところなどは理解できてないと思いますが、大まかな流れだけ
 書いてみました。

 年間Lのブックを開く
 それ以外のブックを開いたら、そのブックを翌月のフォルダへ
 名前をつけて保存、閉じる。
 年間Lのブックも翌月のフォルダへ名前つけて保存して閉じる
 部署毎のブックを開く
 値の貼り付け、削除などをしたら保存して閉じる 

 >知らない人(エクセル)はわからないですよ。。。

 そうですね。
 4つのグループのうち、どのブックがそれにあたるのか
 マクロ用のシートには書いておきたいと思います。

  年間L・・・・リンク有り・値更新不要 なブック
  年間H・・・・リンク無し・値更新不要 なブック
  その他 ・・・リンク無し・値更新必要 なブック
      ・・・リンク有り・値更新必要 なブック

 (ミニー)

 とりあえず
 >    ・・・リンク有り・値更新必要 なブック
 適当な変数名を決めてください。

 (HANA)

 > 適当な変数名を決めてください。

 はい。

  "月別M"とかどうでしょうか?
  3ヶ月毎のファイルなので、という理由でつけました。

 「月別M」ですね。
 でしたら、それらのブックの処理を
 先ほど文章にしてもらったものに付け加えるとしたら
 どこでどのような処理をすれば良いですか?

 「実際に、コードではどのように書けば良いんだろう?」
 の前に、まずは日本語で考えてみてください。

 (HANA)

 >の前に、まずは日本語で考えてみてください。
 先日書いたもののに、自分なりの考えですが追加してみました。

 年間Lと月別Mブックを開く
 それ以外のブックを開いたら、そのブックを翌月のフォルダへ
 名前をつけて保存、閉じる。
 年間Lと月別Mのブックも翌月のフォルダへ名前つけて保存して閉じる
 月別Mと部署毎のブックを開く
 値の貼り付け、削除などをしたら保存して閉じる 

 年間Lと部署毎のブックと一緒かなと思ったのですが
 	年間Lと月別Mのブックも翌月のフォルダへ名前つけて保存して閉じる
 	月別Mと部署毎のブックを開く
 のところで、閉じてまた開いて・・・
 ムダな作業なのかな、という気がしています。

 (ミニー)

 そうですね。そんな感じで追加で良いと思います。

 少し話が戻りますが、大まかな流れを書いてもらいました。
 大きくは違っていないのですが、どの部分が何をしているのかを
 もう少し詳細にしてください。

 よくわからない部分の説明があいまいになっているのだとは思いますが
   それ以外のブックを開いたら、そのブックを翌月のフォルダへ
   名前をつけて保存、閉じる。
 ここの部分ですね。

 この部分は
 >'ファイルコピー&リネーム
 でやっている事の説明をしておられるのだと思います。
 この中では、すべてのブックを翌月のフォルダへ名前を付けて保存していますよ。

 ループ処理もありますので、もう一度順番に確認してください。

      With Me.ListBox1
        For i = 0 To .ListCount - 1
 ですから、リストボックスの最初の項目から順に処理をしています。

 ・リストボックスには何がどのように(どの順で)表示されているか?
 ・年間Lのブックとその他のブックで振り分けている部分が確かにあるが
            For Each Buf In Split(年間L, ",")
                If InStr(.List(i, 0), Buf) Then
  実際に何を変えているのか。

 (HANA)

 書き忘れがありました。。。

 >閉じてまた開いて・・・ムダな作業なのかな、という気がしています。
 この部分は、どのようにしようか迷った所なんですが
 完成後に
  ・開いたときにすべて処理を済ませてしまうパターン
 のコードを作って、速さを比べてみてもらえるとよいと思います。
 で、速い方を採用してください。

 (HANA)

 >ですから、リストボックスの最初の項目から順に処理をしています。
 For i = 0 To .ListCount - 1 この-1は一番上をさすのですね。。

 >リストボックスには何がどのように(どの順で)表示されているか?
 部署毎ブック、年間L、年間Hの順で表示されていました。

 >年間Lのブックとその他のブックで振り分けている部分が確かにあるが
  実際に何を変えているのか。
              For Each Buf In Split(年間L, ",")
                If InStr(.List(i, 0), Buf) Then
 年間LをFlgをつけて、Copyprocのフラグがついていたらに当てはまるので
 ブックを開いて、新しい場所へ更新して閉じる
 フラグがついていないもそれ以外も更新せずに開いて、翌月のフォルダへ保存して閉じる
  If Flg Then
        Set wb = Workbooks(OpenPath)
    Else
        Set wb = Workbooks.Open(OpenPath, UpdateLinks:=0)
    End If
    Application.DisplayAlerts = False

  ほとんど妄想に近いぐらいなのですが・・・こんな風にしかかけず申し訳ないです

 >開いたときにすべて処理を済ませてしまうパターン
 >のコードを作って、速さを比べてみてもらえるとよいと思います。

 コードを作るんですかーー(><)!?
 できるかがんばってみます。
 速さを比べるぐらいまでできればいいんですけど。

 (ミニー)

 >For i = 0 To .ListCount - 1 この-1は一番上をさすのですね。。
 残念ながら、違います。。。

 ちょっと分かりにくいんですが
 たとえば、、、
 取扱い商品として、りんご・みかん・なし・いちご・ぶどう の5つがあったとします。
 いちいち名前を呼ぶのは面倒なので、0番から番号を振りました。
  0:りんご 1:みかん 2:なし 3:いちご 4:ぶどう
 ですね。

 ここで、「商品の種類は何種類ですか?」と聞かれると「5種類です」って答えますよね。

 0番から順に箱に詰めて下さい。をコードにすると
  For i = 0 To 4
    i番の商品を箱に詰める
  Next
 こんなコードになりますね。

 商品は5種類ある。1,2,3,4,5 と数えて 5種類です。
 商品の番号は、0,1,2,3,4 と振ってあるので、最後は「4」で終わります。

 「商品の種類は、変わったりします」なんて言われたら
  For i = 0 To 商品の種類 - 1
    i番目の商品を箱に詰める
  Next
 こんな感じにしておけば、毎回数字を書き換えなくて済みますね。

 For i = 0 To .ListCount - 1 この-1も同じです。

 >ほとんど妄想に近いぐらいなのですが・・・
 エクセル君の気分になって、しっかり妄想してください。

 >年間LをFlgをつけて、Copyprocのフラグがついていたらに当てはまるので
 >ブックを開いて、新しい場所へ更新して閉じる
 >フラグがついていないもそれ以外も更新せずに開いて、翌月のフォルダへ保存して閉じる
 この書き方だと、
  ・どちらのブックも、このループの中で開く
 ことになってしまいます。

 実際のコードは・・・・
 年間L :Set wb = Workbooks(OpenPath)
 その他:Set wb = Workbooks.Open(OpenPath, UpdateLinks:=0)
        ここが、ブックを開く~~~~

 横着して、変数名を変えていないので分かり辛くなってしまっていますが
 その他のブックは「Open」とあるので、開いていますが
 年間Lのブックは、それがないので、開きません。

 というか、その前の
 >年間Lと月別Mブックを開く
 で、年間Lのブックはすでに開いているので 開こうとすると二重に開くことになってしまいますよ。

 変数:wb に、「どのブックを処理するのか記入」しています。
 これから処理しようとするブックが
  年間L ブックだったら、.List(i, 0)・・・ブック名
  その他のブックだったら、CopyPath & "\" & .List(i, 0)・・・開くために Pathもついた状態& 開く!!
 をしています。

 >コードを作るんですかーー(><)!?
 >できるかがんばってみます。
 まだ少し先の話ですよ^^
 まずは動くコードを作りましょう。

 (HANA)

わかりやすくありがとうございます!
 0からスタートなんですね。

 >こんな感じにしておけば、毎回数字を書き換えなくて済みますね。
 すみません。私本当にバカで。
 i=0で、商品が-1 となるとどうして変更しなくてすむのでしょうか??
 単純な計算なんだと思うのですが、考えてたら頭いたくなりました・・・

  >年間Lのブックは、それがないので、開きません。
 すみません。それとは何をさすのでしょうか・・・
 年間Lはもう開いているからでしょうか?

 >で、年間Lのブックはすでに開いているので 開こうとすると二重に開くことになってしまいますよ。
 そうでした!最初に年間Lは開いているんですよね。

 >変数:wb に、「どのブックを処理するのか記入」しています。
 >年間L ブックだったら、.List(i, 0)・・・ブック名
 >その他のブックだったら、CopyPath & "\" & .List(i, 0)・・・開くために Pathもついた状態& 開く!!

 説明していただくと、なんとなくだったものが
 ひとつひとつがどういう意味なのかもよくわかります。。
 何度もHANAさんのコードと説明を見比べないとダメですが・・・

 >まずは動くコードを作りましょう。
 どこから初めていいのかもわからないのですが(><)
 Private Const に月別Mを追加のところからはじめればいいのでしょうか。

 (ミニー)

  For i = 0 To 商品の種類 - 1 
 >となるとどうして変更しなくてすむのでしょうか??

 えっと。。。例が悪かったですね。
 実際のコードは
  For i = 0 To .ListCount - 1
 ですよね。

 今はブックが 14個(でしたっけ?)と決まっているので
  For i = 0 To 13
 と書いておけば事が足ります。

 でも、今後ブックが一つ増えた場合、この部分を書き直さないといけないですよね。
 Me.ListBox1.ListCount と書いておけば、その段階で リストボックスに入っている
 値の個数を取得できます。

 コード内で、「Me.ListBox1.ListCount」を使っておけば ブックが増えたり減ったりしても
 To ○○ の部分をその都度書き換えなくても良くなりますよね?

 でも、そのまま
  For i = 0 To .ListCount
 って書いたんじゃダメなんです。
 番号は0から始まっていて、数は1から数え始めるので。

 と言うことでしたが、どうでしょう?

 なんでこんな話をしているのかというと、ミニーさんが書いておられた
 >この-1は一番上をさすのですね。。
 が「違いますよ」という説明の為です。そこもお忘れなく。

 >単純な計算なんだと思うのですが
 という書き込みから、何か違うことを考えておられたと思いますので
 頭も痛くなっちゃいますよね。。。

 >>年間Lのブックは、それがないので、開きません。
 >すみません。それとは何をさすのでしょうか・・・
 年間L :Set wb = Workbooks(OpenPath)
 その他:Set wb = Workbooks.Open(OpenPath, UpdateLinks:=0)
        ここが、ブックを開く~↑~
               これ
 リストボックスに表示されているブックを上から順に処理していったとき
 そのブックが 年間Lだったら、上側のコード・・・Set wb = Workbooks(OpenPath)
 その他のブックだったら、下側のコード・・・Set wb = Workbooks.Open(OpenPath, UpdateLinks:=0)
 が実行される様に場合分けがされている事は、わかっておられるのですよね?

 Open とある方(その他のブックだった場合)は、この段階でブックを開きますが
 Open がない方(年間Lのブックだった場合)は、この段階ではブックは開きません。
 「Openしなさい」って指示を出してないのに 勝手に開かれたら困りますでしょ?

 (HANA)

 しばらく時間があいてしまってすみません!
 ご説明本当にありがとうございます 

 >Me.ListBox1.ListCount と書いておけば、その段階で リストボックスに入っている
 >値の個数を取得できます。
 はいーーー!例題でよくわかりましたー! 

 >To ○○ の部分をその都度書き換えなくても良くなりますよね?
 はい、そうですね〜。とてもよくわかりました!

 >が「違いますよ」という説明の為です。そこもお忘れなく。
 はい!

 > 頭も痛くなっちゃいますよね。。。
 ・・・はい。ただでさえコードと聞くとかまえてしまうので
 でもこうやって説明していただけるとすごくわかりやすいです〜

 >が実行される様に場合分けがされている事は、わかっておられるのですよね?
 はい。ここまではなんとか。 

 >「Openしなさい」って指示を出してないのに 勝手に開かれたら困りますでしょ?
 はい、困ります。
 そういうことだったんですね!
 もう少し考えて何とか動くコード作ってみます。

 >もう少し考えて何とか動くコード作ってみます。

 あ〜 ですから、上記を踏まえてもう一度
 >'ファイルコピー&リネーム
 でやっている事の説明を、日本語にしてみてください。

 コードの作成に取り掛かっても、考え方が違ったのでは仕様がありませんので。。。
   それに、他のコード(SetFileList)も絡んできますし。

 (HANA)

 >あ〜 ですから、上記を踏まえてもう一度
 コード何から手をつけていいのかもわからず、めげそうでした。 

 >でやっている事の説明を、日本語にしてみてください。
 >'ファイルコピー&リネーム

 リストボックスの上から順に 部署毎、年間L、年間Hで並んでいて
 年間Lのブックにフラグがついて
 フラグがあるブックは
 ブックを開かず新しいフォルダへ名前つけて保存して閉じる
 それ以外のブックは、ブックを開いて新しいフォルダへ名前をつけて保存、閉じる

 ここを読むというだけでも、すごい時間かかりました。。(TT)
 遅くなってすみません
 (ミニー)


 大丈夫です。ちゃんと前進していると思いますよ。

 そんな感じで書いてあると「月別M」への処理が、もう少し詳細にはどの位置に入れば良いかわかりますか?

 部署毎のブックは、年間Lがリンクしているので
  部署毎のブックに名前を付けて保存して閉じる前までに
   年間Lのブックを開いておく必要があり
  年間Lのブックに名前を付けて保存して閉じる前までに
   部署毎のブックに名前を付けて保存しておかないといけなかったですよね。
 ・・・という仕組みにしたのを覚えておられますか?

 月別Mは、どのブックをリンクしていて どのブックからリンクされていますか?

 月別Mのブックは
 リンクしているブックに「名前を付けて保存して閉じる」の作業をする前までに
   開いておかないといけないですし
 リンクされているブックに「名前を付けて保存して閉じる」の作業をする前までに
   名前を付けて保存しておかないといけません。

  ・・・実際は閉じるのはどのタイミングでも良いのですが。。。
     今は一連の作業になっているので、話の中でも一連にしてあります。

 (HANA)

 >そんな感じで書いてあると「月別M」への処理が、もう少し詳細にはどの位置に入れば良いかわかりますか?
 えっと、そうすると、
 月別Mは部署毎のブックをリンクしているので
 部署毎のブックを開いているときに、月別Mは保存して閉じないとダメということですよね 
 部署毎、月別Mという順番で開いて
 年間Lを保存して閉じる前に作業をするということになりますか??

 >・・・という仕組みにしたのを覚えておられますか?
 はい。月別Mが加わって、順番がさらに難しいです(><)

 >月別Mは、どのブックをリンクしていて どのブックからリンクされていますか?
 月別Mのブックは部署毎ブックをリンクしていて、年間Lのブックにリンクされています。
 (ミニー)

 えっと
 >部署毎のブックを開いているときに、月別Mは保存して閉じないとダメということですよね 
 これって、書き間違いですか?

 それとも、単に閉じるタイミングの事ですか?

 月別Mはいつ開けば良いと考えていますか?
 部署毎のブックは、いつ名前を付けて保存すれば良いと考えていますか?

 (HANA)

 >これって、書き間違いですか?
 なんか文章がヘンでした〜。すみません。 

 >それとも、単に閉じるタイミングの事ですか?
 はい、閉じるタイミングのことをかいてました(><)

 >月別Mはいつ開けば良いと考えていますか?
 一番最初でしょうか?
 リンクしている部署毎より先。。と考えてます。

 >部署毎のブックは、いつ名前を付けて保存すれば良いと考えていますか?
 部署毎のブックは、年間Lの作業が始まる前に名前をつけて保存でしょうか。 
 (ミニー)

 >>月別Mはいつ開けば良いと考えていますか?

 >一番最初でしょうか?

 そうですね。

 と、なると最初に開いておかないといけないブックを開く処理
      '年間リンクファイルOPEN
      For Each Buf In Split(年間L, ",")
        MyFName = Dir(CopyPath & "\*" & Buf & "*xls*")
        If MyFName = "" Then
            If MsgBox(Buf & "ファイルが有りません。" & vbCr & _
                        "続行しますか?", vbYesNo) = vbNo Then
                Exit Sub
            End If
        Else
            Workbooks.Open Filename:=CopyPath & "\" & MyFName, UpdateLinks:=0
        End If
 の所をどの様に変更すれば良いでしょう?

 って話になります。

 今は、開くブック名の候補に「年間L」しか指定していないので
 年間L の条件に一致したブックだけが開かれるようになっていますよね。

 (HANA)

 >の所をどの様に変更すれば良いでしょう?
 >年間L の条件に一致したブックだけが開かれるようになっていますよね。

 ほかのところを参考にして、Splitのところだけ変えました。 
 どうでしょうか。 

 With Me.ListBox1
        For i = 0 To .ListCount - 1
            For Each Buf In Split(月別M & "," & 年間L,",")

 (ミニー)

 動かしてみてどうでしたか?
   変数の値を確認しながら、ステップインで実行してみてくださいね。

 目的のブックだけが開かれたなら、それでOKです。
   確認できたら、VBEのツールバーに ■ がありますので
   それを押して、途中で終了してもらえれば良いと思います。

 次に
 >部署毎のブックは、年間Lの作業が始まる前に名前をつけて保存でしょうか。 
 ですが。。。

 名前を付けて保存するところのループは、リストボックスに表示されている順に処理されますね。
        For i = 0 To .ListCount - 1

 それで、今は
 >リストボックスの上から順に 部署毎、年間L、年間Hで並んで
 いるので、名前を付けて保存する処理が
  部署毎→年間L→年間H
 の順で行われます。

 この順番の中に、月別M を入れ込むとすると、どこに入れば良いですか?

 (HANA)

 ご連絡遅くなりました! 

 >動かしてみてどうでしたか?
 はい、ブックがひらきました。

 >変数の値を確認しながら、ステップインで実行してみてくださいね。
 すみません(><)F8を押せばいいのでしょうか?

 >最初から目的のブックだけが開かれたなら、それでOKです。
 月別Mのブックは見当たらず、年間Lと年間Hだけ開いています。
 私の実行の仕方が悪かったかもしれません・・・ 

 >この順番の中に、月別M を入れ込むとすると、どこに入れば良いですか?
 年間Lの前でしょうか・・・ 
 部署毎→月別M→年間L→年間H

 (ミニー)

 >すみません(><)F8を押せばいいのでしょうか?
 あぁ、そうですね。

 コードを書いてある枠の白い部分にコードを書いていますね。
 その左側に、灰色の部分があると思います。
       If Dir(PastPath, vbDirectory) = "" Then
 の行の灰色の部分をクリックしてください。
   あるいは、この行にカーソルを置いて[F9]を押してください。
 茶色い●が付きます。

 コマンドボタン3 を押してコードを実行すると、この●を付けた行で一旦止まりますので
 その後 [F8] を押して、一行ずつ実行してください。

 >月別Mのブックは見当たらず、年間Lと年間Hだけ開いています。
 なんでですかね?
 変更前のコードでは少なくとも、年間L しか開かなかったと思いますが。。。??

 (HANA)

 >その後 [F8] を押して、一行ずつ実行してください。
 今更なんですけど・・・びっくりしましたぁ
 ちゃんと順番通りにコードが動いて、その対象のブックが開いて・・
 目に見えて確認できました!

 >変更前のコードでは少なくとも、年間L しか開かなかったと思いますが。。。??
 もしかして、またブック名でしょうか・・・(TT)

 月別Mのブックは"ABC_PL_海外別.xls"ですが、よく見ると似たような名前のブックが
 開いていました。そのブックが一番最初にひらいた後、年間Lのブックが開いています。
 "ABC_PL_日本別_海外別.xls"というブックです

 いま、Private Constの月別は、このようにしています。
 Private Const 月別M As String = "ABC_PL_海外別."
 (ミニー)


 >目に見えて確認できました!
 そうですね。
 その時に、それぞれの変数の値も確認しながら、一行ずつ実行してください。

 ご説明が正しければ、そのような事にはならないと思いますので。。。

 >"ABC_PL_日本別_海外別.xls"というブック
 が開くとき、Buf と MyFName には何が入っていますか?

 変数の中身は、カーソルを近くに持っていくと表示されます。
 難しければ、ローカルウィンドウを表示させて、確認してみて下さい。

 (HANA)

 >が開くとき、Buf と MyFName には何が入っていますか?
 Buf="ABC_PL_日本別_海外別."
 MyFName= "ABC_PL_日本別_海外別."

 でした。
 このブックがどーしても開きたいのですね笑
 なぜ"ABC_PL_海外別."よりも"ABC_PL_日本別_海外別."が選んでしまうのでしょうか

 (ミニー)

 >Buf="ABC_PL_日本別_海外別."
 でしたら、
 >月別M & "," & 年間L
 の中に「ABC_PL_日本別_海外別.」と言うのがあると思いますよ?

 >For Each Buf In Split(月別M & "," & 年間L,",")
 これの説明はもう良いですね?

 もう一度確認してみて下さい。

 (HANA)

 HANAさんすみません!

 >の中に「ABC_PL_日本別_海外別.」と言うのがあると思いますよ?
 私が見落としておりました。ごめんなさい!
 年間Lに"ABC_PL_日本別_海外別."が入っていました。

 ということは、月別Mが開いてないかもしれません。
 もう一度確認いたします

 (ミニー)

 >もう一度確認いたします
 そうですね。

 「月別M & "," & 年間L」を "," で区切った先頭から順に処理されます。
 ですから、一番最初に 月別M のブックが開かれるはずです。

 順番にも気をつけて確認してください。

 何がどの順で各変数に入り、どのブックが開かれるつもりのコードにしたのか。
 イメージしながら実行して下さい。
 すると、イメージ通り行っていない所が有ると思いますよ。

 「この値は○番目に変数に入るハズなのに、△番目に入ってくるのはなんでだ!!??」
 「全体で×回ループするハズなのに、□回しかループして無いぞ。」
 ってな感じで。

 (HANA)

 わかりました!

 >月別M & "," & 年間L」を "," で区切った先頭から順に処理されます。

  If Dir(PastPath, vbDirectory) = "" Then
 に茶色い●をつけて

 '年間リンクファイルOPEN
      For Each Buf In Split(月別M & "," & 年間L, ",")   
 の月別Mを直していませんでした。
 このせいで、月別Mが最初から開いてなかったのでしょうか。
 それを入れたら、ちゃんと月別Mのブックが開きました!

      'フォルダチェック&作成
      If Dir(PastPath, vbDirectory) = "" Then
        If MsgBox(PastPath & "フォルダがありません。" & vbCr & _
                  "フォルダを作成しますか?", vbYesNo) = vbYes Then
          MkDir PastPath
        Else
          MsgBox "キャンセルされました"
          Exit Sub
        End If
      End If
      '年間リンクファイルOPEN
      For Each Buf In Split(月別M & "," & 年間L, ",")       ←ここ"月別M"追加しました
        MyFName = Dir(CopyPath & "\*" & Buf & "*xls*")
        If MyFName = "" Then
            If MsgBox(Buf & "ファイルが有りません。" & vbCr & _
                        "続行しますか?", vbYesNo) = vbNo Then
                Exit Sub
            End If
        Else
            Workbooks.Open Filename:=CopyPath & "\" & MyFName, UpdateLinks:=0
        End If
      Next
      'ファイルコピー&リネーム
      With Me.ListBox1
        For i = 0 To .ListCount - 1
            For Each Buf In Split(月別M & "," & 年間L, ",")  ←ここ"月別M"追加しました
                If InStr(.List(i, 0), Buf) Then
                    Flg = True
                End If
            Next
            If Flg Then
                CopyProc .List(i, 0), PastPath & "\" & .List(i, 1), True
                Flg = False
            Else
                CopyProc CopyPath & "\" & .List(i, 0), PastPath & "\" & .List(i, 1), False
            End If
        Next i
      End With

 (ミニー)

 見つかりましたか!!

 > ほかのところを参考にして、Splitのところだけ変えました。
 の所に乗せておられる部分が、そのうえで私が参照した方でなかった
  私が載せたのは「'年間リンクファイルOPEN」の方
  ミニーさんが載せたのは「'ファイルコピー&リネーム」の方
 だったので、違和感はあったのですが、やはり下側だけを直していたのですね。

 コードを書いたとたんに、思った通りの動きをしてくれるものができれば良いですが
 多くの場合そんなにうまくはいきませんので、そんな感じで一行ずつ動かしながら
 どこが悪いのか確認&修正して下さい。

 さて、リンクがあるブックを コピー&リネーム処理が始まる前に開く段階までできました。
 次に、コピー&リネーム(名前を付けて保存)する順番ですが
 >>この順番の中に、月別M を入れ込むとすると、どこに入れば良いですか?
 >年間Lの前でしょうか・・・ 
 >部署毎→月別M→年間L→年間H
 この順番で良いですので、あとは どこを変更するのか? ですね。

 どこを変更すれば良いのか コードを眺めてみて下さい。

 (HANA)

 >だったので、違和感はあったのですが、やはり下側だけを直していたのですね。
 はい、ちゃんと考えればわかることでした(><) 

 >多くの場合そんなにうまくはいきませんので、そんな感じで一行ずつ動かしながら
 >どこが悪いのか確認&修正して下さい。
 はい、一行ずつ動かせる方法がわかったので確認できます(^^)

 >部署毎→月別M→年間L→年間H
 >この順番で良いですので、あとは どこを変更するのか? ですね。
 はい、上の流れで
 他の箇所にあるSplitのところも"月別M"追加かな。と最初に思ったんですが・・・

 '部署毎値更新
      With Me.ListBox1
        For i = 0 To .ListCount - 1
            For Each Buf In Split(年間L & "," & 年間H, ",")

 Private Sub SetFileList()の
 With Me.ListBox1
        For Each Buf In Split(年間L & "," & 年間H, ",")

 (ミニー)

 >他の箇所にあるSplitのところも"月別M"追加かな。と最初に思ったんですが・・・
 それで両方同時に直してしまったのでは「あてずっぽうで直した」感が強いので
 今問題にしている事を解決するためには どちらを直すべきか
 考えてみて下さい。

 (HANA)

 >今問題にしている事を解決するためには どちらを直すべきか考えてみて下さい。

 部署毎とSetFileListの両方直してみましたが、
 月別Mのブックを開くと年間Lのリンクが先月のままでした。
 部署毎の方かなと思ってやってみましたがやはりダメでした。
 順番は月別⇒年間L⇒年間Hでやっています。
 Buf In Split(月別M & "," & 年間L, "," & 年間H, ",")
 ・・・つまってしまいました。。

 (ミニー)

 あれ?
 >月別Mのブックは部署毎ブックをリンクしていて、年間Lのブックにリンクされています。
 ですよね?

 >月別Mのブックを開くと年間Lのリンクが先月のままでした。
 なんで、月別Mのブックを開いて 年間Lのリンクを見るのですか?
 月別Mのブックは、年間Lのブックをリンクしているのですか?

 「年間Lのリンクを開いて、月別Mのリンクが先月のまま」なら
 これまでのご説明と矛盾しませんが。

 (HANA)

 >月別Mのブックは部署毎ブックをリンクしていて、年間Lのブックにリンクされています。
 >ですよね?
 はい、そうです。
 年間Lの拠点別事業部別PLCR.xlsとリンクしています。

 > 月別Mのブックは、年間Lのブックをリンクしているのですか?
 えっ!!と思ってもう一度確認しましたら
 月別Mのブックはもうひとつのブック年間LのABC_PL.xls をリンクしていました。。
 申し訳ございません。。
 ここで指摘されるまで気がつきませんでした(TT)
 だからヘンだったんです。すみません

 (ミニー)

 でしたら、今4つのグループに分けていますが
 それを5つのグループに分けて順番を入れ替えるのが
 過去の話から考えると、簡単かもしれないですね。

 月別Mのブックが入ってきた事によって
 年間Lのブック群が二つのグループに分かれるのですよね?

 >部署毎の方かなと思ってやってみましたがやはりダメでした。
 と言う事は、最初は
 「SetFileListの方かな」
 と思われたのですよね?

 コードの動きとしては、そちらの変更で合っています♪
 今回は、思いがけないリンクがあったので あたかも間違っていた様な印象を受けましたが。。。|||

 目的の変更
  月別M,年間Lがリンクしている部署毎のブック
  年間Lがリンクしている月別Mのブック
 は、正しいものになっていると思います。

 【自分が何をさせようと思ったのか】きちんと意識していれば
 >月別Mのブックを開くと年間Lのリンクが先月のまま
 を見た時に
 「あれ?これって想定外だぞ」ってのに気付いたと思います。

 それに気づけるためにも、まずは自分をしっかり持ってください。
  何なら、紙に書きだしておいても良いと思います。
  そしたら何をさせようと思ったか思い出せますよね?
  今はまだ、いろいろな事を一度に考えておられると思いますので
  目的も見失いがちになるのは、仕方がない事である様にも思えます。
 コードの製作工程としては、既に細かい修正工程に入っていると思います。
 ですから、認識も同様に細かく行ってください。

 前半部分でも書きましたが、あまり考え方を変えない方が良いと思いますので
 変数を一つ追加して、変更してみて下さい。

 月別Mを追加しましたが、その復習だと思ってやってもらえれば良いと思います。

 (HANA)

 >年間Lのブック群が二つのグループに分かれるのですよね?
 はい、月別Mが入ったことでわかれました。 
 >「SetFileListの方かな」 と思われたのですよね?
 はい、間違っていたのかと思っていましたが
 あっててよかったです(><)

 >それに気づけるためにも、まずは自分をしっかり持ってください。
 はい、なんかうまくいかないともうパニックです。。

 >何なら、紙に書きだしておいても良いと思います。
 はい、順番とかすぐ混乱してしまうので紙にかいたりしてます(^^)

 >認識も同様に細かく行ってください。
 はい、とりかかってみます。
 変数を追加してまた結果をご報告します!

 (ミニー)

 なかなかうまくいかず、ご報告遅くなって申し訳ございません。
 やっぱり詰まってしまい・・・

 年間Lの2つのブックを、年間Pを追加してわけました。
 追加した年間Pが他のブックもリンクしています。 

 年間リンクファイルSplitにまず年間Pを追加しましたら
 型が一致しません。とメッセージがでました。
 これは、何が原因ででるものなのでしょうか(><)

 Option Explicit
 Private Const 初期フォルダ As String = "D:\test"
 Private Const 年間L As String = "ABC_PL."    '----リンク更新のみあるブック
 Private Const 年間P As String = "支店別海外別PLCR."    '----リンク更新とABC_PL拠点別とリンク
 Private Const 年間H As String = "客先別売上高.,海外別売上高.,支店別拠点別売上高."  '----リンク更新がないブック
 Private Const 月別M As String = "ABC_PL_拠点別."                   '------リンク更新とセル編集もする

 Private Sub CommandButton3_Click()
    Dim CopyPath As String
    Dim PastPath As String
    Dim CopyFile As String
    Dim PastFile As String
    Dim i        As Long
    Dim ws       As Worksheet
    Dim MyFName  As String
    Dim Buf      As Variant
    Dim Flg      As Boolean
    CopyPath = Me.TextBox1.Value
    PastPath = Me.TextBox2.Value
       If CopyPath = "" Or PastPath = "" Then
      MsgBox "フォルダが指定されていません"
    Else
      'フォルダチェック&作成
      If Dir(PastPath, vbDirectory) = "" Then
        If MsgBox(PastPath & "フォルダがありません。" & vbCr & _
                  "フォルダを作成しますか?", vbYesNo) = vbYes Then
          MkDir PastPath
        Else
          MsgBox "キャンセルされました"
          Exit Sub
        End If
      End If
      '年間リンクファイルOPEN
      For Each Buf In Split(月別M & "," & 年間L, "," & 年間P, ",")
        MyFName = Dir(CopyPath & "\*" & Buf & "*xls*")
        If MyFName = "" Then
            If MsgBox(Buf & "ファイルが有りません。" & vbCr & _
                        "続行しますか?", vbYesNo) = vbNo Then
                Exit Sub
            End If
        Else
            Workbooks.Open Filename:=CopyPath & "\" & MyFName, UpdateLinks:=0
        End If
      Next

 (ミニー)

 >年間リンクファイルSplitにまず年間Pを追加しましたら
 >型が一致しません。とメッセージがでました。

 ↓の行の事ですよね?
 Split(月別M & "," & 年間L, "," & 年間P, ",")
 変な所に , がありますが。~こんな所に!!

 とりあえずこの部分を直してみるとどうでしょう?
 Split( 文字列 , 区切り文字 )
               ~ , は一つです。
 たくさんある様ですが、"," は 文字列を作る "," ですよね。
 文字列と文字列をくっつけるときは & を使って下さい。

 (HANA)


 >変な所に , がありますが。~こんな所に!!
 あっ!ホントですね(><)!!
 小さいのでぜんぜん気がつきませんでした・・・

 >とりあえずこの部分を直してみるとどうでしょう?
 直してみたところ、最後までとまることなくいきましたが
 新しくできたブックを確認してみると、ABC_PLの中の
 部署毎のリンクが更新されていませんでした。
 追加したところの順番が違うのですね・・・(−−;)

 なかなか一回ではうまくいきませんが、もうちょっとがんばってみます

 (ミニー)

 すいません、HANAさん。。
 考えてみましたが、やはり私ではうまくいきません・・・

 年間Pの順番はこれでいいでしょうか?
 部署毎→月別M→年間P→年間L→年間H

 作成できた翌月フォルダのブックを確認したところ
 リンク更新ができてないブックが2つありました。
 月別M(ABC_PL_拠点別)のブック  ・・・リンク年間Lのブックだけ先月のまま更新されていない(ABC_PL.xls)
 年間P(支店別海外別PLCR)のブック・・・リンク月別Mのブックだけ先月のまま更新されていない(ABC_PL_拠点別.xls)

 私がSplitの手を加えたところです↓

 '年間リンクファイルOPEN
  For Each Buf In Split(月別M & "," & 年間P & "," & 年間L, ",")

 'ファイルコピー&リネーム
      With Me.ListBox1
        For i = 0 To .ListCount - 1
            For Each Buf In Split(月別M & "," & 年間P & "," & 年間L, ",")

 '部署毎値更新
      With Me.ListBox1
        For i = 0 To .ListCount - 1
            For Each Buf In Split(年間P & "," & 年間L & "," & 年間H, ",")

 'SetFileList
   Private Sub SetFileList()
	    For Each Buf In Split(月別M & "," & 年間L & "," & 年間H, ",")

 やはり順番でしょうか。。

 (ミニー)


 >年間Pの順番はこれでいいでしょうか?
 >部署毎→月別M→年間P→年間L→年間H
 良くないと思いますよ?

 とりあえず、どのブック群がどのブック群を参照(リンク)しているのか
 整理してみてもらえますか?

 (HANA)

 HANAさま
 遅くなりましてすみません。
 最近めっきり寒くなったのでカゼを引いておりました…

 >>部署毎→月別M→年間P→年間L→年間H
 >良くないと思いますよ?
 まとめてみました。
 月別M→年間P→年間Lこのあたりが混乱します

 年間L…月間Mと部署毎をリンク
 月間M…年間Lのうち1つのブックをリンク セルの編集も必要
 年間P…月間Mと部署毎をリンク
 年間H…リンク更新なし、作業対象外
 部署毎…リンク更新なし

 (ミニー)

 えっと・・・
 >月間M…年間Lのうち1つのブックをリンク
 月間Mのブックと、年間Lのうち1つのブックは
 相互にリンクがあるのですか?

 ブックのグループ毎に、各変数に分けてもらったと思いますが。。。??

 (HANA)

すみません(><)!
 相互リンクはありません、書き間違えてしまいました。

 年間L…月間Mと部署毎をリンク
 月間M…年間Pをリンク セルの編集も必要
 年間P…月間Mと部署毎をリンク
 年間H…リンク更新なし、作業対象外
 部署毎…リンク更新なし

 (ミニー)

 月間Mと年間Pが相互にリンクがあるのですか?

 (HANA)

 HANAさんすいません。
 私がちゃんと把握しきれてませんでした。
 もう一度まとめます。

 年間Lのうちひとつのブックが月間Mと相互リンクしていました。

・年間L ABC_PL・・・月間Mと部署毎リンク
・年間L ABC_PL_事業部・拠点別.xls・・・部署毎リンク
・月間M・・・年間LのABC_PLとリンク、部署毎リンク、セルの編集が必要
・年間P・・・月間Mと部署毎がリンク

 あと、ちょっとさかのぼるのですが、
 ブック内の"月を"関数で対応することにしたのですが。
 11月を作ると、翌々月のところが13月になってしまいました。
 この式ではダメなんでしょうか・・・

 前月=(MOD(SUBSTITUTE($F$5,"月","")-2,12)+1)&"月"
 当月(F5セル)=SUBSTITUTE(MID(CELL("filename",$A$1),FIND("[",CELL("filename",$A$1))+1,2),"月","") & "月"
 翌月=(MOD(SUBSTITUTE($F$5,"月",""),12)+1)&"月"
 翌々月=(MOD(SUBSTITUTE($F$5,"月",""),12)+2)&"月"

 (ミニー)

 >年間Lのうちひとつのブックが月間Mと相互リンクしていました。
 そしたら、処理する順番を混乱しても仕方ないですね。

 >私がちゃんと把握しきれてませんでした。
 こんな事があると、いつまでたっても解決できませんし
 考えた時間すべてが無駄になる事もあると思いますので
 一番気を付けて下さいね。
  今回は、私が「どうなってんの?」って思えたので良かったですが。。。

 間違った結論や、それに至るまでに思考に引きずられて、
 良い結論が出せなくなってしまう事は 多々あると思いますので。

 で、既にそんな状況になっていると思うのですが
 コードがここまで出来ているので、まぁ 仕様がないかな。
 って事で、現在のコードを変更でいける所まで行ってみようと思います。

 最初からこの条件がでていたら、
 momoさんは、別のコードを組み立てておられたかもしれません。
 そう考えると、完成したコードは「良い結論」ではないと思いますので
 その点は念頭に置いておいてください。

 さて、相互にリンクしているなら
 現在は ファイルコピー&リネーム の中に「ブックを閉じる」がありますが
 部署毎ブック以外は すべての ファイルコピー&リネーム が終わるまで 閉じない方が良さそうです。
 ファイルコピー&リネーム の処理中は、名前を付けて保存だけを行い(フラグがTRUEのブックは CLOSE しない)
 値更新をする前に、再度上書き保存して閉じる事にしてはどうでしょう。

 この処理は本来該当の二つのブックだけで良いと思いますが
 面倒なので、リンクファイル全て同じ処理にしても良いと思います。

 >11月を作ると、翌々月のところが13月になってしまいました。
 >この式ではダメなんでしょうか・・・
 はい、残念ながら。。。
 翌々月のセルは、翌月のセルの+1月後 にして下さい。

 A1セルに 1 A2セルに =A1+1 として下方向にフィルドラッグ
 B1セルに =MOD(A1,12) として下方向にフィルドラッグ
 C1セルに =B1+1 として下方向にフィルドラッグ
 D1セルに =B1+2 として下方向にフィルドラッグ

 24行程度フィルドラッグして、結果と仕組みを確認してください。

 (HANA)


 >こんな事があると、いつまでたっても解決できませんし
 はい、本当にそうです。。
 すみません。

 >って事で、現在のコードを変更でいける所まで行ってみようと思います。
 はい、これからもご指導お願いします。 

 >最初からこの条件がでていたら、
 >momoさんは、別のコードを組み立てておられたかもしれません。
 変更変更で、当初に比べてだいぶ変わってきてしまいました・・・ 

 >その点は念頭に置いておいてください。
 こちらのせいなので大丈夫です。

 >値更新をする前に、再度上書き保存して閉じる事にしてはどうでしょう。
 はい、それでやってみたいと思います。
 ご説明頂いたことをちょっと紙に書いて該当のブックを書いて
 みます(−−;) 

 >翌々月のセルは、翌月のセルの+1月後 にして下さい。
 直したところ、できました!
 どうしても当月のところだと、+1の部分を調整しても
 全然答えがでなかったのでかなり悩みました。

 >D1セルに =B1+2 として下方向にフィルドラッグ
 D11セルが13になりました。
 私がわからなかったのはここですよね。
 わかりやすくありがとうございました!解決できました(^_^)  

 (ミニー)

 コードの変更箇所ですが

 一つは CommandButton3_Click で
   1.フォルダチェック&作成
  2.年間リンクファイルOPEN
  3.ファイルコピー&リネーム
   4.部署毎値更新
 の処理をしていますが、3−4の間に
  3.5.年間リンクファイル上書き保存して閉じる
 を入れます。

 もう一つは CopyProc で
    With wb
      .SaveAs SavePath
      .Close False
    End With
 全てのwbで 名前を付けて保存していますが
 Flgが、Falseのものだけ、「.Close False」 をします。

 何回も判定するのは面倒なので Set wb = ○○ の所に
 入れ込んでしまって良いかもしれません。

    Application.DisplayAlerts = False
    If Flg Then
        Workbooks(OpenPath).SaveAs SavePath
    Else
        Set wb = Workbooks.Open(OpenPath, UpdateLinks:=0)
        wb.SaveAs SavePath
        wb.Close False
    End If
    Application.DisplayAlerts = True

 (HANA)

HANAさん

ご連絡遅くなってすみません。

もう少し、ちゃんと考えて結果ご報告しますので
お待ちいただけますか?
また先走ってご迷惑かけてしまうので(><)

明日またご連絡します!


 >3−4の間に3.5.年間リンクファイル上書き保存して閉じるを入れます。
 いろいろ悩んだのですがどのようにすればいいのか
 結局わかりませんでした。。 すみません(><)

 3、4の間に入れるコードは、どのようにしたらいいのでしょうか。

 >もう一つは CopyProc で
 ここは、HANAさんのご説明でわかりました。 
 Set wb = Workbooks.Openのところは
 Flgがないものは、ワークブックを開いてリンクを更新せずに
 保存して閉じるでしょうか。

  Private Sub CopyProc(OpenPath As String, SavePath As String, Flg As Boolean)
    Dim wb As Workbook
    If Flg Then
        Set wb = Workbooks(OpenPath)
    Else
        Set wb = Workbooks.Open(OpenPath, UpdateLinks:=0)
    End If
    Application.DisplayAlerts = False
    If Flg Then
        Workbooks(OpenPath).SaveAs SavePath
    Else
        Set wb = Workbooks.Open(OpenPath, UpdateLinks:=0)
        wb.SaveAs SavePath
        wb.Close False
    End If
    Application.DisplayAlerts = True
  End Sub

 (ミニー)

 >いろいろ悩んだのですがどのようにすればいいのか
 >結局わかりませんでした。。 すみません(><)
 全体像が分からないのか
 実際にコードにする部分がわからないのか

 どちらでしょう?

 リストボックスに表示されているブックを上から順に確認して
 部署毎のブックなのか、年間のブックなのか判断するコードは
 既に使っています。

 上書き保存して閉じる作業も、ありますよね。

 ですから、こんなので行けるんじゃないかと思いますが
      With Me.ListBox1
        For i = 0 To .ListCount - 1
            For Each Buf In Split(月別M & "," & 年間L & "," & 年間H, ",")
                If InStr(.List(i, 0), Buf) Then
                    Workbooks(.List(i, 1)).Save
                    Workbooks(.List(i, 1)).Close False
                End If
            Next
        Next i
      End With
 動かしてないので、やってみてもらえますか。

 CopyProcに関しては、載せておられるコードを動かすつもりなら
 もう一度コードを読み直してください。
 上側の If〜End If は いらないですよね。

 (HANA)


 >どちらでしょう? 
 実際のコードがわかりませんでした。
 でもHANAさんが書いてくれたものを
 3.ファイルコピー&リネームの下にいれました。

 > 動かしてないので、やってみてもらえますか。
 やってみたところ・・・

 CopyProcの
        Workbooks(OpenPath).SaveAs SavePath
 でとまってしまいました。。
 上のブックの順番が違うのでしょうか

 >上側の If〜End If は いらないですよね。
 はい、消しました!


 う〜ん、それだけの説明だと 何が悪いのかわからないですよね。

 (HANA)

 デバックのダイアログがでたときに、
 いくつかのブックが開いたまま残っています。

 多分私のブックを閉じる順番だとかが違うんだと思います。
 もう少し原因を考えてみます。

 (ミニー)


 HANAさま

 順番を変えてやってみたのですが、やはりCopyProcでのところで
 とまってしまいます。。
 他に原因が見たりません・・・(><)

 ・年間L ABC_PL・・・月間Mと部署毎リンク 
 ・年間L ABC_PL_事業部・拠点別.xls・・・部署毎リンク 
 ・月間M 年間LのABC_PLとリンク、部署毎リンク、セルの編集が必要 
 ・年間P 月間Mと部署毎がリンク 
 ・年間H リンク更新等何もない
 --------------------------------------
 今のこんなカンジで順番を書いています。

 Option Explicit
 Private Const 初期フォルダ As String = "D:\test"
 Private Const 年間L As String = "ABC_PL.,ABC_PL_事業部・拠点別.xls" 
 Private Const 年間P As String = "支店別海外別PLCR."   
 Private Const 年間H As String = "客先別売上高.,海外別売上高.,支店別拠点別売上高." 
 Private Const 月別M As String = "ABC_PL_拠点別." '------リンク更新とセル編集もする 

 '2.年間リンクファイルOPEN
      For Each Buf In Split(月別M & "," & 年間P & "," & 年間L, ",")

 '3.ファイルコピー&リネーム
      With Me.ListBox1
        For i = 0 To .ListCount - 1
            For Each Buf In Split(月別M & "," & 年間P & "," & 年間L, ",") 

  '4年間リンクファイル上書き保存して閉じる
      With Me.ListBox1
        For i = 0 To .ListCount - 1
            For Each Buf In Split(年間L & "," & 年間P & "," & 年間H, ",")

  '5.部署毎値更新
      With Me.ListBox1
        For i = 0 To .ListCount - 1
            For Each Buf In Split(年間P & "," & 年間L & "," & 年間H, ",")

 (ミニー)

 えっと、一行ずつ実行して
 変数の内容や開いているブック等を見ながら
 どこが思った通りになっていないか確認して下さい。

 今回はコードも変更していますので
 それ自体に問題があるのかもしれません。

 エラーになった時ミニーさんは
  エクセルが出してきたエラーメッセージを読んでいますよね?
  何のブックの処理をしようとした時だったか 確認できますよね?
  どのブックが開いたままになっているか 見れますよね?
 そのあたりが重要なんですけど、どうなっているか書かれていないので

 >それだけの説明だと 何が悪いのかわからないですよね。
 って返信になってしまいます。

 (HANA)

 >どこが思った通りになっていないか確認して下さい。
  わかりました!
 もう一度確認んして、エラーのところご報告します。
 (ミニー)

>エクセルが出してきたエラーメッセージを読んでいますよね?
 はい、エラーメッセージは、"インデックスが有効範囲にありません。"でした。

 >何のブックの処理をしようとした時だったか 確認できますよね?
 はい、ブックをコピーして、翌月のファイル名にする途中だったみたいです。
 デバックを押すと、
 CopyProcの
        Workbooks(OpenPath).SaveAs SavePath が部分が黄色くなっています。

'3.ファイルコピー&リネーム

      With Me.ListBox1
        For i = 0 To .ListCount - 1
            For Each Buf In Split(月別M & "," & 年間P & "," & 年間L, ",")  
                If InStr(.List(i, 0), Buf) Then
                    Flg = True
                End If
            Next
            If Flg Then
                CopyProc .List(i, 0), PastPath & "\" & .List(i, 1), True
                Flg = False
            Else
                CopyProc CopyPath & "\" & .List(i, 0), PastPath & "\" & .List(i, 1), False
            End If
        Next i
      End With

 >どのブックが開いたままになっているか 見れますよね?
 年間L、年間P、月別Mのブックが開いたままになっていました。
 年間Lは前月のブック名のままで、年間Pと月別Mは今月のブック名になっていました。
 ブックの中のリンクブックは全部今月のものに更新されていました。
 ここが原因で、Copyprocでとまるのは、ブックが開いているから保存できない
 ということなのでしょうか??

 (ミニー)


 >"インデックスが有効範囲にありません。"
 これは、指示したブックとかシートとかが無い時に表示されるメッセージです。

 >Workbooks(OpenPath).SaveAs SavePath が部分が黄色くなっています。
 変数が二つありますね。
 それぞれ何が入っていますか?

 >>何のブックの処理をしようとした時だったか 確認できますよね?
 この確認です。
 変数の中身はこちらからは見えませんので
 ミニーさんから率先して教えてもらえると良いのですが。

 (HANA)

 お待たせして申し訳ございません!

 >これは、指示したブックとかシートとかが無い時に表示されるメッセージです。
 そうなんですね。
 何かが見当たらないのですね(TT)

 >変数が二つありますね。
 それぞれ何が入っていますか?
 OpenPathとSavePathのところでよかったでしょうか。
 OpenPath=前月ABC_PL.xlsと書いてありました
 SavePath=多分ファルダの場所だと思います。
 (保存場所が長くて途中で切れていたのですが、全部表示できますか?)

 (ミニー)

 >お待たせして申し訳ございません!
 そうですね。なるべく早く決着をつけたい所です。

 >(保存場所が長くて途中で切れていたのですが、全部表示できますか?)
 何で確認しましたか?

 ローカルウィンドウやイミディエイトウィンドウで確認できると思いますが。

 イミディエイトウィンドウでは
   ? SavePath
 と入力して Enter して確認して下さい。

 ただ、今回のエラーは 指示したブックが無い時に表示されていると思いますので
 まずはエラーが起きて止まった時点で「前月ABC_PL.xls」が開いているか確認して下さい。

 開いている場合は、どうしてエクセルは開いていないと思っているのか。
 開いていない場合は、どうして開いていないのか。
 調査が必要です。

 (HANA)

 そうですね。なるべく早く決着をつけたい所です。
 >時間がかかってしまって本当にすみません(><)

 >何で確認しましたか?
 OpenPathの上を選択したときに、小さくでました。

 >イミディエイトウィンドウでは? SavePath と入力して Enter して確認して下さい。
 初めて使ってみました!
 フォルダではなく今月のABC_PL.xlsのブックでした!

 >まずはエラーが起きて止まった時点で「前月ABC_PL.xls」が開いているか確認して下さい。
 たしかに開いてなかったです

 >開いていない場合は、どうして開いていないのか。
 ABC_PL.xlsは年間Lなのですが、順番がいけないのでしょうか。。
 全然自信がないのですけど・・
 For Each Buf In Split(月別M & "," & 年間P & "," & 年間L, ",") 

 (ミニー)


 リンクのあるファイルを事前に開くところがありますよね?
 ですから、まずはそこできちんと開いているか確認して下さい。

 Bufで意図したブックが MyFNameに入っているか です。
  Private Const 月別M As String = "ABC_PL_拠点別."
  Private Const 年間P As String = "支店別海外別PLCR."
  Private Const 年間L As String = "ABC_PL.,ABC_PL_事業部・拠点別.xls"
 でしたら、4回ループしますよね?

 3回目のループが 今問題になっているブックです。
 Buf に「ABC_PL.」が入っている時
 MyFNameに「前月ABC_PL.xls」が入ったら
 今問題になっているブックは開かれるはずです。

 ちなみに、その後ろの「ABC_PL_事業部・拠点別.xls」は開いているんでしょうか。。。?
 また、年間ブックを開く処理が済んだ時点では 意図しないブックが開かれている なんで事も無いでしょうか?

 年間ブックを開く所で開いているのに 問題の箇所に差し掛かると開いていない場合は
 どこかで閉じられているので 今度はどこで閉じられているのか 一行ずつ実行しながら確認してみて下さい。

 (HANA)

 >ですから、まずはそこできちんと開いているか確認して下さい。
 確認しているときに気がついたのですが、
 私が以前教えていただいた月の関数を確認するのに
 同じフォルダ内に11月と12月のABC_PL.xlsのが存在していました。
 それを削除したところ、エラーがでなくなりました。
 すみません・・・

 次にとまってしまったのが
 '4年間リンクファイル上書き保存して閉じる
  Workbooks(.List(i, 1)).Save
  のところで、Bufのところをさしてみると年間Hのブック
  "客先別売上高."とでていました。
 このとき月別MのABC_PL_拠点別.xlsだけが開いた状態でした。
 インデックスが有効範囲にありません。だったので
 やはり先ほどと同じ原因ですよね。。
 HANAさんのご説明とかがないともうサッパリです(TT)

 >でしたら、4回ループしますよね?
 >3回目のループが 今問題になっているブックです。
 HANAさんはブックもないのに、なぜ4回とか3回めとかがわかるんですか?
 私なんて見てもわからないのに・・・(T_T)

 (ミニー)


 >確認しているときに気がついたのですが、
 >同じフォルダ内に11月と12月のABC_PL.xlsのが存在していました。
 そうそう、これ 気づけるのが大切ですよb

 コードが上手に書けるかどうかは、気づけるかどうかにかかってますからね。

 年間ファイルを開くときに「12月ABC_PL.xls」が開いて欲しいのに
 思いがけず「11月ABC_PL.xls」が開いてしまっていたのですよね?

 そしたら、ブックを開くループの所で
 Buf が「ABC_PL.」の時
 MyFNameは「12月ABC_PL.xls」になって欲しいのに「11月ABC_PL.xls」になっていたはずです。
  ・・・・11月と12月は逆かもしれないですが・・・・

 こういう所を【気づいて】下さい。

 何のブックを開きたいか、自分ではわかっているハズなので。
  エクセル君は、ミニーさんが何のブックを開いて欲しいと思っているのか わかってないですよ。
  相手が人だと、察してくれて話も早いんですけどねぇ。。。

 >次にとまってしまったのが
 >'4年間リンクファイル上書き保存して閉じる
 同じですね。
 >"客先別売上高."とでていました。
 って事は 年間Hのブックを処理しようとしています。

 でも、開きっぱなしにしてないですよね?年間Hのブックは。
 ↓のコードで指定しているのが、最初に開いておくブック。
 '2.年間リンクファイルOPEN
      For Each Buf In Split(月別M & "," & 年間P & "," & 年間L, ",")
 なので
 月別M,年間P,年間L のブックだけ 最初に開いて・最後に閉じる。

 年間Hは、リンク更新しなくて良いから 処理中ブックを開いておかなくても良いブックですよね?
  ・・・・なんか、色々変更になっているので コメントと実状が離れているのも混乱の元かもしれないですが・・・

 >'2.年間リンクファイルOPEN
 で開いたブックを上書き保存して閉じて下さい。

 その他のブックは「'3.ファイルコピー&リネーム」の中で 開かれて閉じられて ますので
 この部分では、気にしなくても大丈夫です。

 >HANAさんはブックもないのに、なぜ4回とか3回めとかがわかるんですか?
 >私なんて見てもわからないのに・・・(T_T)
 えぇぇっ。TT

 前スレでやったじゃないですか。
    Sub TEST1()
        For Each Buf In Split("りんご,ばなな,みかん,なし", ",")
            MsgBox Buf  '      ~~1~~~ ~~2~~~ ~~3~~~ ~~4~
        Next
    End Sub
 「みかん」は3回目のループで Buf に入りますよね?

 使っておられるコードだと
 For Each Buf In Split(月別M & "," & 年間P & "," & 年間L, ",") 
  "ABC_PL_拠点別.,支店別海外別PLCR.,ABC_PL.,ABC_PL_事業部・拠点別.xls"
   ~~1~~~~~~~~~~~ ~~2~~~~~~~~~~~~~~ ~~3~~~~ ~~4~~~~~~~~~~~~~~~~~~~~~~
 ほら、3番目に「ABC_PL.」があるから、4回のループの内の3回目って。。。

 (HANA)

 >そうそう、これ 気づけるのが大切ですよb
 なかなかヒントがでるまで気がつけずすみません。
 自分が何かやっちゃってる、というのはわかるんですけど(^^;)

  >こういう所を【気づいて】下さい。
 はい、がんばります!

 >でも、開きっぱなしにしてないですよね?年間Hのブックは。
 はい、上書き保存して閉じちゃってました。 

 >年間Hは、リンク更新しなくて良いから
 処理中ブックを開いておかなくても良いブックですよね?

 ここに年間Hが入っているから
 ブックがないってエクセルは言ってたんですね〜
 年間Hとってみたら、エラーがなくなり最後まで終わりました!

 '4年間リンクファイル上書き保存して閉じる
     With Me.ListBox
        For i = 0 To .ListCount - 1
            For Each Buf In Split(年間L & "," & 年間P, ",")

 >'2.年間リンクファイルOPEN
 >で開いたブックを上書き保存して閉じて下さい。

 For Each Buf In Split(月別M & "," & 年間P & "," & 年間L, ",")
 このブックを上書きして保存は、どのようにすればいいでしょうか
  SaveとClose ですよね?Elseの前でしょうか(??)

 >前スレでやったじゃないですか。
 はい、説明して頂いていますが、ブックもなく突然エラーで
 とまってしまったら・・・私だったらもう頭まっしろで
 原因がすぐわかりません(TT)

 >ほら、3番目に「ABC_PL.」があるから、4回のループの内の3回目って。。。
 ありがとうございます!
 はい、HANAさんのご説明とてもわかりやすいです(^^)

 (ミニー)

 >ブックもなく突然エラーでとまってしまったら・・・
 もう少しいろいろ作ってたら、エラーが出た時の印象も変わってくると思います。
 無事に動くコードが完成したら
 もっと小さい(ちょっと便利になる)マクロを
 たくさん作ってみられると良いと思います。

 >このブックを上書きして保存は、どのようにすればいいでしょうか
 に関しては、ちょっと意図が伝わってなかった様です。

 '2.年間リンクファイルOPEN の時に「月別M & "," & 年間P & "," & 年間L」のブックを処理(開く)しましたので
 '4年間リンクファイル上書き保存して閉じる の時も同じブック「月別M & "," & 年間P & "," & 年間L」を
 処理(上書き保存して閉じる)して下さい。

 >年間Hとってみたら、エラーがなくなり最後まで終わりました!
 の時点で For Each Buf In Split(年間L & "," & 年間P, ",") となっていたなら
 これだと 「年間L & "," & 年間P」のブックしか処理してないですよね?
 なので、月間M に指定したブックは 開いたままになってるんじゃないかと思いますが??

 (HANA)

 >なので、月間M に指定したブックは 開いたままになってるんじゃないかと思いますが??
 それが、再度やってみたのですが残ってるブックはないみたいです・・・
 またわたしがどこかで何かしちゃってるかもしれません 

 >'4年間リンクファイル上書き保存して閉じる の時も同じブック「月別M & "," & 年間P & "," & 年間L」を
 処理(上書き保存して閉じる)して下さい。

 理解できずにすみません!
 年間リンクファイル上書き保存して閉じるのspiltの部分直してみました。
 エラーもでずに、作業完了までいきました(^^)
 中身はこれからみますので、またご報告します!

 (ミニー)

 ブック確認しました!

 リンクの更新も翌月にちゃんとなっていました。
 セルの値貼り付けなどの編集もうまく行っていました!

 私の確認もれなどがないか、もうすこし確認してみますのでまたご報告します。

 もしかしてゴールはもうすぐでしょうか(^^)

 (ミニー)

 えっと、気になるので 月別Mがどこで閉じられるのか
 確認してみてもらえますか?

 後は、シートの値更新の方でも何か問題が無かったでしたっけ?

 問題が見つかるのは早い方が良いので、いろいろ試してみて下さい。

 (HANA)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.