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

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

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

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

Q&A

解決済

1回答

787閲覧

Unicodeを含む文字列のフォルダを作成したい。

rasurabu

総合スコア3

VBA

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

0グッド

0クリップ

投稿2021/10/21 05:11

Unicodeを含む文字列のフォルダを作成したい。

独学でVBAを勉強して、社内のエクセルの便利化を図っているものです。

氏名に「茢なにがし」さんがおりその方の名前のフォルダをVBAで
作ろうとしたときに、茢→?となってしまい「実行エラー76 パスが見つかりません」
となってしまいます。

このような方の名前のフォルダを作るにはどうしたらよいでしょうか?

該当のソースコード

Range("A1").value = 茢なにがし
とします。

Sub tesuto() Dim c As String Dim d As String c = Range("A1").Value d = "C:\Users\user\Desktop\" & c MkDir d 'ここでエラーとなる 'Range("A2").Value = c 'ためしにA2へ文字をいれると、普通に茢なにがしとなる 'ActiveSheet.Hyperlinks.Add Anchor:=Range("A2"), Address:=d  'ハイパーリンクも同様につきました End Sub

補足情報(FW/ツールのバージョンなど)

環境はWindows10 Microsoft 365 のエクセルです。
本来は、特定のセルの文字のフォルダを作って、そのフォルダのリンクを張るという
プログラムなのですが、上記のように特定(Unicode?)の文字がはいった方の
フォルダを作ろうとすると?になってしまい、それがWinの使用不可文字にひっかかり
フォルダが作成できない(パスがみつからない)ようです。

とりあえずReplace関数
Replace(c, "?", "")を試しましたが、
茢→?となっている部分は普通の?としては認識されておらず、
だめだったとおもいます。(A2に文字を返したのはその確認のため)

会社で使いたいので、Win10エクセルが絶対の環境で
以上の問題がどうにかなりますでしょうか…?

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

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

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

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

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

guest

回答1

0

ベストアンサー

これでどうでしょう。
VBAのエディタ・デバッガはUnicode非対応なので、Shift_JISで表示出来ない文字は"?"に化けます。

vba

1Option Explicit 2 3Private Declare PtrSafe Function CreateDirectoryW Lib "kernel32.dll" ( _ 4 ByVal stringlpPathName As LongPtr, _ 5 ByVal lpSecurityAttributes As LongPtr) As Integer 6 7'CreateDirectoryWを使う方法 8Private Sub MkDirUnicodeAPI(ByVal path As String) 9 Call CreateDirectoryW(StrPtr(path), 0) 10End Sub 11 12'FileSystemObjectを使う方法 13Private Sub MkDirUnicodeFSO(ByVal path As String) 14 On Error Resume Next 15 Dim fs As Object 16 Set fs = CreateObject("Scripting.FileSystemObject") 17 Call fs.CreateFolder(path) 18 Set fs = Nothing 19End Sub 20 21Private Sub CommandButton1_Click() 22 Dim c As String 23 Dim d As String 24 25 c = Range("A1").Value 26 27 MkDirUnicodeAPI "C:\test\" & c & "_API" 28 MkDirUnicodeFSO "C:\test\" & c & "_FSO" 29End Sub

他関数も対応していないものがありそうな気がしますし、別アプリでもUnicode非対応のものは割とあるので、本当にそういった文字をファイルパスに含めていいのかどうかは良く考えてください。

投稿2021/10/21 05:34

編集2021/10/21 06:02
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

rasurabu

2021/10/21 22:59

ありがとうございます! 見よう見まねですが、本来のシステムに組み込むこともできました。 正直、前半はよくわかっていませんが… そこは精進していこうと思います。 懸念されている、文字をファイルパスに~ということですが 基本ワンオフのプログラムで、拡張性は考慮していません。 環境もWin+エクセルに縛られているので たちまちは大丈夫かなと思います。 この度はありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問