Home / ... / プログラミング / VBA / Excel VBA Tips

Excel VBA Tips



エクセルで、ブック名・シート名で使用出来ない文字

 ブック名(Windows のファイル・フォルダ名)には 使用出来ない文字 があり、同様にエクセルシート名にも 使用出来ない文字 がある。

 また、ハイパーリンクの場合のみ 使用出来ない文字 もあり、これについてはフルパスで 使用出来ない文字 を含まない必要がある。

 使用できない文字を、下の表に示す。

エクセルブック名で使用できない文字、およびエクセルシート名で使用できない文字 一覧表。
〇:使用できる。
×:使用出来ない。
△:ハイパーリンクとしては使用出来ない。
記号名 記号 ブック名 シート名
シャープ #


左右サユウ角カッコ [ ・・・ ]
×
円記号(バックスラッシュ) \
× ×
スラッシュ /
× ×
コロン :
× ×
アスタリスク *
× ×
疑問符 ?
× ×
セミコロン ;
×
ダブルクォーテーション "
×
ショウなり <
×
ダイなり >
×
パイプライン |
×

注意点
 角カッコは 左角カッコ、右各カッコの順で、[・・・] という形になる場合、使用出来ない。

 シート名に使用出来ない文字は、半角/全角とも 使用出来ない


参考:



エクセルで、ブック名・シート名で使用出来ない文字数

 ブック名(ファイル名)は、半角で 215 文字、全角では 107 文字まで。
  シート名は、Excel 95 および Excel 5.0 では、最大 31 バイト (半角 31 文字、全角 15 文字)、Excel 97 以降では、全角、半角文字に関わらず最大 31 文字だが、参考リンク(KB950220)の問題を回避するために、30文字以内としておいた方が良い。

参考



シートオブジェクトの指定方法

 シートの参照は、Visual Basic Editor で表示されるシートのオブジェクト名ではなく、シート名で指定する。
 オブジェクト名で指定すると、シートが存在しないとき、エラーでエクセルが落ちる。



シートオブジェクトのコピー方法

 シートのコピーで、名前の定義を含んだシートを、ブックの保存をせずに多数コピーすると、
実行時エラー '1004':
Worksheet クラスの Copy メソッドが失敗しました。
実行時エラー '1004':
アプリケーション定義またはオブジェクト定義のエラーです。
というエラーが発生する事がある。
 エラーが発生するシート数は、新規のブックの場合255シート、既存のブックの場合はシートの容量によって異なるらしい。
 これは Microsoft Excel の問題らしい。

ランタイムエラーが発生する例
For iCounter = 1 To 275
With Thisworkbook
.Worksheets(1).Copy After:=.Worksheets(1)
End With
Next iCounter



ランタイムエラーの対策例1
100の倍数回目のコピーごとに、保存して閉じ、再度開く
For iCounter = 1 To 275
With Thisworkbook
.Worksheets(1).Copy After:=.Worksheets(1)
If iCounter Mod 100 = 0 Then    ' 100 の倍数の時保存
oBook.Close SaveChanges:=True
Set oBook = Nothing
Set oBook = Application.Workbooks.Open("・・・")
End If
End With
Next iCounter



ランタイムエラーの対策例2
シートを追加した後、シート上の全てのセルをコピーする。
For iCounter = 1 To 275
With Thisworkbook
.Worksheets(1).Add After:=.Worksheets(1)
End With
Next iCounter

For iCounter = 1 To 275
With Thisworkbook
 .Worksheets(1).Cells.Copy Destination:=.Worksheets(iCounter + 1).Cells
End With
Next iCounter



ランタイムエラーの対策例3
テンプレートから、シートをコピーする。
 コピー元のシートが、決まったフォーマットのもので、あらかじめ用意出来るなら、テンプレートとして保存しておき、それを追加する方法をとれば良い。

 テンプレートファイルは、エクセル2003以前のバージョンでは「*.xlt」、エクセル2007以降のバージョンでは「*.xltx」。

 以下のコードの TemplateFilePath は、テンプレートの完全なパスとファイル名を含む文字列。
For iCounter = 1 To 275
With Thisworkbook
.Worksheets(1).Add Type:=TemplateFilePath
End With
Next iCounter


参考:Microsoft サポートオンライン - KB210684 : Excel でプログラムを使用してワークシートをコピーするとランタイム エラー 1004 が発生するExcel でプログラムを使用してワークシートをコピーするとランタイム エラー 1004 が発生する.



Range オブジェクトの Formula プロパティ と FormulaLocal プロパティの違い

 違いは、FormulaLocal は使用地域独自の関数を使えるが、Formula は使えないという点。

 例えば半角文字を全角文字に変換する JIS( ) という日本固有の関数は、FormulaLocal では使える。
 しかし Formula では、エラーにはならないが、JIS( ) を VB関数の DBCS( ) に置き換えた文字列が表示される。



Range オブジェクトの Address プロパティと AddressLocal プロパティの違い

 英語や日本語では、違いはない。
 ドイツ語では違いがあるというのをどこかで読んだ事があるが詳細は不明。
 いずれ調べるつもり。



VBA による VBComponents の操作での注意

  エクセルVBAの、Thisworkbook.VBProject.VBComponents オブジェクトで、VBComponents.Add や VBComponents.Remove 、 VBComponents.Import でVBコンポーネントの追加削除を繰り返すと、エクセルファイルが肥大する事があるらしい。



  



     RSS of this page

     
     

    他のサイト: