【VB】備忘録 3/25, 26

自分があとで見るための覚え書きです。


====== 3/25 ======


★Redim(復習)
配列の再定義のとき、要素をリセットしない場合は、「Preserve」をつける。ReDim Preserve A(i) As String


====== 3/26 ======


テキストボックス
・入力データの取得-ValueプロパティRange("A1") = TextBox1.Value

・あらかじめ表示文字を設定する-TextプロパティTextBox1.Text = "ここに入力してください。"

・日本語入力のオンオフ設定-IMEModeプロパティTextBox1.IMEMode = fmIMEModeOn<IMEModeプロパティの定数>
定数 値 内容
—————————————————————————————-
fmIMEModeNoControl 0 IME のモードを変更しない (既定値)。
fmIMEModeOn 1 IME をオンにする。
fmIMEModeOff 2 IME をオフにして英語モードにする。
fmIMEModeDisable 3 IME をオフにする。このモードにするとユーザーは、キー操作によっても IME をオンにすることができなくなる。
fmIMEModeHiragana 4 全角ひらがなモードで IME をオンにする。
fmIMEModeKatakana 5 全角カタカナ モードで IME をオンにする。
fmIMEModeKatakanaHalf 6 半角カタカナ モードで IME をオンにする。
fmIMEModeAlphaFull 7 全角英数モードで IME をオンにする。
fmIMEModeAlpha 8 半角英数モードで IME をオンにする。
fmIMEModeHangulFull 9 全角ハングル モードで IME をオンにする。
fmIMEModeHangul 10 半角ハングル モードで IME をオンにする。

・入力文字数に制限を加える-MaxLengthプロパティTextBox1.MaxLength = 25

・入力文字を伏字にする-PasswordCharプロパティTextBox1.PasswordChar = "*"

・複数行の入力・表示を行う-MultiLineプロパティTextBox1.MultiLine = True

・スクロールバーを表示させる-ScrollBarsプロパティTextBox1.ScrollBars = fmScrollBarsBoth<ScrollBarsプロパティの定数>
定数 値 内容
——————————————————
fmScrollBarsNone 0 スクロール バーを表示しない (既定値)。
fmScrollBarsHorizontal 1 水平スクロール バーを表示する。
fmScrollBarsVertical 2 垂直スクロール バーを表示する。
fmScrollBarsBoth 3 水平・垂直スクロールバーの両方を表示する。



型の基本情報

データ型名称・読み方小数負数正確値の範囲
Booleanブール型
ブール
---True または False
Byteバイト型
バイト
××0 ~ 255
Char文字型
キャラ
---1文字(Unicode)
※数値に変換すると0 ~ 65535ですが数値用ではありません。
Short短整数型
ショート
×-32768 ~ 32767
Integer整数型
インテジャー
×-2147483648 ~ 2147483647
Long長整数型
ロング
×-9223372036854775808 ~ 9223372036854775807
SByte符号付バイト型
エスバイト
×-128 ~ 127
(VB2005以降)
UShort符号なし短整数型
ユーショート
××0 ~ 65535
(VB2005以降)
UInteger符号なし整数型
ユーインテジャー
××0 ~ 4294967295
(VB2005以降)
ULong符号なし長整数型
ユーロング
××0 ~ 18446744073709551615
(VB2005以降)
Decimal10進型
デシマル
※小数の桁数によって異なります。

・小数の桁数が0の場合
-79228162514264337593543950335 ~ 79228162514264337593543950335

・小数の桁数が28桁の場合
-7.9228162514264337593543950335 ~ 7.9228162514264337593543950335

・一番細かい値(分解能)
0.0000000000000000000000000001

Single単精度浮動小数点型
シングル
×-340282350000000000000000000000000000000
~ 40282350000000000000000000000000000000

一番細かい値(分解能)
0.00000000000000000000000000000000000000000001401298

Double倍精度浮動小数点型
ダブル
×-17976931348623157000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000
0000000000000000000000000

179769313486231570000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000
000000000000000000000000

一番細かい値(分解能)
0.00000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000494065645841246544

Date日付型
デイト
---0001年1月1日 0:00:00 ~ 9999年12月31 日 23:59:59
Objectオブジェクト型
オブジェクト
---(任意の型を格納できます)
String文字列型
ストリング
---0 個 ~ 約 20 億個の文字 (Unicode)

小数 … 小数が表現できるかを示しています。数値型以外の型には関係ありません。

負数 … 負の数(ゼロより小さい数、マイナス)が表現できるかを示しています。数値型以外の型には関係ありません。

正確 … 正確な値を示すことができるかを表しています。×の場合は値に誤差が発生します。金額の計算など値の正確さが重要な場合はこの項目が×になっている型(Single, Double)は使用しないでください。数値型以外の型には関係ありません。




変数の宣言と初期化、有効(適用)範囲
モジュールレベルの変数
プロシージャ内部での宣言ではなく、モジュール内でプロシージャが始まる前(上)に記述する変数です。(中略)モジュールレベルの変数は、プログラムの先頭で初期化され、以降制御がどのモジュールのどのプロシージャに移ってもプログラムの終了まで内容が保持されています。
一般にモジュールレベルの変数は保持期間が長いため、不必要に宣言すべきではないと言われています。つまり、プロシージャレベルで済むものはプロシージャレベルで宣言するべきということになります。
  • Publicで宣言する変数は、プロジェクト内の全ての場所から参照することができます。
    Public」は「Global」と書いても同じです。(「Global」は古い書き方なので避けましょう)
  • Privateで宣言する変数は、このモジュール内の各プロシージャからは参照できますが、プロジェクト内の他のモジュールからは参照できません。
    Private」は「Dim」と書いても同じです。
  • Constでの宣言は、定数の宣言です。定数名の右に「=」で内容を書き込みます。これは定数であり、処理中での内容の書き換えはできません。
    Const」の前に「Public」、「Private」が明示できます。明示しない場合は「Private」と同じになります。
プロシージャレベルの変数
プロシージャ内部では、実際にその変数を使用する記述より上で変数を宣言しておく必要があります。一般にはプロシージャの先頭にまとめて記述します。モジュールレベルで宣言されている変数と同じ名前の変数がある場合はプロシージャ内の変数が参照されます。
  • Dimで宣言する変数は、そのモジュール内のみが適用範囲(参照できる範囲)となります。「Dim」で宣言する変数は、そのプロシージャが呼び出される都度初期化されます。
  • Staticで宣言する変数も、そのモジュール内のみが適用範囲となりますが、「Dim」で宣言する変数と異なりプロシージャ内での処理が終了し、制御が他に移ってもその変数は初期化されません。次回そのプロシージャが呼び出された時に、以前の内容が保持されたままになります。
  • Constでの宣言は、定数の宣言です。定数名の右に「=」で内容を書き込みます。これは定数であり、処理中での内容の書き換えはできません。



データの種類の個数を数える(Excel)
・COUNTIF(“範囲”,”条件”) ← “範囲”内で、”条件”を満たすセルの個数を返す
・1/COUNTIF(~) → 1つの条件につきそのSUMは1 ← エクセル生活 : 重複しないデータを数える
・「=SUMPRODUCT(1/COUNTIF(範囲,範囲))」で”範囲”のSUMを計算すれば、”範囲”内におけるデータの個数が分かる
(・∀・)SUMIF SUMPRODUCT SUMIFで複数条件 エクセル Excel [エクセルの学校]
<SUMPRODUCT関数は配列の積の和を計算します>


★複数の条件を満たすもののカウント(Excel)
(条件=True)のとき「1」、(条件=False)のとき「0」を返すので、
SUMPRODUCT((「範囲1」=「条件1」)*(「範囲2」=「条件2」)* …… )
とすればOK。
(・∀・)Excel豆知識29-3:エクセル:SUMPRODUCT関数


セルに名前をつけるSelection.Name = "名前1"Range("B1").Name = "名前1"




Filed under: ★Visual Basic  タグ: , , , , , , , , , , , ,   charlie432 00:00  Comments (0)

【VB】備忘録 3/23, 24

自分のための覚え書き(^^;


====== 3/23 ======


ユーザーからの入力を受け付ける
・ファイルを開く
Application.GetOpenFilename (“【ダイアログボックスのリストに表示される文字列】,【表示する拡張子を指定】[,【ダイアログボックスのリストに表示される文字列】,【表示する拡張子を指定】][,【ダイアログボックスのリストに表示される文字列】,【表示する拡張子を指定】]“)

(例)
Application.GetOpenFilename (“Excel ブック (*.xls), *.xls, テキストファイル(*.txt),*.txt”)


・ファイルを保存する
Application.GetSaveAsFilename (“【表示させるファイル名】”, “【ダイアログボックスのリストに表示される文字列】,【表示する拡張子を指定】[,【ダイアログボックスのリストに表示される文字列】,【表示する拡張子を指定】][,【ダイアログボックスのリストに表示される文字列】,【表示する拡張子を指定】]“)

(例)
Application.GetSaveAsFilename (“MyBook.xls”, “Excel ブック (*.xls), *.xls, テキストファイル(*.txt),*.txt”)


配列
動的配列はサイズを決定しないまま要素にアクセスするとエラーになります。
Dim Names() As String

Names(0) = "後醍醐天皇" 'ここでNullReferenceExceptionが発生する。


動的配列のサイズを決定するにはRedimステートメント(読み方:Redim = リディム)を使用します。次の例はサイズを3に設定してから要素にアクセスするのでエラーになりません。Dim Names() As String

ReDim Names(2)

Names(0) = "後醍醐天皇"


2行目をi = 2

ReDim Names(2)
としてもOK。

Redimを使用すると後から動的配列のサイズを変更することもできます。その時にPreserveキーワード(読み方:Preserve = プレサーブ)を指定しないと配列の内容はいったんすべてクリアされてしまいます。

そのため次のコードを実行すると空のメッセージボックスが表示されます。Dim Names() As String

ReDim Names(2) '配列の要素数を3に決定

Names(0) = "後醍醐天皇"

ReDim Names(3) '配列の要素数を4に変更

MsgBox(Names(0))


Preserveを使用すると配列の内容はクリアされません。次の例では「後醍醐天皇」と表示されます。Dim Names() As String

ReDim Names(2) '配列の要素数を3に決定

Names(0) = "後醍醐天皇"

ReDim Preserve Names(3) '配列の要素数を4に変更

MsgBox(Names(0))


Preserveはこのように便利に使用できますが、ループの中などで繰り返し使用すると体感できるほど処理が遅いです。



★最終行、最終列の位置を取得
最終行 = Cells(Cells.Rows.Count, 1).End(xlUp).Row
最終列 = Cells(1, Cells.Columns.Count).End(xlToLeft).Column

・エクセルの行数 = Cells.Rows.Count
・エクセルの列数 = Cells.Columns.Count

エクセルのver が同じなら、ほぼ定数みたいなものですね。






====== 3/24 ======


★ブックの開閉(復習)
・新規Workbooks.Add

・開くWorkbooks.Open FileName:="●●●.xls"

・閉じる(すべて)Workbooks.Close

・閉じる(単体)ActiveWorkbook.Close

・閉じる(ブック名指定)Workbooks("●●●.xls").Close

・閉じる(n番目に開いたブック)Workbooks(n).Close

・保存して閉じるWorkbooks("●●●.xls").Close SaveChanges:=True

・保存せずに閉じるWorkbooks("●●●.xls").Close False


★ワークシート数取得(復習)
・アクティヴなブックActiveWorkbook.Worksheets.Count

・指定したブックWorkbooks("●●●.txt").Sheets.Count
エラーが出て未解決


★シートの挿入(復習)
・挿入Worksheets.Add

・挿入(位置、枚数指定)Worksheets.Add After:=Worksheets(n), Count:=m
Worksheets.Add Before:=Worksheets(n), Count:=m



★改行(復習+追記)
キャリッジリターン=chr(13)、ラインフィード=chr(10)
chr(13) & chr(10) ←→ vbCrLf


VLOOKUP・式の意味(Excel)
=VLOOKUP(B3, B6:C10, 2, FALSE) の意味
  • 最初の引数 B3
    • 検索値
    • 調べたいデータが入ったセルを指定します
  • 2番目の引数 B6:C10
    • 範囲
    • 探すべきテーブルの範囲を指定します
  • 3番目の引数 2
    • 列番号
    • 表の何列目を答えとして使うかを指定します
  • 4番目の引数 FALSE(フォールスと読む) は
    • 検索の型
      • 近似検索するとき:TRUE
      • 完全に一致するものを探すとき:FALSE
    • 原理的にはB列の品名の文字コードの昇順に並べてあればFALSEは省略可能ですが現実として単純な並べ替えでは文字コードの順に並んでくれない場合が多いです



ワークシート関数をVBAで使用するにはWorksheetFunction プロパティを利用します。
【例】C1にSUM関数,C2にAVERAGE関数,C3にCOUNT関数での結果を返します。Sub rei13_4()
  With Worksheets("Sheet1")
    .Range("C1").Value = Application.WorksheetFunction.Sum(.Range("A1:B1"))
    .Range("C2").Value = Application.WorksheetFunction.Average(.Range("A2:B2"))
    .Range("C3").Value = Application.WorksheetFunction.Count(.Range("A3:B3"))
  End With
End Sub



開かれているブックの数を取得する'開かれているブックの数を取得する
Sub Sample1011()
  MsgBox Workbooks.Count
End Sub

ということは、最新のブックをアクティヴにするにはWorkbooks(Workbooks.Count).Activate


日付文字列またはシリアル値から日(月、年など)を表す数値を返す、、、など(Excel)
たとえば月を返す場合は=MONTH(A1)


四捨五入など(Excel)
四捨五入(ROUND)切り上げ(ROUNDUP)切捨て(ROUNDDOWN)
倍数に四捨五入(MROUND)倍数に切り上げ(CEILING)倍数に切り下げ(FLOOR)
剰余を求める(MOD)偶数に切り上げ(EVEN)その数値を超えない最大の整数(INT)
奇数に切り上げ(ODD)小数部を切り捨てる(TRUNC)





Filed under: ★Visual Basic  タグ: , , , , , , , , , , , , ,   charlie432 00:00  Comments (0)

【VB】備忘録3/19

すみません。しばらくはこんな投稿が続きます(^_^;

Visual Basic 勉強中です φ(。。)


VBA入門者の”どっち?”・・・フォームツールバー or コントロールツールボックス(1)
【主な相違点】
1.コードの記述場所
2.イベントへの対応
3.貼り付け先(シート以外の場合)
4.用意されているプロパティーやメソッドなど

■1.コードの記述場所■
(フォーム)・・・   標準モジュールのみ
(コントロール)・・・ コントロールを貼り付けたオブジェクトモジュール
            (ワークシート、ユーザフォーム)などに記述する。

そもそも、フォームツールバーのボタン類はエクセル95の頃から用いられていたものです。
エクセル95にはワークシートなどと同列にエクセルのメイン画面から使用するモジュールシートがあり、ここにコーディングをしていました。
また、ユーザーが独自に定義するダイアログには”ダイアログシート”があり、フォームコントロールはワークシート、ダイアログシート、のいずれかに配置し、モジュールシートに記述されたマクロを登録することにより、実行がなされていたのです。

■2.イベントへの対応■

(フォーム)・・・  基本的に”イベント”という考え方はありません。
(コントロール)・・ ボタンクリックやテキストボックスの値の変化など、ユーザーの操作にしたがって発生するさまざまなイベントを基準として用意されたイベントプロシージャを利用します。

1で触れたように、”マクロの登録”を基本とするフォームコントロールはクリックと値の変化にしか対応できません。
これに対し、”コントロールツールボックス”の各コントロールはClickイベント、Changeイベント、のほか、Mouse操作ではMouseDown、MouseUpなど、Key操作ではKeyDown,KeyUpなど、多彩なイベントが用意されており、何を行うかによって対応するイベントプロシージャにコードを記述すればよいのです。

■3.貼り付け先(シート以外)■

(フォーム)・・・  ダイアログシート
(コントロール)・・ ユーザフォーム

ワークシートに貼り付けることができる点では両者変わりませんが、ユーザ定義のダイアログを作成しようとするとき、貼り付け先となるベースが異なります。

■4.用意されているプロパティーやメソッドなど■

エクセルVBAを97や2000から使い始めた方は、フォームコントロールをVBAでどのように取り扱えばよいのかはご存知でないのではないでしょうか?
それは、VBA解説書などで扱っていないこともありますが、基本的にフォームコントロールのプロパティーなどは”非表示”となっていることも関係しているでしょう。
ここで”非表示”というのは、例えばEditBoxのメンバーを調べるためにVBEからオブジェクトブラウザで”EditBox”を検索しても標準では表示されないことをさしています。
また、コーディング支援機能としてのメンバー表示機能も効きません。
オブジェクトブラウザでメンバーを表示させるには”クラス”のリスト中などで右クリックし、”非表示のメンバーを表示”を選択します。



コンボボックスのリスト


コンボボックス●コンボ名を「ComboBox1」としたとき
・データをクリア → ComboBox1.Clear
・文字列を設定 → ComboBox1.AddItem “データ”
・あらかじめコンボボックスを選択
 ComboBox1.ListIndex = -1 ← 選択されていない状態にする
 ComboBox1.ListIndex = 0 ← 1つ目のデータを選択
 ComboBox1.ListIndex = 1 ← 2つ目のデータを選択
 ComboBox1.ListIndex = 2 ← 3つ目のデータを選択


★コピペモードを解除
Application.CutCopyMode = False


無限ループの強制終了
「ctrl」+「break」または「Esc」



Filed under: ★Visual Basic  タグ: , , , , , , ,   charlie432 00:00  Comments (0)
    2012年5月
    « 4月    
     123456
    78910111213
    14151617181920
    21222324252627
    28293031