アプリ版:「スタンプのみでお礼する」機能のリリースについて

あるYというフォルダ内にエクセルファイルが複数入っています。
Xという別のエクセル(データベース)があり、A列(A2~Axx)にYフォルダ内に入っているエクセルファイル名が記載しており、そのファイルを上から順に開き、ある処理をしたあとZというファルダに保存することを繰り返します。その際、A列に同じ名前のファイルもある(同じ名前のものでも処理が異なる。Xのエクセルファイルの行の方でコントロール)ため、一度処理したものの場合、上書き、もしくはエラー?になってしまう?と思われる為、同じファイルの処理の場合、エクセルファイル名の後ろに-1、-2、-3・・・・みたいな感じで保存したいのですが、そのようなことは可能でしょうか?

A 回答 (2件)

Countifを使って処理中のファイルと同名ファイルが前にいくつあったか調べ、1個あったら-1、


2個あったら-2を追加します。

Sub Macro1()

Dim YFolder As String
Dim ZFolder As String
Dim myName As String, myExtension As String, dup As Long
Dim i As Long

YFolder="Yフォルダパスと¥マーク"
ZFolder="Zフォルダパスと¥マーク"

With Activesheet
For i=2 To .Cells(.Rows.Count, "A").End(xlUp).Row
Workbooks.open filename:= YFolder & Cells(i,"A").Value


'何らかの処理


'保存ファイル名の決定
dup=WorksheetFunction.Countif(Range("A2", .Cells(i-1,"A")),.Cells(i,"A").Value)
If i>2 And dup>0 Then
myName=Sprit(.Cells(i,"A").Value,".")(0)
myExtension=Sprit(.Cells(i,"A").Value,".")(1)
SaveFileName=ZFolder & myName & "-" & dup & "." & myExtension
Else
SaveFileName=ZFolder & .Cells(i, "A").Value
End If

’保存
Workbooks(.Cells(i,"A").Value).SaveAs filename:=SaveFileName
Workbooks(.Cells(i,"A").Value).Close
Next i
End With
End Sub
    • good
    • 0

> そのようなことは可能でしょうか



それなりの処理を記述すれば可能です。

A列には拡張子を含むファイル名が入っていると仮定します。
( . の数は問わない)

以下は1つのファイル名を求めるだけのものです。
同じ処理を何回実行しても、同じファイル名にはならないと思います。
(求めたファイル名で随時ファイルを作成していたらの話ですけど・・・)

  Z = "D:\Hogehoge\"

  sA = Cells(2, "A").Value
  i = InStrRev(sA, ".")
  sC = Mid(sA, i)
  sA = Z & Left(sA, i - 1)
  sB = ""
  i = 1
  While (Dir(sA & sB & sC) <> "")
    sB = "-" & i
    i = i + 1
  Wend
  sA = sA & sB & sC


> 同じ名前のものでも処理が異なる
のなら、
>  sA = Z & Left(sA, i - 1)
部分で処理パターンを示すものを付加しても良いかも
  sA = Z & Left(sA, i - 1) & "_処理A"
とか
  sA = Z & "処理A_" & Left(sA, i - 1)
とかとか
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!