質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

4回答

413閲覧

条件分岐について想定の動きができない

karuna0120

総合スコア4

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

1クリップ

投稿2019/09/04 03:10

前提・実現したいこと

条件分岐でセルにパスが設定されているかを判断したいのですが、
C3セルが空(パスが設定されていない)の状態の場合は、MsgBox "設定されていません"があるところに通すようにしたのですが、うまく行きません。
Elseルートに処理が進んでしまいます。

逆にB3にはパスを設定していて、そこを対象にして条件を通すと想定のElseに入ってくれます。

該当のソースコード

VBA

1 2Function 条件分岐() 3 4 Dim filepath As String 5 6 'filepath = Range("B3").Value '設定あれている 7 filepath = Range("C3").Value '設定されていない 8 9 If Dir(filepath) = "" Then 10 MsgBox "設定されていません" 11 12 Else 13 MsgBox "設定されています" 14 15  End If 16 17End Function 18

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

ExcelVBA

1Sub testメイン() 2 Dim sPath As String 3 4 sPath = Range("A1").Value 5 6 If chk存在確認(sPath) Then 7 MsgBox "有り" 8 Else 9 MsgBox "無し" 10 End If 11End Sub 12 13Private Function chk存在確認(ByVal s As String) As Boolean 14 If Len(s) > 0 Then 15 If Len(Dir(s)) > 0 Then 16 chk存在確認 = True 17 End If 18 End If 19End Function

こんな構えの方が関数らしい振る舞いでは?
自作した関数も、VBAに元からある関数も、使い方は一緒なので、
元からある関数がどのような振る舞いをしているか、
いろいろ試してみて研究してみましょう^^

それから、
やりたいことはファイルの存在確認ですか?
そして、有った場合には何がしたいのですか?
参考までに。。。。
もしかしたら、もう少し踏み込んで聞いてみた方が、
いろいろなアドバイスが貰えるかも?

投稿2019/09/04 06:46

mattuwan

総合スコア2136

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

vba

1 If filepath ="" Or Dir(filepath) = "" Then 2 MsgBox "設定されていません" 3 Else 4 MsgBox "設定されています" 5  End If

かな?
ただ、If の条件は両方評価するので、Dir("")判定が無駄になるので、拘るなら下記で。

vba

1 If filepath ="" Then 2 MsgBox "設定されていません" 3 ElseIf Dir(filepath) = "" Then 4 MsgBox "設定されていません" 5 Else 6 MsgBox "設定されています" 7  End If

投稿2019/09/04 04:21

hatena19

総合スコア33715

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

Dir("")はこれはこれで意味があるので、横着せずに入力チェックとファイル取得処理はわけるべき。
というかDir使っている以上分けて書くしかないです。
.

投稿2019/09/04 04:08

編集2019/09/04 06:34
ttyp03

総合スコア16998

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

BluOxy

2019/09/04 06:32

(文章が切れている様な)
ttyp03

2019/09/04 06:35

ご指摘ありがとう。 どうも回線が遅い環境だと途切れてしまうようです。
guest

0

Dir() だと指定パスのファイル一覧を取得してしまうので、空かどうかだけ見たいのならそもそもDir()関数不要では?

投稿2019/09/04 03:12

m.ts10806

総合スコア80850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

karuna0120

2019/09/04 03:24

セル内が空か判断するだけならDir()は不要ですが、 セル内にパスが設定されている場合はファイルを取得する処理にしたいため、Dir()を使用しています。
m.ts10806

2019/09/04 03:28

ディレクトリの存在チェックまで同時にしたいということでしょうか
Zuishin

2019/09/04 03:50

Dir("") はカレントディレクトリのファイルをリストします。つまり、カレントディレクトリに何かファイルがあれば「設定されています」になります。 これを防ぐためにも、別々に判定しなければいけません。
m.ts10806

2019/09/04 04:48

私も別々が良いと思います。 filepathが空か filepathに指定したディレクトリ内が空か
karuna0120

2019/09/04 09:40

m.ts10806さん Zuishinさん 回答ありがとうございます。 ご教示ありがとうございます。 なぜ想定していない動きになってしまったのか理解できました。 条件分岐を別で判定するやり方で確認してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問