Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


3960 / 13644 ツリー ←次へ | 前へ→

【59174】空欄の時もリネームする方法 ArtBox 08/12/1(月) 12:29 質問[未読]
【59178】Re:空欄の時もリネームする方法 トト 08/12/1(月) 13:59 発言[未読]
【59179】Re:空欄の時もリネームする方法 ArtBox 08/12/1(月) 14:23 質問[未読]
【59183】Re:空欄の時もリネームする方法 トト 08/12/1(月) 15:34 発言[未読]
【59188】Re:空欄の時もリネームする方法 ArtBox 08/12/1(月) 22:44 発言[未読]
【59180】Re:空欄の時もリネームする方法 Jaka 08/12/1(月) 14:49 発言[未読]
【59182】Re:空欄の時もリネームする方法 ArtBox 08/12/1(月) 15:26 質問[未読]
【59184】Re:空欄の時もリネームする方法 Jaka 08/12/1(月) 15:51 発言[未読]
【59189】Re:空欄の時もリネームする方法 ArtBox 08/12/1(月) 22:45 発言[未読]
【59187】私の質問の仕方が悪かったようですので改め... ArtBox 08/12/1(月) 21:11 質問[未読]
【59190】Re:私の質問の仕方が悪かったようですので... かみちゃん 08/12/1(月) 22:53 発言[未読]
【59191】Re:私の質問の仕方が悪かったようですので... ArtBox 08/12/1(月) 23:11 質問[未読]
【59192】Re:私の質問の仕方が悪かったようですので... かみちゃん 08/12/1(月) 23:31 発言[未読]
【59193】Re:私の質問の仕方が悪かったようですので... かみちゃん 08/12/1(月) 23:43 発言[未読]
【59194】Re:私の質問の仕方が悪かったようですので... ArtBox 08/12/1(月) 23:56 お礼[未読]
【59234】Re:私の質問の仕方が悪かったようですので... かみちゃん 08/12/2(火) 21:49 発言[未読]
【59235】Re:私の質問の仕方が悪かったようですので... PN 08/12/2(火) 21:53 発言[未読]
【59236】Re:空欄の時もリネームする方法 PN 08/12/2(火) 23:41 質問[未読]
【59237】Re:空欄の時もリネームする方法 かみちゃん 08/12/3(水) 0:45 発言[未読]
【59246】回答は結構です。 ArtBox 08/12/3(水) 16:17 発言[未読]
【59256】Re:回答は結構です。 かみちゃん 08/12/3(水) 20:46 発言[未読]

【59174】空欄の時もリネームする方法
質問  ArtBox  - 08/12/1(月) 12:29 -

引用なし
パスワード
   ファイル名を変更する為にこの様な記述をしてみましたが、変更後のファイル名が空欄(変更なし)ですと「既に同盟のファイルがあります」となり、そのセルでリネームが終わってしまいます。
変更後のファイル名が、空欄(変更なし)の場合も次のリネームに進めるようにするためにはどうしたら良いのでしょうか?
参考情報等を教えて頂ければ助かります。


Sub ファイル名変更()
 Dim フォルダ As String
 Dim 変換前 As String
 Dim 変換後 As String
 Dim 行 As Long

 フォルダ = Cells(3, 7).Value & "\"
 行 = 3
 Do Until Cells(行, 2).Value = ""
  変換前 = フォルダ & Cells(行, 2).Value
  変換後 = フォルダ & Cells(行, 4).Value
  Name 変換前 As 変換後
  行 = 行 + 1
   Loop
End Sub

【59178】Re:空欄の時もリネームする方法
発言  トト  - 08/12/1(月) 13:59 -

引用なし
パスワード
   ▼ArtBox さん:
空欄(フォルダと同名または変更前と同名)以外の場合のみ、
リネーム処理するようにしてはいかがでしょう

> Name 変換前 As 変換後
 If (変換後 <> フォルダ) And (変換後 <> 変換前) Then
   Name 変換前 As 変換後
 End If

参考までに

【59179】Re:空欄の時もリネームする方法
質問  ArtBox  - 08/12/1(月) 14:23 -

引用なし
パスワード
   有難うございます。

以下のコードを既存のコードに挿入すればOKですよね?
巧く動きませんでした。

もし宜しければ全体像をお教え願えませんか?

【59180】Re:空欄の時もリネームする方法
発言  Jaka  - 08/12/1(月) 14:49 -

引用なし
パスワード
   >Sub ファイル名変更()
> Dim フォルダ As String
> Dim 変換前 As String
> Dim 変換後 As String
> Dim 行 As Long
>
> フォルダ = Cells(3, 7).Value & "\"
> 行 = 3
> Do Until Cells(行, 2).Value = ""
>  変換前 = フォルダ & Cells(行, 2).Value
>  変換後 = フォルダ & Cells(行, 4).Value

 '単にこうやって空白かどうかを確認すれば良いんじゃないですか。
   If 変換後 <> "" then
>   Name 変換前 As 変換後
   End if

>  行 = 行 + 1
>   Loop
>End Sub

【59182】Re:空欄の時もリネームする方法
質問  ArtBox  - 08/12/1(月) 15:26 -

引用なし
パスワード
   だ、ダメでした・・・。
相変わらず「同名ファイルがあります」と表示されます。

引き続き、ご教授の程お願い致します。

【59183】Re:空欄の時もリネームする方法
発言  トト  - 08/12/1(月) 15:34 -

引用なし
パスワード
   ▼ArtBox さん:
>もし宜しければ全体像をお教え願えませんか?

Sub ファイル名変更()
 Dim フォルダ As String
 Dim 変換前 As String
 Dim 変換後 As String
 Dim 行 As Long

 フォルダ = Cells(3, 7).Value & "\"
 行 = 3
 Do Until Cells(行, 2).Value = ""
  変換前 = フォルダ & Cells(行, 2).Value
  変換後 = フォルダ & Cells(行, 4).Value
  If (変更前 <> フォルダ) And (変換前 <> 変換後) Then
    Name 変換前 As 変換後
  End If
  行 = 行 + 1
 Loop
End Sub

こんな感じなのですが、ダメでしたか?

【59184】Re:空欄の時もリネームする方法
発言  Jaka  - 08/12/1(月) 15:51 -

引用なし
パスワード
   本当に同名になるファイル名などがあるからじゃないですか?
私が思うにこれが農高だと思います。
ちゃんと確認した方が良いと思いますが。

>>Sub ファイル名変更()
>> Dim フォルダ As String
>> Dim 変換前 As String
>> Dim 変換後 As String
>> Dim 行 As Long
>>
>> フォルダ = Cells(3, 7).Value & "\"
>> 行 = 3
>> Do Until Cells(行, 2).Value = ""
>>  変換前 = フォルダ & Cells(行, 2).Value
>>  変換後 = フォルダ & Cells(行, 4).Value
>
> '単にこうやって空白かどうかを確認すれば良いんじゃないですか。
>   If 変換後 <> "" then
     if Dir(変換後) <> "" Then
      msgbox "同名有"
     else
>>     Name 変換前 As 変換後
     End If
>   End if
>
>>  行 = 行 + 1
>>   Loop
>>End Sub

【59187】私の質問の仕方が悪かったようですので改...
質問  ArtBox  - 08/12/1(月) 21:11 -

引用なし
パスワード
   トトさん
Jakaさん

お返事を有難うございました。
私の質問の仕方が悪かったようですので、
改めて委細を説明させて下さい。

Dir関数を使って、A列に「C:\temp」内のファイル名を表示させています。
B列に変更するファイル名を入力するのですが、
A列のファイル名の内、
例えばですが「0」を含んだファイル名のみを変更したいので、
「0」を含んだファイル名には、B列に新しいファイル名を、
変更しないファイル名は、空欄にしてあります。

この場合、以下のコードを使うと、
[1]のみがファイル名変更され、[2]以降は「同名ファイルがあります」と
表示され処理がここで止まってしますのです。

これを回避して、空欄のところはファイル名変更をせず、
[3]以降に進みたいというのが質問の趣旨でございます。

これらを踏まえ、改めて質問させて頂きますので、
宜しくご教授いただければと思います。

    [A]        [B]        [C]
[1]   0123.pdf    0123_M.pdf
[2]   9876.pdf
[3]   0567.pdf    0567_B.pdf
[4]   8523.pdf
[5]   0698.pdf    0698_Q.pdf

----------

Sub ファイル名変更()
 Dim フォルダ As String
 Dim 変換前 As String
 Dim 変換後 As String
 Dim 行 As Long

 フォルダ = Cells(3, 7).Value & "\"
 行 = 3
 Do Until Cells(行, 2).Value = ""
  変換前 = フォルダ & Cells(行, 2).Value
  変換後 = フォルダ & Cells(行, 4).Value
  Name 変換前 As 変換後
  行 = 行 + 1
   Loop
End Sub

【59188】Re:空欄の時もリネームする方法
発言  ArtBox  - 08/12/1(月) 22:44 -

引用なし
パスワード
   だ、駄目でした・・・

詳細を別のレスで詳しく書きました。
ご確認頂ければと思います

【59189】Re:空欄の時もリネームする方法
発言  ArtBox  - 08/12/1(月) 22:45 -

引用なし
パスワード
   質問の詳細を下の別のレスで書きました。
ご確認頂ければと思います

【59190】Re:私の質問の仕方が悪かったようですの...
発言  かみちゃん E-MAIL  - 08/12/1(月) 22:53 -

引用なし
パスワード
   こんにちは。かみちゃん です。

横から失礼します。

[59188]や[59189]のコメントを書かなくても、きちんと見ていますよ。
トトさんやJakaさんもコメントできる時間が限られているかもしれませんので・・・

>これを回避して、空欄のところはファイル名変更をせず、
>[3]以降に進みたい

以下のようにすればできると思います。
  If 変換後 <> フォルダ Then
   Name 変換前 As 変換後
  End If
なお、3行目以下のB列に空白があれば、そこで、マクロは停止しますが、それでいいのですね?

【59191】Re:私の質問の仕方が悪かったようですの...
質問  ArtBox  - 08/12/1(月) 23:11 -

引用なし
パスワード
   ご回答、有難うございます。

言われてみれば其の通りです。。。
有志のボランティア精神を損なわないように返信したいと思います。

ところで、頂いた回答ですが、「行」が100までありまして、
また、途中に「空欄」が幾つもありますので、
「3行目以下のB列に空白があれば、そこで、マクロは停止」してしまうと、
理想の処理にはならないのです。

Googleで調べたりと、
無い知識で先程から検討してはいるのですが、、、

更なるご返答をお待ちしております。

【59192】Re:私の質問の仕方が悪かったようですの...
発言  かみちゃん E-MAIL  - 08/12/1(月) 23:31 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>「行」が100までありまして、また、途中に「空欄」が幾つもありますので、
>「3行目以下のB列に空白があれば、そこで、マクロは停止」してしまうと、
>理想の処理にはならないのです。

であれば、以下のコードはおかしいです。
Do Until Cells(行, 2).Value = ""
これは、B列の変数「行」のセルが空白になるまでなので、途中に空白があれば
そこでDo 〜 Loopの繰り返し処理は終了します。

そのため、以下のように修正したほうがいいと思います。

☆は、削除する行
★は、追加する行
◆は、あったほうがいい行

Sub ファイル名変更2()
 Dim フォルダ As String '◆
 Dim 変換前 As String '◆
 Dim 変換後 As String '◆
 Dim 行 As Long '◆
 Dim lngMaxRow As Long '★

 フォルダ = Cells(3, 7).Value & "\"
 行 = 3
 lngMaxRow = Cells(Rows.Count, 2).End(xlUp).Row '★
' Do Until Cells(行, 2).Value = "" '☆
 Do Until 行 > lngMaxRow '★
  変換前 = フォルダ & Cells(行, 2).Value
  変換後 = フォルダ & Cells(行, 4).Value
  If 変換前 <> フォルダ And 変換後 <> フォルダ Then '★
   Name 変換前 As 変換後
  End If '★
  行 = 行 + 1
 Loop
 MsgBox "終了" '◆
End Sub

なお、理想の処理にはならないことはわかりましたが、それは、説明不足のような
気がします。
提示されたシートレイアウトでは、最低限のことは処理できるコードを提示しているつもりですので、
それの動作確認の結果を知らせていただくのが先ではないでしょうか?

【59193】Re:私の質問の仕方が悪かったようですの...
発言  かみちゃん E-MAIL  - 08/12/1(月) 23:43 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>>「行」が100までありまして、また、途中に「空欄」が幾つもありますので、
>>「3行目以下のB列に空白があれば、そこで、マクロは停止」してしまうと、
>>理想の処理にはならないのです。
>
>であれば、以下のコードはおかしいです。
>Do Until Cells(行, 2).Value = ""
>これは、B列の変数「行」のセルが空白になるまでなので、途中に空白があれば
>そこでDo 〜 Loopの繰り返し処理は終了します。

今スレッドを読み返して、気づきましたが、トトさんが

>  If 変換前 <> フォルダ And 変換後 <> フォルダ Then '★
>   Name 変換前 As 変換後
>  End If '★

と、私が提示したコードと似たコードをすでに提示されていましたね。
私のコードも、
  If (変換前 <> フォルダ) And (変換後 <> フォルダ) Then '★
のほうがいいかもしれませんが、

大変失礼しました。

それでも
> 相変わらず「同名ファイルがあります」と表示されます。
ということであれば、
Jakaさんがおっしゃっていますが、
> 本当に同名になるファイル名などがあるから
という可能性と、

>>「行」が100までありまして、また、途中に「空欄」が幾つもありますので、
>>「3行目以下のB列に空白があれば、そこで、マクロは停止」してしまうと、
>>理想の処理にはならないのです。
>
>であれば、以下のコードはおかしいです。
>Do Until Cells(行, 2).Value = ""
>これは、B列の変数「行」のセルが空白になるまでなので、途中に空白があれば
>そこでDo 〜 Loopの繰り返し処理は終了します。

の可能性が高いということになります。
それでもエラーが出るようであれば、
  If (変換前 <> フォルダ) And (変換後 <> フォルダ) Then '★
の条件に一致しているということになりますので、
B列とD列の値に、空白ではなく、半角スペースが入っているなど、確認する必要が
あると思います。

【59194】Re:私の質問の仕方が悪かったようですの...
お礼  ArtBox  - 08/12/1(月) 23:56 -

引用なし
パスワード
   失礼しました。

ただ今、頂戴した情報を基に検証しています。
詳細な御返答を頂いたものの動かないというのが現状です。

ご返答にあったとおり、
どこかに他の不具合が在る事と思って見直しをしを進めたいと思います。

大変勉強になりました。
有難うございます。

【59234】Re:私の質問の仕方が悪かったようですの...
発言  かみちゃん E-MAIL  - 08/12/2(火) 21:49 -

引用なし
パスワード
   こんにちは。かみちゃん です。

> 動かないというのが現状です。
> どこかに他の不具合が在る事と思って見直しを進めたい

今気づきましたが、変換条件は、A列に変換前、B列に変換後なのですか?

  変換前 = フォルダ & Cells(行, 2).Value
  変換後 = フォルダ & Cells(行, 4).Value

というコードでは、B列に変換前、D列に変換後のファイル名が設定してあるもの
という前提です。

もしかして、「変換後」という変数が期待通りに格納されていないのではないでしょうか?

【59235】Re:私の質問の仕方が悪かったようですの...
発言  PN  - 08/12/2(火) 21:53 -

引用なし
パスワード
   横レス失礼です。
教えて貰ってばかりですので、理解できた範囲で発言させて下さい。

ArtBoxさんがしたいのは、結局は↓の様なリネームをしたいってことではないかと思いました。(違ったらスミマセン)
これだと、同名ファイルが出てきたら、ファイルの末尾にでも01とか02とかをつける処理をしないと、いつまでたっても解決しないのではないかと。。。

何の助けにもならないかもしれませんが、できる限りの助けということで。。。


    [A]        [B]
[1]   0123.pdf    0123_M.pdf
[2]   9876.pdf
[3]   0567.pdf    0123_M.pdf
[4]   8523.pdf    0123_M.pdf
[5]   0698.pdf    0123_M.pdf

【59236】Re:空欄の時もリネームする方法
質問  PN  - 08/12/2(火) 23:41 -

引用なし
パスワード
   色々と調べてみた結果、質問をしておいて大変申し訳ないのですが、
どうやら空欄が最終的な問題ではなく、
かみちゃんさんの「変数が格納されていないこと」と、
Jakaさんと「本当に重複ファイルがある」が理由だったようです。

失礼しました。

「変数が格納されていないこと」は直ぐに対応しましたが、
「本当に重複ファイルがある」は、別のデータからファイル名を貰っているため、
B列の変更後のファイル名をいじる事はできないので、
PNさんの重複ファイルがあったら
末尾に何かしらの文字列をつける他ない用に思ってます。

まだ、フォローを頂けるのであれば、何方かフォローして頂ければ助かります。

【59237】Re:空欄の時もリネームする方法
発言  かみちゃん E-MAIL  - 08/12/3(水) 0:45 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>色々と調べてみた結果、質問をしておいて大変申し訳ないのですが、
>どうやら空欄が最終的な問題ではなく、
>かみちゃんさんの「変数が格納されていないこと」と、
>Jakaさんと「本当に重複ファイルがある」が理由だったようです。
>
>失礼しました。

PNさん=ArtBoxさんなのですか?

>PNさんの重複ファイルがあったら
>末尾に何かしらの文字列をつける他ない用に思ってます。
#59235より
> ArtBoxさんがしたいのは

ともコメントされているのですが、よくわかりません。

>まだ、フォローを頂けるのであれば、何方かフォローして頂ければ助かります。

PNさんに対してですか?ArtBoxさんに対してですか?
どのようなフォローを望んでおられるのでしょうか?

【59246】回答は結構です。
発言  ArtBox  - 08/12/3(水) 16:17 -

引用なし
パスワード
   何か疑念があるようですし、
嫌がらせを受けているような気がしないでもないので、
回答は結構です。

私は、PNさんではありませんよ??

【59256】Re:回答は結構です。
発言  かみちゃん  - 08/12/3(水) 20:46 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>何か疑念があるようですし、
>嫌がらせを受けているような気がしないでもないので、
>回答は結構です。

何か勘違いしていませんか?

>私は、PNさんではありませんよ??

これは、[59236]のPNさんの発言で
>>PNさんの重複ファイルがあったら
というものがありますが、PNさんご自身のことを「PNさん」と表現されるのは、
どういうこと?発言内容全体を通しても、ArtBoxさんが書かれたのでは?と
「疑念」を持ちました。

でも、それは、混乱の元ですが、どうでもいいことで、

>>>まだ、フォローを頂けるのであれば、何方かフォローして頂ければ助かります。
>>
>>PNさんに対してですか?ArtBoxさんに対してですか?
>>どのようなフォローを望んでおられるのでしょうか?

が本心です。

それも百歩譲って、私の勘違いでしたら、その「疑念」は取り下げますが、

>嫌がらせを受けているような気がしないでもないので、
>回答は結構です。

という前に、[59234]で私が書かせていいだいた

>> 変換条件は、A列に変換前、B列に変換後なのですか?
>>
>>  変換前 = フォルダ & Cells(行, 2).Value
>>  変換後 = フォルダ & Cells(行, 4).Value
>>
>>というコードでは、B列に変換前、D列に変換後のファイル名が設定してあるもの
>>という前提です。

は、ご覧いただいているのでしょうか?
ArtBoxさんが、それの反応も示さずに、

>嫌がらせを受けているような気がしないでもないので、
>回答は結構です。

は、なんだか、心外です。
PNさんとは別人であるArtBoxさんに対しては、きちんと、アドバイスさせていただ
いたつもりなのに、残念です。

ちなみに、PNさんが

> Jakaさんと「本当に重複ファイルがある」が理由だったようです。

と、あたかもArtBoxさんのパソコンを見たかのように書かれていますが、
これは、変換後という変数に格納されているファイルが存在している場合ですので、
それの存在チェックをする方法があります。

If Dir(変換後) <> "" Then
 MsgBox "変換後のファイル名はすでに存在します" & vbCrLf & 変換後
Else
 MsgBox "変換後のファイル名はすでに存在しないため変換処理します"
 '変換処理のコード
End If

3960 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free