[[20230620133022]] 『ファイル名の変更』(悩める人) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『ファイル名の変更』(悩める人)

EXCEL(VBA)でファイル名の変更を時々行いますが
EXCELでは、ダメな場合が多々発生します。
(加えてOSでファイル名に使えないも文字列もあります。)

例えば、
A1に変名候補、B2に変名後を配置するとして

A1 HONDA - CIVIC.TYPE.R 4R23C を
B1 HONDA CIVIC.TYPE.R (4R23C) と変名したいとしても
コンマがあるのでNGです。

こんな時、ダメ文字があれば_(アンダーバー)に変換して
仮にファイル名を変名したいとすればどうすれば良いですか ?

変名後
B2 HONDA CIVIC_TYPE_R (4R23C)

< 使用 Excel:Excel2021、使用 OS:Windows10 >


 検証はしてませんが、過去ログを紹介しておきます。

[[20170522134013]] 『ファイル名に機種依存文字が含まれる場合』(天国耳)
(MK) 2023/06/20(火) 13:44:49


 >A1 HONDA - CIVIC.TYPE.R 4R23C を
 >B1 HONDA CIVIC.TYPE.R (4R23C) と変名したいとしても
 >コンマがあるのでNGです。
 ピリオドのことでしょうか? "."はピリオド ","がコンマです

 それは置いておいて、
 Name "HONDA - CIVIC.TYPE.R 4R23C" As "HONDA CIVIC.TYPE.R (4R23C)"
 は普通に実行可能で、結果もちゃんとファイル名が変更されますけど、
 >コンマがあるのでNGです。
 の意味が分かりません  
(´・ω・`) 2023/06/20(火) 14:51:56

´・ω・` さん、例題が不備でした。

コンマの例題の件は、忘れてください。

A1の変名候補に変名できない文字列がある場合とお考え下さい。

MKさんの参考URLの Function UNICODEDEL で
「文字列からファイル名に使えない文字を削除して返す」と合ったので

VBAの標準モジュールにコードをコピペして試してみました。

    |[A]                        |[B]         
 [1]|HONDA - CIVIC.TYPE.R 4R23C|=UNICODE(A1)

B1に「72」と表示されますが、これはどういう事ですか ?

(悩める人) 2023/06/20(火) 15:28:05


 まず、間違いを認めて、指摘を感謝するのがスタートじゃないのかな。
 UNICODEワークシート関数と
 UNICODEDEL関数(ユーザー定義のプロシージャ)はまったく別の物ですけど、
 理解されていますか?
 噛み合う会話にするようにしてください。

(xyz) 2023/06/20(火) 15:50:39


 ファイル名に使えない文字 \ / : * ? " < > | を _ におきかえて、かつ
 ExcelVBAで対応できないUNICODE文字を下駄におきかえます
 あとはお好きなようにどうぞ

    Function PathString(s)
       Dim retstr As String, c As String
       For i = 1 To Len(s)
          c = Mid(s, i, 1)
          If Chr(Asc(c)) = ChrW(AscW(c)) Then
             If c Like "[\/:*?""<>|]" Then
                retstr = retstr & "_"
             Else
                retstr = retstr & c
             End If
          Else
                retstr = retstr & "〓"
          End If
       Next
       PathString = retstr
    End Function
(´・ω・`) 2023/06/20(火) 16:54:56

xyzさん、私の凡ミスです。
お詫びいたします。

Function UNICODEDEL と言っておきながら
=UNICODE(A1)と記入してしまっていました。

正しくは、=UNICODEDEL(A1)

   |[A]                        |[B]         
 [1]|HONDA - CIVIC/TYPE/R 4R23C|=UNICODEDEL(A1) ---> HONDA - CIVIC/TYPE/R 4R23C

HONDA - CIVIC/TYPE/R 4R23C と 結果が変わりません。
コード的には、正解なのでしょうか ?

´・ω・`さん、上手く処理できました。
ありがとうございます。

HONDA - CIVIC_TYPE_R 4R23C に変換されました。

(悩める人) 2023/06/20(火) 17:39:15


 UNICODEDE関数は UNICODE文字を削除する関数です。そういう処理をしています。正解です
 ちゃんとコードを理解して使うようにしましょう

 パクッとコピペして動いたっ! で終わってしまえば、いつまでも他人頼りのままです
(´・ω・`) 2023/06/20(火) 17:48:42

ありがとうございます。

理解不足でした。
UNICODEDE関数は UNICODE文字(だけ)を削除する関数なのですね。

以下を試して 頰 が削除されました。

HONDA - 頰 CIVIC/TYPE/R 4R23C  ----> HONDA - CIVIC/TYPE/R 4R23C

(悩める人) 2023/06/20(火) 18:27:35


 ちょっとおもいついて

  Dim FSO As Object
  Set FSO = CreateObject("Scripting.FilesystemObject")
  Dim newFilename As String

  newFilename = Range("A1").Value
  FSO.MoveFile Range("A1").Value, Range("B1").Value
 
 とやったら、UNICODE文字列が含まれていても対応できました
 ので、Name ステートメントを使うのをやめればいいんじゃないでしょうか
(´・ω・`) 2023/06/21(水) 12:50:10

´・ω・`さん、お気遣いいただきありがとうございます。

EXCEL利用の背景を説明していなかったので簡単に説明しますと
EXCELでファイル名(+サイズ情報)を記載したTEXTファイルを作成します。
作成されたTEXTファイルを他のアプリに読み込ませて最終的な加工をして
ファイルを出力します。

他のアプリでファイルを作成する場合も
ファイル名は、Unicode 文字セットを使っている名前はNGとエラーが出るようです。

つまり、Excelは中間加工用のツールとして利用していて
Name ステートメントを今回のケースでは利用する事はありません。

他のアプリでは、ファイル名に使えない文字(及びUnicode 文字セット)が出ると
その都度エラー表示が出て処理が中断するので煩わしいのですが
EXCELで´・ω・`さんのコードで事前に対策しておくと煩わしさから解放されます。

(t悩める人) 2023/06/21(水) 14:21:12


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.