ExcelVBAのSub名で和文使用制限はバージョン97~2007どこまでになっていますか?
1)Excel97当初は和文のサブルーチン名が使用できたのですが,アップデートが進みExcel2000の段階ではカナ文字のサブルーチン名に文字落ちや化けが発生するようになり,カナ文字は漢字に直しました。
2)社内でExcel2000~Excel2007使用環境でExcel2002開発のものを動作約一ヶ月で,「オートメーションエラー」が発生してしまいました。
3)和文名は大量に使っており,修正が大変です。オートメーションのActive_X関係は何とか修正しましたが,Excel2000~Excel2007で使用するには全ての和文名を英文名に修正しなければならないか,どなたか教えて下さい。
A 回答 (5件)
- 最新から表示
- 回答順に表示
No.5
- 回答日時:
1)もしかしてEXCEL97時代に半角カナを使ったりしてませんか。
念のため避けた方が良いと思います。2)オートメーションエラーはActiveXコントロールのインストールがPCによってバラツキがあるため発生していると思われます。使用するPCの環境を統一することをお勧めします(大変ですが)
3)和名を使用してはいけないという統一的なルールは存在しません。EXCEL2010でも使用できます。この「和名は避けるべき」という暗黙的ルールは、EXCEL95、97の時代に、日本語文字を使用すると稀に原因不明のエラーを起こすことがあったため、2バイト文字を避けるようになったという経緯があった、と記憶しています。元が1バイト文字のアプリケーションだったため、2バイト文字への対応が怪しかったのでは、と理解しています。
和名の使用可否については、コーディングルールが社内で規定されているのであれば、それに従うべきであると考えます。ルールが存在しないのであれば、開発者の考え方に依拠してしまうことになると思います。
暴論かもしれませんが、最終的には「正常に動作して」いれば問題ないと思います。EXCELの各バージョンのテスト環境を用意してテストした上で配布するというのが正攻法だと思います。
No.4
- 回答日時:
#3の補足
13 処理的に別なコードを一緒にしないこと。プロシージャそのものは、長くても、100行程度で、サブルーチンやユーザー定義関数にすること。
14.5と多少重複するが、プレフィックスの、cmd,lblや、str, lngというものは、絶対的なものではないし、区分けが分からなくなりそうな時につけること。TextBox1 に、txbTextBox1 という必要はありません。なお、これは、コンパイルエラーとは関係がありません。
No.3
- 回答日時:
>「2byte 文字を使わないという」ルールはありません!
初心者や入門者の方は私の書いたことは知らないなら知らないで構わないし、アマチュアの方達は、使いたければ使えばよいと思います。
いくつかプログラマーズ・コーディング・ルールを示してあげます。VBAはアマチュアで使うのがほとんどですから、覚える義務ではありません。プロなら、こんなことは常識です。
最初に、Option Explicit を宣言するのが前提になっています。
1.プロシージャや関数名は、英語を使うこと。日本語やローマ字を入れないこと。(悪い例:Zaiko, Uriage, Keisan-->Inventory, Sales, Calculation )
2. 識別子は、なるべく単語の省略・短縮形を使わないこと。ただし公認のものは可能です。(sh =Sheet, c = Cells, wb = Workbook)
3.既にあるプロパティ名、関数名、メソッド名は使用しない。(sum, text, string, value, integer, namespace. dim, form)
4.プロシージャ名は、パスカル型で書く。例:Sub ReplaceNames()
5.クラス名には、プリフィックス(接頭辞)を用いない。悪い例:clsClass --> 修正myClass my は、ローカルに使うという意味。
6.変数名は、すべてをハンガリアン記法にする必要はない。また、変数名には、(アンダースコア)を使わないこと。悪い例 vrnData, Data_Collection --> 修正 myData, colData
7.プロシージャや関数の引数やパラメータ名は、キャメル型にし説明的なものにし、省略形を使わない。例: Sub SampleProcedure(ByVal n As Integer) -->Sub SampleProcedure(ByVal number As Integer)
8.カウンター変数(ループで使うもの)は、Long型で、i, j, k,などを使う。a, b, c などは使ってはいけません。
Dim t As Integer
For t = 1 To myEndRow
....
Next
↓
修正案
Dim i As Long
For i = 1 To myEndRow
....
Next
9.標準モジュールには、必要な場合は、Public, Private ステートメントを行う。引数やパラメータは、byVal, byRef は宣言する。(ただし、私個人は、あまり守っていない)
10.ひとつのメソッドは、20行程度にして、構造化、分散化する。ワン・モジュール内に異質な内容のコードを行わない。Win32 APIの関数がPublic の場合は、それらは統一して、ひとつのモジュールに置く。
11. Goto ステートメインとは、原則的には使用しないが、絶対的に使わないとなると、読みにくいコードになることを知っておくこと。
12. リテラル値は、基本的には書かないこと。型宣言文字で宣言はしないこと。
悪い例:
Dim a#
a = Cells(1,1).Value
If a = 10.01# then
....
End If
修正案
Dim a As Double
Dim b As Double
a= Cells(1,1).Value
b= 10.01
If a = b then
....
End If
なお、Cells, Range のプロパティは省略してはいけません。
13.不必要に、変数のスコープは広げないこと。プロシージャ内だけで使うものを、モジュール変数やグローバル変数にはしないこと。
No.2
- 回答日時:
>「2byte 文字を使わないという」ルールはありません!
今、反論されていることに気が付きました。
97~2007のVBAをお使いだというから、アドバイスしたまでです。
一般の素人の方が、どういう文字を入れようと、こちらは別にともかくいう必要はないと思っています。反論するつもりなら、もともと質問などしないでくださいというところです。私は、まったくのアマチュアの方にアドバイスをするだけの気持ちはありません。私は、プロシージャ名に2byteを使うべきか知らないひとと、技術的に同じレベルで、今回のアドバイスしているわけではありません。
ルールは、プロのプログラマーズのルールです。ローマ字も使ってはいけないのです。それは、VB5の時代が現代まで言われているルールのひとつです。その命名の仕方にも、細かなある程度のルールがあります。
Office の場合は、複数のバージョンを入れていたら、2byte 文字を使うとまったく検索・置換が見えなくなります。また、VBAツールは、2byte 文字には対応していません。何も分かっていないようですね。
まして、漢字の中に使えない文字があるのを知らないというのに、そんな反論はやめていただきたいものです。はっきり言うと、ある程度のプログラミングの技術というのは、英語の知識も含まれているということです。ただし、日本人英語の間違いまでは言う気はありません。
>(1)文字変換切り替えの煩わしさがプロシージャ本文の間違いを生ずる危険が潜んでいる。
私は、最初から2byte 文字を使わなかったのは、入門の段階で、そう教わってきたからです。ずっと知らないでしてきたのだから、それを間違いが生じるというよりも、そういう過去のものが、現在のVBAではうまく動くのか、もう一度、見直したほうが良いと思います。
No.1
- 回答日時:
>カナ文字は漢字に直しました。
文字化けして、カナ文字を漢字に直すって、同じことです。プロシージャ名や変数名には、2byte 文字を使わないというのが、ルールです。
VBAでは、使えない漢字があります。一応、まったくの初心者でないのなら、2byte文字を使わないのは言うまでもありません。
ただし、文字化けする理由は、複数のバージョンを使うからだと思います。プロの世界では、ローマ字もいけないと言われますが、そこまでは求めません。
>オートメーションエラー
これは別問題だと思います。バージョンによって利用しているActive X コントロールが違うからだと思います。だから、登録し直さないといけないはずです。
>Excel2000~Excel2007使用環境でExcel2002開発
この場合は、開発環境をExcel 2000 で作り、あげていくという方法を取ります。その都度、エラーが発生する場所を直すいうことをします。しかし、上から下へはしません。例えば、Excel 2007 で開発したものを、下位バージョンでは使用しません。もともと、ライブラリを見失う可能性が強いからです。なお、97だけは、別格で、基本的なVBA関数やメソッドが足りないために、配列などの部分で大きくコードが違ってしまいます。
なお、同名のプロシージャ名や変数名があるのでしたら、MZ Tool(ドイツ製-フリー)がありますから、それで、グローバル検索で、同時にファイルをまたいで置換してしまう方法があります。2byte 文字は文字化けしますが、貼り付けする分には、検索が利きます。
この回答への補足
「2byte 文字を使わないという」ルールはありません!
(1)文字変換切り替えの煩わしさがプロシージャ本文の間違いを生ずる危険が潜んでいる。
(2)ActiveXのコントロール・オブジェクト名の先頭に機能を示す略語の英文字(例えばコマンドボタンのcmd,ラベルのlbl等)があるとコンパイル時に不都合の発生が避けられる。
ありがとう御座いました。
97時代からずっと変数名・プロシージャ名(クラスモジュール,標準モジュール共)・コントロール名(プロパティレベルで2000と2002との相違がないことは確認してあります)ともに全て和文名で過ごしてきて,何ら殆どエラーは発生しませんでした,ので気が付きませんでした。たまに使う「キャンセル」ボタンに文字落ち・文字化けを発見していました。
今回は,生産現場に持ち込んだのがExcel2000であったところから露呈したものです。
それをExcel2002~Excel2007で共有したので,顕著にしたと思います。
分かりました。面倒でも修正します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Access VBAで行ラベルが定義さ...
-
Accessのマクロでモジュールを...
-
VBA プロシージャの名前の取得
-
callで順に実行されるプロシー...
-
エクセルVBAでUserFormを起動し...
-
DBMS_OUTPUT.PUT_LINEを実行し...
-
excel/vba/public変数
-
Excel VBAで「プログラム実行」...
-
ACCESS2007インポート時の空白...
-
ACCESS マクロをモジュールに変...
-
Accessでグローバル変数を宣言...
-
アクセス enterで次ページ(レ...
-
【Excel VBA】 WorksheetやRa...
-
OutlookVBAで作成したマクロに...
-
Accessのプロシージャ名が勝手...
-
ExcelVBAでしりとりのやり方を...
-
Access VBA ラベル印刷開始位置...
-
DECLARE
-
或るプロシージャの呼び出し元判定
-
sp_executesqlを実行してもテー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessのマクロでモジュールを...
-
Access VBAで行ラベルが定義さ...
-
エクセルVBAでUserFormを起動し...
-
VBA プロシージャの名前の取得
-
【Excel VBA】 WorksheetやRa...
-
或るプロシージャの呼び出し元判定
-
callで順に実行されるプロシー...
-
OutlookVBAで作成したマクロに...
-
Accessでグローバル変数を宣言...
-
ACCESS2007インポート時の空白...
-
DBMS_OUTPUT.PUT_LINEを実行し...
-
excel/vba/public変数
-
Excel VBAで「プログラム実行」...
-
エクセルVBAが対応できるプログ...
-
VBAのプロシージャー間で、変数の受...
-
Accessのプロシージャ名が勝手...
-
Excel:ThisWorkbookオブジェク...
-
ACCESS マクロをモジュールに変...
-
ブックオープン時にテキストボ...
-
PL/SQLのエラーについて
おすすめ情報