[[20210826164256]] 『実行エラー1004 入力されたシートまたはグラフの』(雅俊) ページの最後に飛ぶ

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

 

『実行エラー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

ANYリサーチ
ATEC浅田産業
BX精機 株式会社
i店舗ラボ
アルファベット+漢字 はダメです
アルファベット+カタカナはダメです

カタカナだけダメです。
漢字だけ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


'(シングルクォーテーション)の疑いアリですよね?
(#) 2021/08/26(木) 18:58

同じ名前変のシートがすでにあったりとか
エラーメッセージ違うかな?
(とおりすがり) 2021/08/26(木) 19:05

ActiveSheet.Name = "請求書発行_" & ws02.Range("請求先") の_アンダーバーとアルファベットとカタカナの兼ね合いでしょうか?
(雅俊) 2021/08/26(木) 20:04

 とりあえず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


臼茶さんの言われる通りFunction NCREncodeをコピーして
Debug.Print NCREncode(ws02.Range("請求先"), True)を ActiveSheet.Name = "請求書発行_" & ws02.Range("請求先") の直前に入れて実行しイミデェットウインドウを見たら

#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


すいません解りました。
#32=空白(スペース)で請求先をコピーする時に何らかの形で空白(スペース)をコピーしていたようです。
コピーの際やコピーした後、空白を取り除くコードを教えて頂けないでしょうか?
(雅俊) 2021/08/29(日) 08:50

>空白を取り除く
置換したらいいんじゃないですか?

(もこな2 ) 2021/08/29(日) 13:08


>何らかの形で空白(スペース)をコピーしていたようです。
これを解決しなければ何の意味もないのでは。
(#32) 2021/08/29(日) 13:32

結局質問者の見落としと言う結果ですか。
(見落) 2021/08/29(日) 13:47

 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

>Range("請求先").Value)が範囲名だからでしょうか?
セルの名前からどうやって会社名を抜き出しているのだろうか。
コード全体が分からないので何とも言えません。

(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.