[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『ファイル名の変更』(悩める人)
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
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.