ExcelVBAについて。

ActiveSheet.Shapes.AddTextbox(msoTextOrientationHorizontal, 125.25, 33#, 75.75, 19.5).Select

と入力すればテキストボックスが作られます。
『,』で区切られた4つの数字の意味なのですが、
横の位置,縦の位置,横の大きさ,縦の大きさ
であると思います。(経験的に)
ここで、上の例の33の後の#の意味は何でしょうか。
また、『,』で区切られた数字の単位は何ですか。
それをPXで指定することは可能でしょうか。
上の数字のどれか(例えば4つ目の19.5)を特定のセル(例えば E3 )の数字にしたいときにはどうすればよいですか。

最後に、行間の大きさを変更しようとすると現在の行間の大きさを表示してくれます。(例えば 13.50(18ピクセル) )
このとき、縦と横とでピクセルの大きさに対する左の数字の大きさが違うと思うのですが、なぜでしょうか。

ひとつ以上解答して、参考URLもあれば教えてください。
基本的にひとつの質問に対する最初の私に分かる回答のポイントを大きくします。

回答の条件
  • 1人5回まで
  • 登録:2006/09/26 23:33:57
  • 終了:2006/09/27 22:26:38

ベストアンサー

id:llusall No.1

llusall回答回数505ベストアンサー獲得回数612006/09/26 23:38:52

ポイント30pt

「33#」はDouble型の33ですよと、明示的に記述しています。


VBAヘルプ

倍精度浮動小数点数型の型宣言文字はシャープ記号 (#) です。


単位は、VBAヘルプでは、「ポイント単位」となっています。


PXで指定につきましては、残念ながらポイントをピクセルに変換するような関数等知らないのでわかりません。すみません。


(例えば4つ目の19.5)を特定のセル(例えば E3 )の数字にしたい

ActiveSheet.Shapes.AddTextbox(msoTextOrientationHorizontal, 125.25, 33#, 75.75, Cells(3, "E").Value).Select

id:sansai58

解答ありがとうございます。

つまるところDouble型(倍精度不動小数点数型)とはなんなのでしょうか。

それ(♯)があるのとないのとでは何が違うのでしょうか。

2006/09/27 11:18:46

その他の回答(3件)

id:llusall No.1

llusall回答回数505ベストアンサー獲得回数612006/09/26 23:38:52ここでベストアンサー

ポイント30pt

「33#」はDouble型の33ですよと、明示的に記述しています。


VBAヘルプ

倍精度浮動小数点数型の型宣言文字はシャープ記号 (#) です。


単位は、VBAヘルプでは、「ポイント単位」となっています。


PXで指定につきましては、残念ながらポイントをピクセルに変換するような関数等知らないのでわかりません。すみません。


(例えば4つ目の19.5)を特定のセル(例えば E3 )の数字にしたい

ActiveSheet.Shapes.AddTextbox(msoTextOrientationHorizontal, 125.25, 33#, 75.75, Cells(3, "E").Value).Select

id:sansai58

解答ありがとうございます。

つまるところDouble型(倍精度不動小数点数型)とはなんなのでしょうか。

それ(♯)があるのとないのとでは何が違うのでしょうか。

2006/09/27 11:18:46
id:ardarim No.2

ardarim回答回数896ベストアンサー獲得回数1442006/09/27 02:12:43

ポイント20pt

Excelでは、縦(行の高さ)と横(列の幅)の単位が異なっています。

そのために、縦と横とでピクセルの大きさに対する左の数字の大きさが異なります。


行の高さは、ポイント単位で指定します。

列幅の単位は、標準スタイルの 1 文字分の幅に相当します。プロポーショナル フォントでは、数字の 0 の幅が列幅の単位になります。(ちょっと分かりにくい単位ですが、[ツール]-[オプション]-[全般]で設定している標準フォントをセルに設定した場合の、半角0が入る個数=列幅と思ってください)


ちなみにピクセルからポイントへの変換ですが、擬似的に以下の計算で算出できます。

pt = Application.InchesToPoints(px / dpi)

pt は 求めたいポイント数、px は ピクセル数、dpi はディスプレイの解像度です(本当は使っているディスプレイによって異なりますが、計算上擬似的に96を使う場合が多いです)。

id:sansai58

解答ありがとうございます。

なかなかややこしいですね。

2006/09/27 11:22:29
id:Mook No.3

Mook回答回数1312ベストアンサー獲得回数3912006/09/27 09:10:19

ポイント20pt

他の部分は llusall さんが解答されているので、ピクセルに関する処理だけ。


まず、AddTextBox の引数はpt(ポイント)が単位となっています。

1ポイントの定義は

      1in(インチ)=72pt

なので、pt から px への変換は、72で割って画面解像度(dpi:1インチあたりのドット数(ピクセル数))をかけたものになります。


画面解像度を取得する関数は

      Application.DefaultWebOptions.PixelsPerInch

がありますので、C3 のセルの大きさは px 単位では、

      dpi = Application.DefaultWebOptions.PixelsPerInch
      widthPix = Range("C3").Width / 72 * dpi
      heightPix = Range("C3").Height / 72 * dpi

のようになります。


VBA には PointsToScreenPixelsX, PointsToScreenPixelsY といったプロパティもありますが、

どうもこれでは EXCEL の表示上のピクセルと一致しませんでした。


セルの大きさについての Q&A は参考になるかと思います。

id:sansai58

解答ありがとうございます。

2006/09/27 11:25:00
id:Mook No.4

Mook回答回数1312ベストアンサー獲得回数3912006/09/27 22:06:33

ポイント20pt

sansai58 さんの知識がどの程度かわからなかりませんでしたが、ピクセルに関する情報はあまり重要ではなかったようですね。

もう少し基本的な部分の説明をした方が今後の理解に役立つかと思いましたので、データ型に関して解答します。


VBA では数値を扱うための数値型として、いくつかの型があります。ちょっと乱暴ですが、

  • Integer(整数型:小数は使えない、扱える範囲が狭い)
  • Long(整数型:小数は扱えない、扱える範囲が広い)
  • Single(小数も使えるが、精度や数値範囲が小さい)
  • Double(小数も使えて精度が大きい)

といった特徴があります(他にも通貨型や10進型があります)。

また、数値型以外にも、文字列型、日付型、オブジェクト型などがあり、変数(あるいは関数の引数)で指定できるものは、これらの属性を持っています。


それぞれのデータ型を使うメリット、デメリットはコンピュータの内部処理にまで言及するので今回は割愛しますが、興味があれば

http://www.asahi-net.or.jp/~ef2o-inue/vba_k/sub04_050_06.html

http://msdn2.microsoft.com/ja-JP/library/47zceaw7.aspx

http://web.sfc.keio.ac.jp/~tsaito/ITWS/Lec02.html

などをご参照ください。


今回のは、数値が Double であることを、明示的にするもので VBE で 10.0 と入力すると勝手に 10# となると思います。これが影響を及ぼす例として、下記を実行してみてください。

Debug.Print 10000 * 10

「オーバーフローが発生しました。」というエラーがでるでしょう。

これは、数値(ただし-32,768~32,767)のデフォルトのデータ型である Integerがあつかえるデータ範囲を超えたためにエラーとなります。

Debug.Print 10000# * 10#

とすると、答えがイミディエイト ウィンドウに表示されます。


コンピュータは人間のように融通が利かないので、不便ですが人間がデータ型を考えながら指示する必要があります。

id:sansai58

なるほど、Integer、Long、、Single、Doubleは知っていましたが、♯ガあるとないの違いが良く分かりました。

2006/09/27 22:23:06

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません