• 締切済み

セレクトしたセルをファイル名におこす

同じフォームの複数のファイルがあり、セレクトしたセルをファイル名におこします。 Const BeforePath = "C:\Documents and Settings\Administrator\デスクトップ\test" Const AfterPath = "C:\Documents and Settings\Administrator\デスクトップ\test\変更後\" Sub FileNameChange() Dim fso Set fso = CreateObject("Scripting.FileSystemObject") Application.ScreenUpdating = False Dim fl For Each fl In fso.GetFolder(BeforePath).Files If InStr(LCase(fl.Name), ".xls") > 0 Then With Workbooks.Open(fl.Path) .SaveAs AfterPath & Range("sheet1!A1") & "-" & Range("sheet1!D5") & ".xls" .Close End With End If Next Application.ScreenUpdating = True End Sub この時、D5のセルに入っているのは、ユーザ定義の日付で設定された日付(2011/2/1)です。 このマクロを実行すると、エラーが出ます。 ユーザ定義の日付は拾えないのでしょうか?

みんなの回答

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.5

この程度の短いコードは、コードだけで問題なく読めますが、本当に解決したのなら良いけれども、どう読んでも、エラーの部分は、日付で発生しても、問題それだけではないと思います。 >同じフォームの複数のファイルがあり、セレクトしたセルをファイル名におこします。 ループしているのに、セルが固定しているようですね、一回きりにともかく、複数のファイルで出来るのですか?上書きされませんか?  .SaveAs AfterPath & Range("sheet1!A1") & "-" & Range("sheet1!D5") & ".xls" それと、実際すでに保存しているファイルを別のフォルダにコピーして名前を変えるだけではないでしょうか? 以下は、すでに、同じファイル名がある時は、飛ぶように出来ています。Dirを二重に使えないので、FileExists を利用しています。 Sub FileNameChange2()  Dim fn As String  Dim newFn As String  Dim i As Long  Dim fso As Object  Set fso = CreateObject("Scripting.FileSystemObject")   Const BeforePath = "C:\Documents and Settings\Administrator\デスクトップ\test"   Const AfterPath = "C:\Documents and Settings\Administrator\デスクトップ\test\変更後\"    i = 1  fn = Dir(BeforePath & "*.xls", vbNormal)    Do While fn <> ""   On Error Resume Next   With Worksheets("Sheet1") 'ActiveBookのシート1    '日付名は、適当に変えてください。    newFn = Format$(.Cells(i, 1).Value, "yymmdd") & "-" & Format$(.Cells(i + 4, 4).Value, "yymmdd") & ".xls"   End With   On Error GoTo 0   If Len(newFn) > 5 Then '名前が取れていることを条件にする     If fso.FileExists(AfterPath & newFn) = False Then 'コピー先に同名ファイルがないこと     FileCopy BeforePath & fn, AfterPath & newFn     i = i + 1 'カウンタ加算    End If   End If   fn = Dir()  Loop  Set fso = Nothing End Sub

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.4

日付の行でエラーが出るようだったら、質問のような長いコード全体を質問に書く必要ないのじゃない。 回答者は読むのに苦労するし、焦点がぼやける。、 A1に色んな日付を入れて下記やってみたら判るとおもう。 Format関数で書式を文字列化して整えるのは常識。 Sub TEST01() MsgBox "AA" & Range("A1") MsgBox Format(Range("A1"), "ggge年mm月dd日") MsgBox Format(Range("a1"), "yymmdd") MsgBox Format(Range("a1"), "eemmdd") End Sub 2番目は挙げてみただけ。 三番か4番目が6桁でそろい良いのでは。 ーーー / ¥は不可。ハイフンも、Googleで「ファイル名 ハイフン」で照会すると、フォルダ名、ファイル名で不都合事例が出ているので、場合によっては注意。

micchi5555
質問者

お礼

有難うございました。 おかげさまで出来ました。

回答No.3

>ユーザ定義の日付は拾えないのでしょうか? VBAでは日付型として扱われるため(文字列で渡されるわけではないため)、表示書式を変更することに意味はありません。 下のいずれかの方法によって / を取り除いてください。 (A)置換処理 replace(Range("sheet1!D5"), "/","") => 20110205.xls (B)書式処理 format$(Range("sheet1!D5"), "yyyy年mm月dd日") => 2011年02月05日

micchi5555
質問者

お礼

有難うございました。 おかげさまで出来ました。

  • NNori
  • ベストアンサー率22% (377/1669)
回答No.2

ファイル名に / が入るからエラーになってしまうのではないでしょうか。 年月日を/抜きにすればよいかと。

  • edomin7777
  • ベストアンサー率40% (711/1750)
回答No.1

OSもエラーメッセージも書かれていないので想像ですが、 半角の「/」は、ファイル名に使えないけど大丈夫?

micchi5555
質問者

補足

Windows Vista Office2003 実行時エラー1004 と出ます。 確かに、セルの入力は「2011/2/4」で、表示された状態だと「2011年2月4日」となっています。 半角の「/」があるのでファイル名で引っ張れないのですか? 既に大量のファイルがこのように入力されていますが、ファイル名に日付を引っ張ってきたいのですが、どうすればいいのか分かりません。 というか、別にファイル名に引っ張ってこなくても、この大量のファイルに入っている日付を一覧にしたいだけなんですが。 私はテクニックがないので、一旦ファイル名に起こして、ディレクトリ内のファイル名をリストにするツールで一覧を作ろうとしています。

関連するQ&A

  • エクセルVBA実行エラーの対処方法

    以前教えていただいた構文ですが、NOWより過ぎてない日付がFirstRow 31より有り、過ぎた日付がない場合に実行するとエラーが出ます。これを回避するのを教えてください。 宜しくお願いします。 Const DateColumn = "B" '日付が入力されている列 Const FirstRow = 31 '削除の対象となる可能性がある最初の行 Dim LastRow With ActiveSheet LastRow = .Range(DateColumn & Rows.Count).End(xlUp).row If LastRow <= FirstRow Then MsgBox "処理すべきデータがありません。" _ & vbCrLf & "マクロを終了します。" _ , vbExclamation, "データ無し" Exit Sub End If With Application .ScreenUpdating = False .Calculation = xlManual End With .Range(DateColumn & FirstRow - 1 & ":" & DateColumn & LastRow) _ .AutoFilter Field:=1, Criteria1:="<=" & Now, _ Field:=1, Criteria2:="", Operator:=xlOr .Range(DateColumn & FirstRow & ":" & DateColumn & LastRow) _ .SpecialCells(xlCellTypeVisible).EntireRow.Delete .Cells.AutoFilter End With With Application .CutCopyMode = False .Calculation = xlAutomatic .ScreenUpdating = True End With

  • ファイルサイズを書き込めません。

    過去ログを検索したのですが載っていなかったので質問させて頂きます。 指定したフォルダ毎の容量を管理したいと考え,ネットで拾った以下のソースをEXCELで動かしましたが「書き込みできません」というエラーと共に書き込めませんでした。 Sub FolderSize_Count() Dim FSO As Variant Set FSO = CreateObject("Scripting.FileSystemObject") Dim Path As String With Sheets("Sheet2") Path = Application.Worksheets("sheet1").Range("A1").Value Sheet2.Cells(1, 1) = FSO.GetFolder(Path).Size End With End Sub 書き込めませんというキーワードで検索をGOOGLEでもかけたのですが見つからずに困っています。 もしよろしければご回答お願い致します。

  • 2つのブックで、1レコードの2列の値が同じ行のセル選択するには?

    2つのブックで、1レコードの2列の値が同じ行のセル選択するには? Windows XP Home Edition Office XP Personal 2002 Excel 2002 画像のように、左.xls 右.xls 共に、 1レコードの 「 B列 と C列 」 の値が同じ行のセルを選択したいのですが、 うまく行きません。 画像の例では赤色セルの部分です。 左右のブックの赤色セルの各行番号は同じではありません。 B列(日付、実際には西暦です)だけは、全く同じデータとなっております。 ●2つのブックを左右に並べて、  同じ行データを閲覧したいわけでございます。 何卒、ご教示のほどをお願い致します。 Sub TEST() Const wBook = "右.xls" '表示させたいBook名 Const wSht = "Sheet1" '表示させたいSheet名 Dim Target As Range Dim TargetVa As Integer TargetVa = ActiveWindow.ActiveCell.Value With Workbooks(wBook).Sheets(wSht)   For Each Target In .Range("B1", .Range("B65536").End(xlUp))    If Target.Value = TargetVa Then     Workbooks(wBook).Activate     Sheets(wSht).Activate     Target.Cells.Select    End If   Next Target  End With End Sub

  • エクセルの連続印刷マクロについて

    VBAの知識がなく困っています。 エクセルのC1を+1、B5を+10連番で増やして印刷したいのですが、Webで調べた下記の記述に、色々プラスしてみましたが、片方の数しか増えません。 ご教示お願いいたします。 Const conStart As Long = 51 '開始番号 Const conEnd As Long = 60 '終了番号 Const conStep As Long = 1 '間隔 Const conCell As String = "C1" 'セル番地 '変数 Dim i As Long With Application .ScreenUpdating = False With .ActiveSheet.Range(conCell) For i = conStart To conEnd Step conStep .Value = i ActiveSheet.PrintOut Next End With .ScreenUpdating = True End With End Sub

  • エクセル2010のVBAを使ってバックアップ

    エクセル2010のVBAを使ってバックアップを取れる仕組を作っています。 Sub backup() Dim FSO As Object Set FSO = CreateObject("Scripting.FileSystemObject") FSO.CopyFile "C:\data\*.xls", "C:\back\" Set FSO = Nothing End Sub 実際にバックアップを取りたい元データはマイドキュメントにあります。 また、複数のパソコンで実行したいのですが、 C:\Documents and Settings\ログインユーザー名\MyDocuments\ このログインユーザー名がバラバラです。 データ元のパスはどのように取得すれば良いでしょうか? 教えて下さい。

  • VBAでtxtを読み込みxlsで保存したい

    C:\Documents and Settings\All Users\デスクトップ\sample.txt は次のようなデータになっています。 A B C 1,234 567,890 23,333 1,234 567,890 23,333 このデータをVBAを使ってExcelに読み込み、C:\Documents and Settings\All Users\デスクトップ\sample.xls として保存にしたいのですが、どのようなコードを書けばよいものでしょうか? sub test() Dim fso, f, ts Dim sline As String Set fso = CreateObject("scripting.filesystemobject") Set f = fso.getfile("C:\Documents and Settings\All Users\デスクトップ\sample.txt") Set ts = f.openastextstream(1) Do While ts.atendofstream <> True sline = sline & ts.readline & vbCrLf Loop ts.Close ' MsgBox sline End Sub ここまでいったのですが、slineをexcelにだすことができません。 教えていただけると助かります・。

  • VBAで、定数式が必要ですのエラー対応

    指定のファイルをフォルダAからフォルダBへ移動させるというvbaを 見つけたのですが、 サンプルの表記は「"C:\Data\A"」と直接場所をしていしたものなので、 参照するフォルダ場所として、セルC1を参照させようと、 「Range("C1")」と書き直したところ、 「コンパイルエラー:定数式が必要です」とエラーになってしまいます。 どの様に書き直せばよいのでしょうか? どなたかご存じでしたら、ぜひお教え下さい。 よろしくお願いします。 エクセル2010を使用しています。 Sub CheckAndMoveFiles() Const FolderA = Range("C1") 'エラー発生 'Const FolderA = "C:\Data\A" サンプルの表記   Const FolderB = "C:\Data\B" Dim fso As Object Set fso = CreateObject("Scripting.FileSystemObject") Dim ws As Worksheet Set ws = ActiveSheet Dim lastRow As Long lastRow = ws.Range("A" & Rows.Count).End(xlUp).Row Dim r As Long Dim fileName As String For r = 1 To lastRow If ws.Cells(r, "A").Value <> "" Then ' fileName = ws.Cells(r, "A").Value & ".xls" fileName = ws.Cells(r, "A").Value If fso.FileExists(FolderA & "\" & fileName) = True Then fso.moveFile FolderA & "\" & fileName, FolderB & "\" & fileName End If End If Next End Sub

  • VBSでファイル名にシート内のセルの値を付け足す

    現在下記のコードが書いてあるvbsにエクセルファイルをドラック&ドロップをしてパスを外したり、つけたりしています。 その際に、投げ込んだエクセルファイルのファイル名の頭に 投げ込んだエクセルファイルのシート1のセルA1の値を付けたいと考えています。 例 パスのかかっている 間隔.xls というファイルをVBSに投げ込むと パスが外れ ファイル名が あいう間隔.xls という名前に代わって保存される。コピーではなく投げ込んだシートの名前が変わって問題ありません。 あいう はシートのA1セルに入っていた文字です。 ブック内にシートは必ず1つしかありません。 Option Explicit 'Excel 2013 Later Japenese Version Available 'REF: 'REF: '''///---定数の設定Set Enumuragion---///''' Const PWD="paspas" Const msoLanguageIDInstall = 1 '''///---変数の宣言---///''' Dim objArgs, I , strFile Dim objFile, objFolder,objPath,strScr Dim xlApp,Wb Dim objWShell : Set objWShell = Createobject("WScript.Shell") Dim FSO : Set FSO = Createobject("Scripting.FileSystemObject") '''///---ファイル処理開始 Start Document File Conversion---///''' Set objArgs = Wscript.Arguments For I = 0 to objArgs.Count-1 set objFile = FSO.GetFile(cstr(objArgs(I))) If Lcase(Left(FSO.GetExtensionName(objFile.Path) ,3) )="xls" Then Set xlApp =CreateObject("Excel.Application") If xlApp.Version < 14 Then xlApp.Quit: Set xlApp = Nothing:wscript.Quit xlApp.DisplayAlerts=False xlApp.Visible = False set wb=xlapp.WorkBooks.Open(objFile.Path,0,false,,PWd,,True,,false,false,,true,true) if wb.HasPassword=true then wb.Saveas objFile.Path,,"","",False else wb.Saveas objFile.Path,,Pwd,"",False End if wb.close set wb=nothing End If Next xlApp.DisplayAlerts=True xlApp.Quit set xlApp = Nothing このコードをどのように変更すればできますでしょうか?

  • マクロのマスター検索のルーチンで困ってます

    下記のようなフローを作成し、下記のマクロを組んでみたのですが、エラーで困ってます。どなたか教えてください。 (フローを貼り付けられないので、ごめんなさい) Sub Macro() '必要なファイルを読み込む Workbooks.Open Filename:="C:\Documents and Settings\Administrator\My Documents\売上げデーター\seihin_m.xls" Workbooks.Open Filename:="C:\Documents and Settings\Administrator\My Documents\売上げデーター\s0708.xls" Dim g_book As String Dim m_book As String g_book = "s0708.xls" m_book = "seihin_m.xls" '検索用変数 Dim M_cc As String 'マスター製品コード Dim g_cc As String '月次製品コード Windows(g_book).Activate Range("A4").Select g_cc = ActiveCell Windows(m_book).Activate Range("A2").Select M_cc = ActiveCell 'If g_cc <> "" Then  '月次データーがスペースなら、END Do While M_cc <> g_cc     ※この行と次の行でエラー M_cc Offset(1, 0).Select Loop M_cc = ActiveCell.Value Windows("売上推移.xls").Activate Range("B1").Value = g_cc Range("A1").Value = M_cc '次の月次データーコードを読み込みマスターと検索に戻る End Sub

  • VBA フォルダ内のファイル名一覧

    下のようなコードですが、Dir("C:\見積\*.xls")の部分を このコードを書いてあるブックのあるフォルダの名前をもっと簡単に取得してコードにできないでしょうか。 もうひとつ付け加えたいこともあります。ファイル名一覧にする際、このブックと「XXX.xls」という名前のブック名以外の一覧にしたいのですが、これもお手上げですので、あわせてお願いします。 Sub test() Dim myFile As String Dim fl As Integer myFile = Dir("C:\見積\*.xls") fl = 9 Do While myFile <> "" fl = fl + 1 Cells(fl, 3).Value = myFile myFile = Dir() Loop End sub

専門家に質問してみよう