• ベストアンサー

エクセル VBA パスの記述方法を教えてください。

Sub フォルダ作成() Dim UserName As String UserName = Environ("USERNAME") MkDir "C:\Documents and Settings\" & UserName & "\My Documents\販売管理\0000年00月決算" MkDir "C:\Documents and Settings\" & UserName & "\My Documents\販売管理\0000年00月決算\売掛金元帳" MkDir "C:\Documents and Settings\" & UserName & "\My Documents\販売管理\0000年00月決算\買掛金元帳" MkDir "C:\Documents and Settings\" & UserName & "\My Documents\販売管理\0000年00月決算\管理表" End Sub 上記のようなマクロを記述してありますが、 C:ドライブ以外(D:ドライブやZ:ドライブ)で使用する場合が発生しましたので、 どのドライブでも使用出切る記述方法があれば御教示お願い致します。

  • oguno
  • お礼率61% (179/289)

質問者が選んだベストアンサー

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

こんにちは。 少し、見直してみました。 今回は、このようなマクロは経験はありません。私は、決算期のフォルダは年に一度しかないので、マクロでは作りません。手動で行います。他人に作ってもらうならいいけれども、ある程度エラーを出さないマクロにするには、面倒で手数が多いかもしれません。 一応、年度決算ですから、現在の年の数でフォルダ名にします。 このようにしてあります。 Format$(DateSerial(Year(Date), M, 1), "yyyy年mm") & "決算" '------------------------------------------- ''Option Explicit Sub MacroTest1()   Dim UserName As String   Dim myDest As String   Dim myDrv As Variant   Dim myFolder As String   Dim myFolder2 As String   Dim objFS As Object   Dim objDrv As Object   Dim flg As Boolean   Const M As Integer = "7" '決算月      flg = False      UserName = VBA.Environ("USERNAME")   myDest = "C:\Documents and Settings\" & UserName & "\My Documents\"   myFolder = "販売管理"      myDrv = Application.InputBox("ドライブ名を入れてください。" & vbCrLf & "99を入れると自フォルダになります。", "ファルダ作成", Type:=2)      If VarType(myDrv) = vbBoolean Or myDrv = "" Then Exit Sub   Set objFS = CreateObject("Scripting.FileSystemObject")   If Not myDrv Like "99" And InStr(1, Left(Application.Path, 3), myDrv, 1) = 0 Then          If InStr(myDrv, ":") = 0 Then myDrv = myDrv & ":"     If InStr(myDrv, "\") > 0 Then myDrv = Replace(myDrv, "\", "")          If objFS.DriveExists(myDrv) = False Then       MsgBox myDrv & " :ドライブがありません。"       Exit Sub     Else       Set objDrv = objFS.GetDrive(myDrv)       If objDrv.IsReady = False Then         MsgBox myDrv & "ドライブが可能ではありません。"         Exit Sub       End If       If objDrv.freespace < 1000 Then         MsgBox myDrv & "ドライブが書き込み可能ではありません。"         Exit Sub       End If       ChDrive myDrv     End If   Else     flg = True   End If      If flg Then     If objFS.FolderExists(myDest & myFolder & "\") = False Then       MkDir myDest & myFolder     End If   Else     myDest = myDrv & "\"     If InStr(1, myDest, "Z", 1) Then 'Zの場合       myDest = myDest & "\5TM\"       If objFS.FolderExists(myDest & "\") = False Then         MkDir myDest       End If     End If     If objFS.FolderExists(myDest & "\" & myFolder & "\") = False Then       MkDir myDest & "\" & myFolder     End If   End If If objFS.FolderExists(myDest & myFolder & Format$(DateSerial(Year(Date), 1, 1), "yyyy年mm") & "決算") Then   MsgBox myDest & myFolder & Format$(DateSerial(Year(Date), M, 1), "yyyy年mm") & "決算" & vbCrLf & "は既に存在するかと思われます。", vbInformation   Exit Sub Else   '既に決算フォルダがある場合は、無視する   On Error Resume Next   MkDir myDest & myFolder & "\" & Format$(DateSerial(Year(Date), M, 1), "yyyy年mm") & "決算" & "\"   On Error GoTo 0   MkDir myDest & myFolder & "\" & Format$(DateSerial(Year(Date), M, 1), "yyyy年mm") & "決算" & "\売掛金元帳"   MkDir myDest & myFolder & "\" & Format$(DateSerial(Year(Date), M, 1), "yyyy年mm") & "決算" & "\買掛金元帳"   MkDir myDest & myFolder & "\" & Format$(DateSerial(Year(Date), M, 1), "yyyy年mm") & "決算" & "\管理表" End If '以下を置かないと、ドライブに、ApplicationのCurDrive が残ることがある。 ChDrive Left(Application.Path, 3) Set objFS = Nothing End Sub

oguno
質問者

補足

Wendy02様 ご無沙汰いたしております。 久方ぶりの質問をさせていただきました。 お目に留めていただき、ありがとうございます。 >私は、まだ書いています。 ご指導いただけることは、私にとっては大変ありがたい事です。 その他の大勢の方々もそう思っていらしゃることと思います。 どうか、今後もご指導いただけますようお願い申し上げます。 ● 私の質問の要領が悪く、枝葉の質問から入ってしまったようで申し訳ございません。 再質問のようになってしまい申し訳ございませんが、宜しくお願い申し上げます。 (1)My Documentsに\販売管理 を保存して、VBAで絶対パス("C:\Documents and Settings\" & UserName & "\My Documents\販売管理\0000年00月決算") で記述した場合、Cドライブでは思い通り作業が出来ます。 (2) そのまま、C:ドライブ以外(例えばD:ドライブやZ:ドライブ)に保存し、作業しますと、エラーが発生します。 (3) VBAの中で、絶対パスを多用しておりますので、修正が大変な作業になります。 (4) どのようなドライブに\販売管理を保存しても、エラーが発生しないように、絶対パス("C:\Documents and Settings\" & UserName & "\My Documents\販売管理\0000年00月決算") で記述した部分を、記述する方法があるのでしょうか? もし、有るならば御教示下さい。 ● 「フォルダ名の記述方法について御教示ください。」と質問(2008/11/30 質問番号:4518725)いたしましたら、 下記のようなご回答、ご指導(回答日時:08/12/04  回答番号:No.4)をいただきました。 >どのパソコンでも使用できるような記述方法があるのでしょうか。 それは、こんな方法です。 Dim myFolder As String Dim UserName As String UserName = Environ("USERNAME") myFolder = "C:\Documents and Settings\" & UserName & "\My Documents\¥販売管理\2009年11月決算\売掛金元帳\" >Environ("USERNAME") これは、単に環境変数を読んでいるだけです。 コマンド・プロンプトで、>Set とすれば、出てきます。 ● この時の ("USERNAME") のように、どのようなケースでも対処出来る記述方法があるのかを、ご教示いただきたいのです。 ☆ 質問者や回答者も自力で答えを見つけようとする人たちが、減ってきた・・・。☆ お叱りを受けるかもしれませんが、宜しくお願い申し上げます。

その他の回答 (11)

回答No.1

>C:ドライブ以外(D:ドライブやZ:ドライブ)で使用する場合が発生しましたので、 よくわらないのですが、 MkDir "D:\Documents and Settings\" & UserName & ・・・ MkDir "Z:\Documents and Settings\" & UserName & ・・・ ということ?それともD:\、Z:\内のどこかのフォルダということですか? ちなみに、 "C:\Documents and Settings\" & UserName & "\My Documents" は、 Dim shl Set shl = CreateObject("WScript.Shell") WScript.Echo shl.SpecialFolders("MyDocuments") とう方法でも取得可能です。

oguno
質問者

補足

cistronezk様 早速の御教示ありがとうございます。 申し訳ございません下記ご指摘の場合です。 >それともD:\、Z:\内のどこかのフォルダということですか? 具体的に表示しますと Z:ドライブの場合 Z:\5TM\販売管理\0000年00月決算 D:ドライブの場合 D:\販売管理\0000年00月決算 上記のように階層が一定していません。 この様な表現でご理解いただけますでしょうか。 宜しくお願い申し上げます。 >Dim shl Set shl = CreateObject("WScript.Shell") WScript.Echo shl.SpecialFolders("MyDocuments") \販売管理\0000年00月決算の部分の記述はどのようにすればよろしいのでしょうか 恐縮ですが、そのものずばりの記述を、併せて御教示お願い申し上げます。 oguno

関連するQ&A

  • フォルダ名の変更方法を教えてください。VBA

    セルH14に年度が入力してあります。 → (例)  2009 セルK14に月が入力してあります。 → (例)  11 このセルH14の値を yyyy に,セルK14の値を mm に入れたフォルダ名に変更したいのですが可能でしょうか、 御教示御願申し上げます。 Sub フォルダ名の変更() Name "C:\Documents and Settings\aaa\My Documents\販売\0000年00月決算" _ As "C:\Documents and Settings\aaa\My Documents\販売\yyyy年mm月決算"   下記のように ↓ ' As "C:\Documents and Settings\aaa\My Documents\販売\2009年11月決算" End Sub

  • フォルダ名の記述方法について御教示ください。VBA

    いつも御指導ありがとうございます。 皆様に御指導いただきながら、得意先別元帳の項目(前月残・当月入金・売上・残高等)の金額を取得して売掛金管理表を作成しています。 得意先別元帳のフォルダ名を年度(yyyyの部分)としている為に、変更しないと毎年使用できません。 売掛金管理表のセル(L5)に、年度が記載されていますので、それを利用してみましたが上手く出来ません。 変更しないで処理出来るようにするための記述を御教示御願申し上げます。 ●フォルダ構成 C:\Documents and Settings\aaa\My Documents\販売\yyyy年11月決算\売掛金元帳 ー 各得意先ファイル C:\Documents and Settings\aaa\My Documents\販売\yyyy年11月決算\管理表 ー 売掛金管理表と買掛金管理表ファイル Sub GetDatainFolder6() '管理表の作成 Dim i As Long Dim Fname As String Dim ans As Variant DoEvents Const myFolder As String = "C:\Documents and Settings\aaa\My Documents\販売\yyyy年11月決算\売掛金元帳\" Fname = Dir(myFolder & "*.xls") Do Until Len(Fname) = 0 FormPickUP Range("C6").Offset(i), myFolder & Fname, "6月" Range("C6").Offset(i).Resize(, 7).Value = _ Range("C6").Offset(i).Resize(, 7).Value Range("D6").Offset(i).Value = Mid(Fname, 1, InStrRev(Fname, ".") - 1) '拡張子は取る i = i + 1 Fname = Dir() Loop End Sub Function FormPickUP(rng As Range, ByVal myBk As String, ByVal mySh As String) 省略 End Function 宜しく御願いいたします。

  • リンクのVBAを教えてください。

    いつも、御指導ありがとうございます。 売掛金元帳のセル(J3)に数式1で、[得意先登録.xls]得意先登録から社名を表示させています。 ●数式1  '=IF($C$2="","",IF(ISERROR(VLOOKUP($C$2,'C:\Documents and Settings\aaa\My Documents\販売管理 \登録 (台帳)\[得意先登録.xls]得意先登録'!$D$7:$E$65536,2,FALSE)),"未登録です", VLOOKUP($C$2,'C:\Documents and Settings\aaa\My Documents\販売管理 \登録 (台帳)\[得意先登録.xls]得意先登録'!$D$7:$E$65536,2,FALSE))) 売掛金元帳のセル(E2)に数式2で、[自社情報登録.xls]自社情報'!$C$3から自社名を表示させています。 ●数式2  '='C:\Documents and Settings\aaa\My Documents\販売管理\登録 (台帳)\[自社情報登録.xls]自社情報'!$C$3 ●数式1及び数式2をVBAで記述したいのですがど、うしても記述出来ません。 ●まるなげになってしまいますが、数式1及び数式2と、社名変更があった場合は売掛金元帳へ反映させるVBAを教えてください。 宜しく御願いいたします。

  • VBAマクロ、パスがありませんでとまります。

    Excel2003 VBAのコードを作成して、 実行しましたら ”実行時エラー'76' パスが見つかりません。" と表示されて Open pase ...... の行でとまってしまいます。 なにが原因とかんがえられますか? すいませんが、ご回答よろしくおねがいいたしますm(_ _)m Sub Macro1() Dim strarray() As Variant Dim counter As Integer Dim i As Long pase="C:\Documents and Settings\user\My Documents\" myname=Dir("C:\Documents and Settings\user\My Documents\",vbNormal) Do While myname <> "" If (GetAttr("C:\Documents and Settings\user\My Documents\" &_ myname) And vbNormal) = vbNormal Then ReDim Preserve strarry(counter+1) strarray(counter) = myname counter = counter + 1 End If myname = Dir Loop For i = 1 to counter Open pase & strarray(i) For Input As #1 Do Until EOF(1) ・ '処理 ・ ・ Loop Next i

  • アクセスする方法

    telnet でアクセスしようとすると拒否されます。 どうしたらアクセスできるでしょうか? ログインユーザーは管理者権限を持っています。(ビルドイン) myDoc対象ユーザーも管理者権限を持っています。 C:\Documents and Settings\*****>cd My Documents アクセスが拒否されました。 C:\Documents and Settings\*****>cacls "My Documents" C:\Documents and Settings\*****\My Documents アクセスが拒否されました。 C:\Documents and Settings\*****>cacls "My Documents" /t /p administrator:F よろしいですか (Y/N)?y アクセスが拒否されました。 普通は(OI)(CI)(IO)F とか出てきますよね。

  • エクセル VBA バッチが動かない。

    以下のVBAを試行錯誤の末(未熟なもので・・) 作ってみました。 デスクトップ上のフォルダを確認にて、存在する場合はそのままバッチ実行、 存在しない場合はフォルダを作成してバッチ実行。 というものなのですが、フォルダが存在する場合はすんなり行くのですが、 存在しない場合、フォルダを作成した後、バッチ処理がされなくて 困っています。どこが悪いのでしょうか? 是非ご教授お願いいたします。 ちなみにバッチはXCOPYです。 Sub SET_Original() Dim strPATHNAME As String strPATHNAME = "C:\Documents and Settings\ユーザー\デスクトップ\フォルダ" If StrConv(strPATHNAME, vbUpperCase) = "FALSE" Then Exit Sub If Dir(strPATHNAME, vbDirectory) = "" Then MsgBox "フォルダは作成します。", vbExclamation MkDir "C:\Documents and Settings\ユーザー\デスクトップ\フォルダ" Exit Sub End If Dim str As Variant str = Shell("c:\Documents and Settings\ユーザー\デスクトップ\copy.bat") End Sub

  • excel vba

    excel VBA (質問1) B7 セルに,DOC20071201_1231.xlsとはいっているとき下記の動作と同様のことをB7を使って表現するにはどうすればいいか。 Sub bookwo_open() Workbooks.Open Filename:="C:\Documents and Settings\taktta\My Documents\Log zzz\2007 log\2007年報告\2007年12月分\" & "DOC20071201_1231.xls" End Sub (質問2) A1セルに7とはいっているとき、B7セルに入っているファイルをオープンするには、どうすればいいか。 (A1セルにnとはいっているとき、Bnセルに入っているファイルをオープンするには、どうすればいいか。)

  • VBAで統合ができない・・・。

    エクセルのマクロの記録で作ったコードですが、実行すると「開けません」と出ます。 どこがいけないのでしょうか? Sub Macro2() Selection.Consolidate Sources:=Array( _ "'C:\Documents and Settings\abcd\My Documents\2011\新規[対象2010.12.xls]店別集計'!R3C4:R69C10" _ , _ "'C:\Documents and Settings\abcd\My Documents\2011\新規\[対象2011.01.xls]店別集計'!R3C4:R69C10" _ ), Function:=xlSum, TopRow:=False, LeftColumn:=False, CreateLinks:= _ False End Sub

  • 相対パスでも絶対パスでもない参照の記述方法?

    C:\Documents and Settings\user_name\デスクトップ\index.html の<head>内に、 <link rel="stylesheet" href="/css/style.css" type="text/css"> と書かれているのですが、注視すると、 href="css/style.css"  でも href="./css/style.css"  でも href="../css/style.css"  でもなく、 href="/css/style.css"  なんです。これって、何処を指していますか? C:\Documents and Settings\user_name\デスクトップ\index.html に対し、 C:\Documents and Settings\user_name\デスクトップ\css\style.css と置いてもstyle.cssは効きませんでした。 index.htmlをhogeディレクトリに入れて C:\Documents and Settings\user_name\デスクトップ\hoge\index.html C:\Documents and Settings\user_name\デスクトップ\css\style.css としても、style.cssを読み込みませんでした。 何でそんなことを聞くかというと、http://www.nikkansports.com/ のソースがそうなっています。例えば28行目の↓とか。 <script type="text/javascript" src="/js/css-home.js"></script> style.cssを、何処におけばいいのでしょうか?

    • ベストアンサー
    • HTML
  • DOSコマンドで相対パスの取得の方法がわかりません。

    ファイルパスが C:\Documents and Settings\ユーザー名\My Documents\My Music を My Music だけを取り出す方法が見つかりません。 どのように操作したら相対パスを取得することができるのでしょうか?

専門家に質問してみよう