ファイルサーバー上にあるEXCELファイルのVBAで
新規にファイルを作成する際にDIR関数で
同名ファイルの有無チェックを作成したいと考えています。
しかし以下のような処理で行うとチェックするフォルダが
My documentsになってしまいファイルの有無チェックが
うまくいきません。どのように書けば良いのでしょうか?
ご教授ください。よろしくお願いします。
(情報不足でしたらご指摘ください。補足いたします)

ChDir "\\サーバー\フォルダ\サブフォルダ"
If(""=Dir(ファイル名))then '同名ファイル無
ファイルを保存する処理
Else
msgbox "同名ファイルがあります"
Endif

環境:
サーバー  :WinNT4.0
クライアント:Win98SE or WinNT4.0
EXCEL2000
LAN接続(同一ドメイン)

このQ&Aに関連する最新のQ&A

A 回答 (2件)

こんにちは。

maruru01です。

チェックするフォルダも込みのフルパスで指定する方がいいと思いますよ。
チェックするフォルダは、常に同じなら定数化しておき、変更の可能性があるなら変数に代入して使用すればいいでしょう。
変数(または定数)は標準モジュールにでも宣言しておけばいいでしょう。

*****標準モジュール*****
Public FolderName As String

*****実際の処理*****
FolderName = "\\サーバー\フォルダ\サブフォルダ\"
If Dir(FolderName & "ファイル名") = "" Then '同名ファイル無
  'ファイルを保存する処理
Else
  MsgBox "同名ファイルがあります"
End If
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
なるほど、フォルダを変数に代入しておけば
それの変更があった場合でも便利ですね。
勉強になりました。
ありがとうございます。

お礼日時:2002/08/26 13:57

ChDirとDir関数が調べるフォルダは関係ないと思います。


If(""=Dir("\\サーバー\フォルダ\サブフォルダ\ファイル名"))then 

など、Dir関数の引数にパスとファイル名を直接書けばよいのではないでしょうか。
そのように使ったことがあります。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
ご指摘の方法にしたらできました。
Dir関数でパスとファイル名を
直接書けばいいとは気づきませんでした。
勉強になりました。

お礼日時:2002/08/26 13:52

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qエクセルで種類を数える関数が無いのは何故?

エクセルで種類を数える関数が無いのは何故なんでしょうか?

エクセルで種類を数えるには、いくつかの関数を組み合わせるのが一般的ですよね?
直接数える関数が無いのは、訳があるんでしょうか?

Aベストアンサー

>>エクセルで種類を数える関数が無いのは何故なんでしょうか?

やっぱり、そういう関数が必要な方が全体からみたら少数派だと、エクセルの開発者たちが考えているからではないかと思います。
また、既存の関数を組み合わせたら、対処可能だから、無理して新しい関数を作る必要性もない、開発の優先順位が低いって判断もあるでしょうね。

私は、エクセルの表を作ったり、エクセルVBAでプログラムを作ったりしますけど、そういう関数が必要になったことが全くありませんし。

Qエクセルvbaでファイル書き込みのとき同じファイルがある場合に\"上書きしますか?\"というメッセージをだすには?

エクセルvbaでファイル書き込みのとき同じファイルがある場合に"上書きしますか?"というメッセージをだすには、どのようにやればよいでしょうか?
ダイアログで上書きするときにメッセージを出すようにしたいのです。
現在は、
Dim fo As New Scripting.FileSystemObject
Dim ts As TextStream

Dim myDir As String
Dim myFileDir As String

myDir = ThisWorkbook.Path
myFileDir = myDir & "\a.txt"
'ここにファイルを探すコードを埋め込んでいます。
Set ts = fo.CreateTextFile(myFileDir, False)

よろしくお願いします。

Aベストアンサー

If ファイル有り Then
  If MsgBox("上書きしますか?", vbYesNo) = vbYes Then
    Set ts = fo.CreateTextFile(myFileDir, True)
  Else
    'Exit Sub は 必要に応じて他の処理に替えてください。
    Exit Sub
  End If
Else
  Set ts = fo.CreateTextFile(myFileDir, False)
End If
 

Qエクセルの関数で

エクセルの関数辞典を見ていたら、CUMPRINC関数というのがありました。
しかし、エクセルの「挿入」→「関数」→関数の分類で「財務」というのを選択したのですが、一覧表に載っていません。
どこに載っているのでしょうか?
どうすればこの関数を使えますか?
ちなみにシートの上でやっても関数の反応をしませんでした。

Aベストアンサー

Yahooで検索してみると、参考URLが引っかかりました。

参考になりませんか?

参考URL:http://money-sense.net/doc/20041215_224257.php

QC:\WINDOWS\TEMP\B2Temp\Attachとは・・・

添付ファイルをメーラーからパソコンに落とすときに、
現在の場所を表すのに
「C:\WINDOWS\TEMP\B2Temp\Attach」
と表示されます。場所を表しているのだと思うのですが、くわしくどういう意味なのか教えて下さい。

Aベストアンサー

Cドライブの中のwindowsフォルダの中のtempフォルダの中のB2Tempフォルダの中のAttachフォルダ、という意味だと思います。質問の意図を取り違えてましたらすみません。スタートメニューを右クリックしてエクスプローラーで階層を確認されたら分かりやすいかと思います。

Qエクセルの関数 ネスト

エクセルの関数 ネスト

エクセルの関数で、ネストさせるときがあるとおもうのですが、

関数を内側に書いたらよいのか外側に書いたらよいのか分からなくなる時があります。

エクセルの関数に関してわかりやすく書いてあるページなどありますか。

Aベストアンサー

こんばんは

Excel2003までは、ネストが7まで、2007では64までが可能です。
http://www.google.co.jp/search?hl=ja&source=hp&q=excel+%E3%83%8D%E3%82%B9%E3%83%88%E3%80%802003%E3%80%802007&aq=f&aqi=&aql=&oq=&gs_rfai=

「仕様上は可能」でも、複雑なネストは間違いが生じやすいですし、変更もしにくくなります。「出来るだけネストはしない」「適宜、中間結果をセルに出力する」という方法を採った方が、間違いが少なく、柔軟性のあるシステムになると思います。

>エクセルの関数に関してわかりやすく書いてあるページなどありますか。
関数の個別の機能ならば、Webサイトも書籍も多数あるのですが、「組み合わせて使う」というのはその場その場での発想になってしまうと思います。

Q複数ファイルの同名シートを集めたファイルを作る

複数ファイル(約40ほど)にシートが13あります。各ファイルの13のシートの名前はA,B,C‥とおなじ名前となっています。各シートには複雑な命令文で作成されたデータです。同じ名前のシートをコピーしてファイルを作るとデータが異常なものになってしまい困っています。各シートの値と書式のみを集めたシート名のファイルを作りたいのですが,教えて頂けませんでしょうか?尚、私はVBAをかじっている初心者です。出来ればVBAでお願いします。

Aベストアンサー

下記の画像を確認してください。

Qエクセル関数の解読サイトなんてありますか?

エクセル関数の解読サイトなんてありますか?

いつもお世話になっております<(_ _)>

エクセルファイルに関数の入った数式が入力されています。
セルごとに複数の関数が入っていますが、私にはちっともわかりません。

そこで質問です。
こんなとき「エクセル関数を解読」してくれるようなサイトってありませんか?

たとえば検索窓があってそこに「=SUM(S1:S13)」わからなくて困っている関数式を入力。
すると答えの別ボックスに「S1~S13までの数値の合計」と出てくるようなサイト。

それに近いサイトでも良いので知っている方がいらっしゃればぜひ、教えてください<(_ _)>

Aベストアンサー

もし、

=IF(E14="","",IF(O14="",(IF(E14>"18:00"*1,"18:00",E14)-IF(C14<="8:00"*1,"8:00",C14))*24*1300,(IF(E14>"18:00"*1,"18:00",E14)-IF(C14<="8:00"*1,"8:00",C14))*24*1625))

だったら、どういう文章が出て欲しいのでしょうか?

もしE14が空白だったら、
 空白、
そうじゃなかったから、
 もしO14が空白だったら、
  (もしE14が18:00より大きかったら18:00、そうじゃなかったらE14)-(もしC14が8:00以下だったら8:00、そうじゃなかったらC14)×24×1300
 そうじゃなかったら、
  (もしE14が18:00より大きかったら18:00、そうじゃなかったらE14)-(もしC14が8:00以下だったら8:00、そうじゃなかったらC14)×24×1625

って感じですか?
数式をそのまま読解したほうが解りやすくないですか?

QエクセルVBAでセルにあるファイル名のファイルを同じくセルにあるフォルダ名のフォルダにコピー

お世話になります。
絶対パスがあり、コピー元、コピー先(格納先)としてシート上の操作で
ファイルをフォルダにコピーしたいのですが、VBAでできるでしょうか?

・B列B6以下にコピー元のファイル名(絶対パス)
・D6に格納先のフォルダ名(絶対パス)
があります。
この条件だけでコピー→格納するコードを教えていただけたら助かります。よろしくお願いします。

Aベストアンサー

またまた#1です。 (^o^)丿

同名ファイルがあるときは xxxx_01.jpg の形式の連番を付加して別名で保存する
のを考えてみました。(連番は Max10 まで)

ファイル名とコピー先のフォルダパス名にアンダースコア( _ )が付いていない
ことが条件です。

Sub Test2()
 Dim i, OldFile, OldName, FileExt, NewFile, NewName, n, Pos
 i = 6
 Do While Cells(i, 2) <> ""
  On Error Resume Next
  MkDir Cells(6, 4).Value  'コピー先に指定したフォルダがない場合は作成。
  OldFile = Cells(i, 2)
  OldName = Right(OldFile, Len(OldFile) - InStrRev(Cells(i, 2), "\") + 1)
  OldName = Left(OldName, InStrRev(OldName, ".") - 1)
  FileExt = Right(Cells(i, 2), Len(Cells(i, 2)) - InStrRev(Cells(i, 2), ".") + 1)
  NewFile = Cells(6, 4) & OldName & FileExt
  NewName = Left(NewFile, InStrRev(NewFile, ".") - 1)
  If Dir(NewFile) <> "" Then
   For n = 1 To 10
    Pos = InStrRev(NewName, "_")
    If Pos = 0 Then Pos = Len(NewName)
    NewFile = Left(NewName, Pos) & "_" & Format(n, "00") & FileExt
    If Dir(NewFile) = "" Then Exit For
   Next
  End If
  FileCopy OldFile, NewFile
  'Kill OldFile
  i = i + 1
 Loop
End Sub

またまた#1です。 (^o^)丿

同名ファイルがあるときは xxxx_01.jpg の形式の連番を付加して別名で保存する
のを考えてみました。(連番は Max10 まで)

ファイル名とコピー先のフォルダパス名にアンダースコア( _ )が付いていない
ことが条件です。

Sub Test2()
 Dim i, OldFile, OldName, FileExt, NewFile, NewName, n, Pos
 i = 6
 Do While Cells(i, 2) <> ""
  On Error Resume Next
  MkDir Cells(6, 4).Value  'コピー先に指定したフォルダがない場合は作成。
  OldFile =...続きを読む

Qエクセル関数を、書き写して分析できるツールはある?

タイトルの件、質問します。

エクセルの関数を分析する際に、エクセルの数式バーや、セルに入っている関数を
F2を教えて見るのでは、見にくい場合があります。

現在は、私は、メモ帳に関数をコピーして、分析したり、修正したりしています。
エクセルの機能or他ソフトで、関数を分析できるツールはあるのでしょうか??

【エクセルバージョン】
2003、2007

Aベストアンサー

難解な数式を理解したいとき,最も便利に利用できるのは,2003ではツールメニューのワークシート分析にある「数式の検証」です。
2007では数式タブにあります。

メンドクサイ数式のセルで数式の検証を使い,どの関数やどのカッコから計算が進んでいくのかを1ステップずつトレースして理解します。また意図しない結果がどの段階で発生しているのか追跡します。

このやり方は勿論間違った数式(意図しない結果が出てきた場合)を追跡するのにも使いますが,むしろ誰かに教わった「正しい数式」を理解する時に便利な方法です。
そもそも計算が通っていない(たとえばカッコの対応が間違えていて,Enterしても受け付けてくれないようなミスをしている場合)には使えません。



また,数式バーの中で数式の「中」にカーソルを入れて左右の矢印キーでカーソルを動かしていったときに,「(」や「)」をまたいだ瞬間に,対応する「閉じカッコ」「始まりのカッコ」が色つきで強調表示されるのを確認しながら,カッコの対応がまちがえてないかなどを調べるのも簡易な良い方法です。


あまり使わない方法ですが,数式の中で適宜ALT+Enterを打って「セル内改行」してしまい,数式を縦に分解して書いてみるのも整理しやすい方法のひとつです。

難解な数式を理解したいとき,最も便利に利用できるのは,2003ではツールメニューのワークシート分析にある「数式の検証」です。
2007では数式タブにあります。

メンドクサイ数式のセルで数式の検証を使い,どの関数やどのカッコから計算が進んでいくのかを1ステップずつトレースして理解します。また意図しない結果がどの段階で発生しているのか追跡します。

このやり方は勿論間違った数式(意図しない結果が出てきた場合)を追跡するのにも使いますが,むしろ誰かに教わった「正しい数式」を理解する時に便利...続きを読む

Q【Excel VBA】チェックボックスの有無

Excel2003を使用しています。

昨日、『チェックボックスの挿入位置』で質問させていただきましたが、その続きというか、もうひとつ条件を追加したく、改めて質問させていただきます。

Sheet2のN1セルに入力されている番号と同じ番号が入力されているセルをSheet1のA列(A11:A200)から探して、その行のB列にチェックボックスを挿入したく、下記のようにコードを書いています。

----------------------------------------

Sub test2()
Dim myStr As String
Dim myRange As Range

myStr = Sheets("Sheet2").Range("N1").Value
Set myRange = Sheets("Sheet1").Range("A11:A200").Find(myStr)

If myRange Is Nothing Then
Exit Sub
Else
Sheets("Sheet1").OLEObjects.Add(ClassType:="Forms.CheckBox.1", Link:=False, DisplayAsIcon:=False, _
Left:=myRange.Offset(, 1).Left , Top:=myRange.Top , Width:=12, Height:=13).Select
End If
End Sub

----------------------------------------

それで、今回追加したい条件は、既に、チェックボックスが挿入されていた場合は、何もせずに処理を終えたいのです。
現在は、チェックボックスが挿入されていると、そのチェックボックスの上に新たに重なってしまいますので、そうならないようにできたらと思い、質問させていただきました。

よろしくお願いします。

Excel2003を使用しています。

昨日、『チェックボックスの挿入位置』で質問させていただきましたが、その続きというか、もうひとつ条件を追加したく、改めて質問させていただきます。

Sheet2のN1セルに入力されている番号と同じ番号が入力されているセルをSheet1のA列(A11:A200)から探して、その行のB列にチェックボックスを挿入したく、下記のようにコードを書いています。

----------------------------------------

Sub test2()
Dim myStr As String
Dim myRange As Range

myStr = Sh...続きを読む

Aベストアンサー

こんにちは。

ヒントだけですが、
チェックボックスの左上端にあるセルは
以下のようにして調べられます。

Option Explicit

Sub Sample()

Dim c As OLEObject

For Each c In Sheet1.OLEObjects
If c.progID = "Forms.CheckBox.1" Then
Debug.Print c.TopLeftCell.Address
End If
Next

End Sub

例えば、上記のように取得したアドレスを
myRange.Offset(, 1)のアドレスと
比較すれば良いでしょう。


人気Q&Aランキング

おすすめ情報