私は以下の内容でExcelVBA関係の掲示板に質問を出そうとしていました。
しかし執筆開始時点での半分の自己解決状態は、この文章を書き終わった直後に完全解決してしまいました。
今更質問するのもあれなので、ここに記録として載せておきます。
私以外の誰かが同じ疑問を持つかもしれないし、検索してもなかなか解決できないだろうから、そんな人の助けになれば幸いです。
結論は最後の方に書いています。
EXCEL-VBAのRange.TextToColumnsメソッドにあるパラメーターTrailingMinusNumbers
はどのような機能なのか教えて下さい。
半分は自己解決したのですが、最終的に確認しておきたいことがあります。
まずパラメーターの名称の意味が分かりません。
「負値を引きずる」???
Micorsoftの公式文書でRange.TextToColumnsメソッドの解説を読んでもさっぱり分かりません。該当部分は以下のようになっています。
日本文:負記号で始まる数値です。
英文:Numbers that begin with a minus character.
日本文は英文からの翻訳になっていて、ここにはお得意の誤訳はなさそうです。
いずれにせよ、その意味はわかりません。
「負記号で始まる数値です」と言われても、ではそうではないケースは何でしょうか。
負値であれば「三角記号▲で始まる数値」とか、「括弧で囲われた数値」とか。
でも負値は負記号(マイナス)で始まるのが普通だから、それをわざわざパラメーターで指定するかなあ。
「正記号で始まる数値」だったらどうか。うーん。正値に正記号(プラス)を付けることはあり得るけど、これが「負記号で始まる数値です」の反対定義と見なすのも変だなあ。
結局よくわかりません。
ネットで検索しても、この疑問に答えてくれるところが見つかりません。
どこも「負記号で始まる数値です」と公式の文書を写しただけでお茶を濁しています。
なんだか「よく分かんないけどどうでもいいや」と放置しているような印象です。
私自身にとっても、これが何なのか分からなくても実用上の支障は全くありません。
でもスッキリはしません。
なので単なる好奇心でもう少し調べてみました。
このパラメーターが「データツール」の「区切り位置」で詳細設定の中にある「負の数はマイナスを表示する(M)」に対応したものであることはマクロの記録によって簡単に分かります。
しかし「負の数はマイナスを表示する」と「負記号で始まる数値です」はその意味するところが微妙に違うし、そもそも「だから何?」が判読できないので、余計に分からなくなりました。
そのため、これを指定した場合と指定しなかった場合で結果がどう違うのかを実際に確認してみました。
試したデータの例:これをA列に入れて「区切り位置」をコンマ指定で実行します。
10,-10,20,-20
-10,10,-20,20
-10,-10,-20,-20
但し先頭がマイナス記号の場合は、その前に「'」を入れないとエラーになります。
各行のデータ全体を""で囲うと「'」は必要はありません。
これ以外にも途中に文字を加えたりして色々なデータを作って試したのですが、「負の数はマイナスを表示する(M)」チェックの有り無しにかかわらず結果はどれも同じになりました。
ここでExcelのオプションで言語を英語にしてみました。すると「負の数はマイナスを表示する(M)」の表記は "Trailing minus for negative numbers." になりました。これはパラーメーターの名称TrailingMinusNumbers
に似た表現です。
直訳すると「負値のためにマイナスを引きずる」です。
Google翻訳では「負の数の場合は末尾のマイナス」となりました。
これを見てもしかしてと思って次のようなデータを作ってみました。
10,10-,+20,20-
10-,10,20-,20
10+,-10,20-,-20
すると、TrailingMinusNumbers
パラメーターがTrueの場合とFalseの場合で結果に違いが出ました。
##Trueの場合
10 -10 20 -20
-10 10 20 -20
10+ -10 -20 -20
##Falseの場合
10 10- 20 20-
10- 10 20 20-
10+ -10 20- -20
どちらの場合も4つの結果はA,B,C,D列に分かれて表示されます。
False指定の場合の「10-」と「20-」「10+」は文字列として表示されました。それ以外は数値です。
「10+」はTrueでもFalseでも文字列になりました。
「+20」はTrueでもFalseでも数値になりました。
つまり、TrailingMinusNumbersは元データで数値の後にマイナス記号がある場合にそれを負値と見なすか、見なさないかを指定するパラメーターであるということです。
また、TrailingMinusNumbers
パラメーターの機能がこれだけなのであれば、Microsoftの公式文書にある説明はデタラメだったということになります。
負記号で始まる(begin)のではなく、終わるのですから。
こういうことはMicrosoftの文書にはよくあることなので言わずもがなではあります。
でも日本文だけでなくその元の英文も間違っているのは少し珍しいですかね。
さて、ここまでで確認したことが仮に正しいとしても、疑問はまだ残ります。
#【質問】
1. アメリカ人は"10-"のような、"数値-"の表記を本当に使うのでしょうか。
TrailingMinusNumbers
はそのために用意されたパラメーターなのでしょうか。
2. TrailingMinusNumbers
によって結果が変わるデータは"数値-"以外にありませんか。
3. 上の質問1が正しい場合、TrailingMinusNumbers
というパラメーター名称はどう解釈すればいいのでしょうか。
この名称から「末尾にマイナスのある数値(が存在する場合それを負値として扱う)」という意味を読み取ることはできるのでしょうか。
"Trailing minus for negative numbers."の途中を省略しただけなのでしょうか。
ここまで書いて質問として投稿する前に、念のためと思って「マイナス記号を数値の後に付ける」で検索したら、以下のサイトが見つかりました。
Excelでマイナス記号を右から左/後ろから前に移動するにはどうすればよいですか?
これは翻訳後のページらしいので、元ネタは英文、つまりアメリカ人向けの情報です。
やっぱりアメリカ人は"数値-"を使うんですねえ。
それに対応するためにTrailingMinusNumbersパラメーターがあるということです。
これにて解決。
結局、「公式文書がデタラメだからユーザーが混乱する」という、いつもの結果に終わりました。
#【結論1】
TrailingMinusNumbers
パラメーターの解説
EXCEL-VBAのRange.TextToColumns
メソッドにあるパラメーターTrailingMinusNumbers
は、メソッドの処理対象に"数値-"という形式のデータがある場合に、それを負値の数値とみなすか、みなさないかを指定するパラメーターです。これをFlaseにしてみなさないを指定した場合は**"数値-**"という形式のデータはそのままの文字列として扱われます。
それ以外の形式のデータには、このパラーメーターがTrueでもFalseでも全く影響がありません。
負値を"数値-"という形式で表現するデータは日本ではあまり目にすることがありませんから、このパラメーターを意図的に使う場面は少ないと思われます。デフォルトのTrueにしておいて問題ありません。
但し金額データで "¥12345-" のように数字の末尾にハイフンがあるTextの場合は注意が必要です。このデータをTrueで分割すると、¥が通貨記号、-が負記号と解釈され、「"#,##0;[赤]-#,##0"」という表示形式が設定された負値データ ¥-12345 になってしまいます。
また更に、"¥12,345-" のような桁区切りのコンマが含まれるデータをコンマ区切りでTrue指定の分割をすると、"¥12","-345" という2つのデータに分けられてしまいます。
金額末尾にハイフンがある場合は、それが負値を表すのでない限りFalseを指定する必要があります。この場合その部分は数値とはみなされず、"¥12345-" という文字列として処理されます。
また当然ながら桁区切りコンマのあるデータをCSVとして扱ってはいけません。
注意 :ここでは¥記号は半角だと \ (バックスラッシュ)になってしまうので、全角¥で表示しています。
#【結論2】
Microsoftの公式文書をそのまま鵜呑みにすると痛い目に遭うことがあります。
改めて言うまでもなく周知の事実かな。
この結論2はここのガイドラインの「特定の個人または団体を否定する」に抵触するのかなあと少しビクビクしています。
でもあの公式解説は明らかな間違いですよね。
#【感想1】
「区切り位置」ダイアログの「詳細」フォームに"Trailing minus for negative numbers."と表記するのは、アメリカで"数値-"という形式のデータが普通に使われているのであれば、まああり得るかなとは思います。
しかし日本人には通じないでしょう。
それにしても、公式文書の解説部分に"Numbers that begin with a minus character."と書いたアホは何を考えていたのか。
このパラメーターを指定すれば「"数値-"が"-数値"という『マイナス記号で始まる数値』になりまっせ」というつもりなのか。
それとも一般のアメリカ人はこの表現でただちに理解できるのかなあ。
であれば、
Microsoftは世界を相手に商売しながら、自国以外のユーザーにはあまり配慮していないのだろうと思われます。機械翻訳の酷さはお笑いレベルですしね。
現場のエンジニアにそれを求めるのは酷かもしれません。
企業の経営哲学がちゃんとしていれば対応することも可能のはずですけれどね。
#【感想2】
Excelの操作やVBAの解説をしてくれるサイトが沢山あります。
サイトの作り手(管理人)はプロからアマチュアまで、レベルも千差万別。
私自身もよくお世話になるサイトが幾つかあります。
意図的にそこを開いているというより、様々な目的の検索で上位に表示されるからということが多いかな。
役に立つのは管理人さんの個人的な経験をベースにした解説ですね。
「こんな機能使う必要がないからこっちを勧めます」とかいうアドバイスは本当にありがたい。
私が解説サイトの内容に望むのは、公式や一般書籍などに記載されていない、もう少し掘り下げた解説です。
具体例を充実させて、典型と例外、特例それぞれ何が起きるか分かるようにしてほしいのです。
また「このパラメーターは意味が分かりません」とか、「主にアメリカの習慣用であって日本で使うことはありません」などと書いてあればなおいいです。
上記した【結論1】は私が望む情報のモデルになりうると「思います」。
(思っているからこれでいいのです)