[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『実行エラー1004 入力されたシートまたはグラフの名前が正しくありません』(雅俊)
ws02.Copy After:=Worksheets(Worksheets.Count) 'シート「請求書」をコピーしてシートの末尾に作成します。
ActiveSheet.Name = "請求書発行_" & ws02.Range("請求先") 'コピーしたシート名に名前「請求書発行_」+会社名 Range("請求先")には会社名が入っており日本名(山木産業)では上手くシート名が入りますが 英数字の会社名(Akカンパニー)では実行エラー1004 入力されたシートまたはグラフの名前が正しくありませんと出るのはなぜでしょうか?
< 使用 Excel:Excel2019、使用 OS:Windows10 >
エラーになるときは↓はどうなっていますか?
ws02.Range("請求先").Value
(もこな2 ) 2021/08/26(木) 17:01
会社名に :\?[]/* が含まれているということはないだろうか? (ねむねむ) 2021/08/26(木) 17:04
:\?[]/*はついてないです。 (雅俊) 2021/08/26(木) 17:19
エラーとなる会社名をEXCEL上でコピーしてここに張り付けてもらうことはできるだろうか? もし、掲示板に張り付けるのが問題あればセルに入れている会社名を一文字ずつ短くして どの文字が問題かはわかるだろうか? (ねむねむ) 2021/08/26(木) 17:23
もしくは、会社名で25文字を超えているものがないか確認。 シート名全体で31文字以内である必要があります。 (*) 2021/08/26(木) 17:33
カタカナだけダメです。
漢字だけOK
(雅俊) 2021/08/26(木) 17:48
以下のコードで試しましたが、普通にシートが追加されたので、 別の問題があるように思います。
Sub test() Dim s For Each s In Array("ANYリサーチ", "ATEC浅田産業", "BX精機 株式会社", "i店舗ラボ") Sheets("Sheet1").Copy After:=Worksheets(Worksheets.Count) ActiveSheet.Name = s Next End Sub (*) 2021/08/26(木) 18:41
半濁音含まれてますか?
(遠隔操作店) 2021/08/26(木) 18:51
とりあえずBasicLatinの範囲の文字でエラーメッセージを確認してみました。 末尾がシングルクォートの場合にもエラー出ましたね。(途中のシングルクォートはエラー出ない)
Sub test1() Dim i As Long For i = 1 To 255 On Error Resume Next ActiveSheet.Name = "請求書発行_" & ChrW(i) & "1" If Err.Number <> 0 Then Debug.Print i, ChrW(i), Err.Number; Left$(Err.Description, 30) On Error GoTo 0 Next End Sub 42 * 1004 入力されたシートまたはグラフの名前が正しくありません。次の点 47 / 1004 入力されたシートまたはグラフの名前が正しくありません。次の点 58 : 1004 入力されたシートまたはグラフの名前が正しくありません。次の点 63 ? 1004 入力されたシートまたはグラフの名前が正しくありません。次の点 91 [ 1004 入力されたシートまたはグラフの名前が正しくありません。次の点 92 \ 1004 入力されたシートまたはグラフの名前が正しくありません。次の点 93 ] 1004 入力されたシートまたはグラフの名前が正しくありません。次の点
Sub test2() Dim i As Long For i = 1 To 255 On Error Resume Next ActiveSheet.Name = "請求書発行_" & ChrW(i) If Err.Number <> 0 Then Debug.Print i, ChrW(i), Err.Number; Left$(Err.Description, 30) On Error GoTo 0 Next End Sub 39 ' 1004 入力されたシートまたはグラフの名前が正しくありません。次の点 42 * 1004 入力されたシートまたはグラフの名前が正しくありません。次の点 47 / 1004 入力されたシートまたはグラフの名前が正しくありません。次の点 58 : 1004 入力されたシートまたはグラフの名前が正しくありません。次の点 63 ? 1004 入力されたシートまたはグラフの名前が正しくありません。次の点 91 [ 1004 入力されたシートまたはグラフの名前が正しくありません。次の点 92 \ 1004 入力されたシートまたはグラフの名前が正しくありません。次の点 93 ] 1004 入力されたシートまたはグラフの名前が正しくありません。次の点
また、ActiveSheetをWorksheet型の変数に入れてやってみると、Descriptionに変化が。 Sub test3() Dim i As Long, w As Worksheet Set w = ActiveSheet For i = 1 To 255 On Error Resume Next w.Name = "請求書発行_" & ChrW(i) If Err.Number <> 0 Then Debug.Print i, ChrW(i), Err.Number; Left$(Err.Description, 30) On Error GoTo 0 Next End Sub 39 ' 1004 入力されたシートまたはグラフの名前が正しくありません。次の点 42 * 1004 'Name' メソッドは失敗しました: '_Workshee 47 / 1004 'Name' メソッドは失敗しました: '_Workshee 58 : 1004 'Name' メソッドは失敗しました: '_Workshee 63 ? 1004 'Name' メソッドは失敗しました: '_Workshee 91 [ 1004 'Name' メソッドは失敗しました: '_Workshee 92 \ 1004 'Name' メソッドは失敗しました: '_Workshee 93 ] 1004 'Name' メソッドは失敗しました: '_Workshee
(白茶) 2021/08/26(木) 20:20
>ActiveSheet.Name = "請求書発行_" & ws02.Range("請求先") の_アンダーバーとアルファベットとカタカナの兼ね合いでしょうか? 私の環境ではアンダーバーとアルファベットでも問題なくリネーム出来ています。
疑うべき箇所は、もこな2さんがご指摘されている様に、 ws02.Range("請求先").Value ここではないでしょうか? リネームする直前にイミディエイトに書き出して確認されてはどうでしょう?
>白茶さん 再現検証ありがとうございました。 「たちまち」を使う白茶さんに好感持ってますよ(^^) ※同郷ではありません。
※誤記訂正。お恥ずかしい。08:02
(#) 2021/08/27(金) 07:14
ちょい補足で。 'は末尾だけではなく先頭でもエラーになるようだ。 手入力でも先頭ではそもそも'キーを打っても反応せず、途中には入力可でエラーも出ず、末尾には入力は出来るが エラーとなるといった状況だった。 (ねむねむ) 2021/08/27(金) 08:51
ファイル名に[]を含んでる場合の不具合ってのも事例があるようですが、 それは今回あまり関係無さそう。
やっぱ先にRange("請求先")内の文字列をハッキリさせたいですね。
後ろに半角スペースが大量に付いてたりとかだったら、多分気付くと思うんですけど、 目視できない文字(セパレータとか)が混入してたりすると セルの中でもシートタブでもイミディエイトでも、パッと見で判別できないですから、 1文字ずつ文字コードを確認した方が良いかもですね。 そのせいで文字数制限超えちゃってても気付けないですから。
まぁ可能性の低い話とは思うんですがね...
少なくともRange("請求先")内の文字列が問題なのか、そうじゃないかくらいは見えるんじゃないかな? 宜しければ文字参照に変換する関数ありますんで、それで確認してみます?
Function NCREncode(StrUTF As String, Optional Full As Boolean, Optional AsHex As Boolean) As String Dim c As Long, p As Long Dim b() As Byte, bc(0 To 1) As Byte, bs As String Dim h As Long b = StrUTF For c = LBound(b) To UBound(b) Step 2 p = b(c + 1) * &H100& + b(c) If p >= &H20& And p < &H7F& And Not Full Then bc(0) = b(c): bc(1) = b(c + 1): bs = bc NCREncode = NCREncode & bs ElseIf p >= &HD800& And p < (&HD800& + &H400&) Then h = (p - &HD800&) * &H400& ElseIf p >= &HDC00& And p < (&HDC00& + &H400&) Then h = h + (p - &HDC00&) + &H10000 ' NCREncode = NCREncode & "" & IIf(AsHex, "x" & Hex(H), H) & ";" NCREncode = NCREncode & "#" & IIf(AsHex, "x" & Hex(h), h) & ";" h = 0 Else ' NCREncode = NCREncode & "" & IIf(AsHex, "x" & Hex(p), p) & ";" NCREncode = NCREncode & "#" & IIf(AsHex, "x" & Hex(p), p) & ";" End If Next End Function
Debug.Print NCREncode(ws02.Range("請求先"), True) を ActiveSheet.Name = "請求書発行_" & ws02.Range("請求先") の直前に入れて実行 でもいいし、 セルに「=NCREncode(請求先,TRUE)」でも。
わざと頭に[&]が付かない結果が出る様に変えてますので、 結果をそのままアップしていただければ、皆さんにも内容が確認出来ると思います。 (もちろんアップは差し支えなければ...ですけど)
(白茶) 2021/08/27(金) 14:43
#32が付いている請求先(LINKS株式会社)にはエラーメッセージが出てシートを作ることができません
#32を削除するにはどのようにすればいいのでしょうか?
ご指導のほどお願いいたします。。
A#65313;N#65326;Y#65337;リ#12522;サ#12469;ー#12540;チ#12481;(ANYリサーチ)
A#65313;T#65332;E#65317;C#65315;浅#27973;田#30000;産#29987;業#26989;(ATEC浅田産業)
B#65314;X#65336;精#31934;機#27231; #32;株#26666;式#24335;会#20250;社#31038;(BX精機 株式会社)
i#65353;店#24215;舗#33303;ラ#12521;ボ#12508;(i店舗ラボ)
L#76;I#73;N#78;K#75;S#83;株#26666;式#24335;会#20250;社#31038; #32; #32; #32; #32; #32; #32; #32; #32; #32; #32; #32; #32; #32; #32; #32; #32; #32; #32; #32; #32;(LINKS株式会社)
(雅俊) 2021/08/29(日) 08:34
(もこな2 ) 2021/08/29(日) 13:08
ws02.Copy After:=Worksheets(Worksheets.Count) 'シート「請求書」をコピーしてシートの末尾に作成します。 Debug.Print NCREncode(RTrim(ws02.Range("請求先")), True) ActiveSheet.Name = "請求書発行_" & RTrim(ws02.Range("請求先").Value) 'コピーしたシート名に名前「請求書発行_」+会社名
すいませんでした。RTrim()文字列の末尾の空白を削除する解決しました。でもなぜコピーする際に末尾に空白が入ってしまうのでしょうか?
Range("請求先").Value)が範囲名だからでしょうか?
(雅俊) 2021/08/29(日) 14:28
(もこな2 ) 2021/08/29(日) 15:02
コードの全容がわかりませんので断言はできませんが、 イミディエイトへの出力結果を見るに、 何かしらのリストをループして参照してますよね? そのリストはcsvからの取り込みとかですか。 だとすると、まさに白茶さんの指摘通り 「目視できない文字(セパレータとか)が混入してたりする」 ということではないでしょうか。
#てっきり提示された会社名全てがエラーになるものとばかり。。。 (#) 2021/08/29(日) 15:03
(jk) 2021/08/29(日) 15:40
なんだー。半角スペースだったんですね。
>なぜコピーする際に末尾に空白が入ってしまうのでしょうか? 元々「ws02.Range("請求先")」に入力されていた文字列に半角スペースがくっ付いていた と考えるのが自然でしょうね。 シートを「コピーする際に」とは考えにくいです。
Range("請求先")が手入力だったのか、どこかからコピペしたのかで違いが出たのではないでしょうか? 例えばデータベース(oracleとか)からエクスポートした取引先一覧等からRange("請求先")にコピペしたとか。
元テーブルの該当カラムが固定長で定義されていたら、不足バイト分に半角スペースが埋め込まれます。 これをそのままSELECT文で抽出すると半角スペース付きのデータになってしまいます。 そういったファイルから「ws02.Range("請求先")」にコピペしてたんじゃないかと思います。
それとも元々「ws02.Range("請求先")」の入力値に半角スペースが無い事は確認済みだったんですかね? (だとするとシートコピー以前の処理に何か原因があるかもですけど)
(白茶) 2021/08/30(月) 11:06
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.