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

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

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

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

Q&A

解決済

2回答

1294閲覧

処理をスマートにしたい

coko1

総合スコア276

VBA

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

0グッド

0クリップ

投稿2016/09/30 06:25

編集2016/09/30 06:59

変数内容
Base = "aaa\bbb\ccc\ddd\eee\fff"
path = "ddd\eee\zzz"

コード
pos = InStr(path, "")
fd = Left(path, pos) : ddd\ を格納
pos = InStr(Base, fd)
Base = Left(Base, pos - 1) & path : aaa\bbb\ccc & ddd\eee\zzz

結果
Base = "aaa\bbb\ccc\ddd\eee\zzz"

上記のような処理を行うコードをもう少しスマートに書きたいのですが、お力を貸していただけないでしょうか?

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

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

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

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

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

tkturbo

2016/09/30 06:38

とりあえず「コード」通りに処理するとBaseの値は"ddd\eee\zzz"になる気がするのですが。。
coko1

2016/09/30 06:40

間違えました...修正します!
ttyp03

2016/09/30 06:47

修正版で実行すると"ddd\eee\zzzddd\eee\zzz"になります。
coko1

2016/09/30 06:54

ならないと思うんですが...
ttyp03

2016/09/30 06:59

あれ、ホントだ。こちらの確認ミスっぽいです。すんません。
coko1

2016/09/30 07:00

ならよかったです。
guest

回答2

0

ベストアンサー

一応考えてみましたが、大して変わり映えしないですね。

VBA

1ps = Split(Path, "\") 2base = Left(base, InStr(base, ps(0)) - 1) & Path

しかもPathの最初の区切りまでがBaseに存在することが前提です。
ないとエラーになります。

投稿2016/09/30 07:01

ttyp03

総合スコア16996

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

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

coko1

2016/09/30 07:12

そうなんですよ、私のコードもそうなんですが path = "\ddd\eee\zzz" だった場合期待している結果にはならないんですよね。 こういう場合も結果通りになるようにはしたいのですが…
ttyp03

2016/09/30 07:19

例外処理まで考えるとそれなりのステップ数になってしまうと思うので、スマートさよりも正確さ重視でいいと思います。
guest

0

文字列Base内で、文字列pathの先頭部(最初に「\」が出現するところまで)を検索(結果A)し、文字列Baseの結果A以降の文字列を文字列pathに置き換える、という仕様でいいんでしょうか?

たとえば正規表現を使う、なんてのもありますが。

参考:VBAで正規表現を使う (1/3):CodeZine(コードジン)

投稿2016/09/30 06:59

tkturbo

総合スコア5572

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問