Excel2000 VBA Application Wait と キー入力の実験 [Excel2000 VBA メモ]
Excel2000 VBA Application Wait と キー入力の実験
参考にしたサイト ttp://www.happy2-island.com/excelsmile/smile04/capter00301.shtml
モジュールの一行目に Declare Function GetAsyncKeyState Lib "User32.dll" (ByVal vkey As Long) As Long を書く
Sub TEST_WAIT()
'5-1カウントダウンし、1秒ごとに秒数を表示
'遊び方 スタートが表示されたら、息を止める
'苦しくなったらスペースキーを押して何秒息を止められた調べる
'ttp://www.happy2-island.com/excelsmile/smile04/capter00301.shtml
Dim cont, i As Long
For i = 5 To 1 Step -1
Range("A1") = i
'1秒待つ
Application.Wait Now + TimeValue("00:00:1")
Next i
Range("A1") = "スタート!"
Beep
'設定
Range("A2") = "経過時間"
'spaceキーが押されるまで、永久ループ
'停止はESCを押してください
Do Until False
'spaceキーが押されたら
If GetAsyncKeyState(32) <> 0 Then Range("A3") = cont & "秒 です。": Exit Sub
Range("A3") = cont + 1 & "秒"
cont = cont + 1
'1秒待つ
Application.Wait Now + TimeValue("00:00:1")
Loop
End Sub
Excel2000 VBA 選択範囲に連続数値を設定、セル結合がある場合の実験 [Excel2000 VBA メモ]
Excel2000 VBA 選択範囲に連続数値を設定、セル結合がある場合の実験
黄色の部分が結合セル
1列目の数値は1-3が1に、2行目では2から始まるのではなく4から始まる。
同様に7が設定された結合セルでも、10,13の表示が無くなる。
実験の目的は、結合セルの有る範囲をhtml表形式で出力する時の参考にする為。
Sub 選択範囲に連続数値()
Dim i As Long
For i = 1 To Selection.Count
Selection.Cells(i) = i
Next i
End Sub
結合セルを調べる
If Cells(y, x).MergeCells Then ・・・
結合セル範囲を調べる
With Cells(y, x).MergeArea
結合行数 = .Rows.count
結合列数 = .Columns.count
End With
だめだめ実験(行方向の結合セルが一番左にあり、結合セルの右側には結合セルが無い場合のみ)
Sub test02()
Dim i, num, x, cellcont, selColcont As Integer
Dim hani, Mhani, Mrange, merRange, merCel As Range
Dim merRowCont, merColCont, MrangeCont As Integer
'選択範囲のセルの個数
cellcont = Selection.Count
selColcont = Selection.Columns.Count '選択列数
'範囲 例 $A$1:$D$5 A1-D5 を選択
hani = Selection.Address
'選択範囲のセルを移動
num = 1
For i = 1 To cellcont 'iは範囲のセル位置
merRowCont = 0 '結合個数をゼロに
merColCont = 0
merColCont = 0
'結合セルか調べる
Range(hani).Cells(i).Select
If Range(hani).Cells(i).MergeCells Then
With Range(hani).Cells(i).MergeArea '結合セルの範囲
merRowCont = .Rows.Count '結合行数
merColCont = .Columns.Count '結合列数
End With
Else
Range(hani).Cells(i) = num
num = num + 1
End If
'結合のタイプを調べる(行か列か)
If merColCont > 1 Then '結合列なら
Range(hani).Cells(i) = num '結合セルの一番目に値設定
i = i + merColCont - 1 '2番以降をスキップ
num = num + 1
Else
If merRowCont > 1 Then '結合行なら(縦方向の結合セ
'ルが一番左で右側に結合せるがない場合)
Range(hani).Cells(i) = num '結合セルの一番目に値設定
'結合セルの右側の範囲設定
x = i + 1: i = i + 1 'セルを1進める
Set merRange = Range(Cells(Range(hani).Cells(x).Row, Range(hani).Cells(x).Column), Cells(Range(hani).Cells(x).Row + merRowCont - 1, Range(hani).Cells(x).Column + selColcont - merColCont - 1))
'結合セルの右側の範囲に値を設定
For Each merCel In merRange
i = i + 1
num = num + 1
merCel.Select
merCel = num
Next merCel
End If
End If
Next i
'1秒待つ
'Application.Wait Now() + TimeValue("00:00:01")
End Sub
Excel2000 VBA メモ1 [Excel2000 VBA メモ]
マクロ実行の高速化
- Application.ScreenUpdating=False '画面更新の抑制
- 処理
- Application.ScreenUpdating=True '抑制の解除
- 処理内容によってはかなり高速化する
VBエディター イミティエイト
- Debug.Print A →イミティエイトウインドウにAの値が表示される
- B=2 と入力し、?Bと入力するとBの値2が表示される
アクティブセルの位置を記録し、処理後にセルの位置を処理前にもどす
- 現在位置 = AcriveCell.Address
- 処理
- Range(現在位置).Select
登録したマクロにショートカットキーを設定する
- メニュバー>ツール>マクロ でショートカットキーを設定するマクロを選択し、右下の「オプション」ボタンを押して設定する
Debug.Print
- Debug.Print 変数 & "/" & 変数2 & "/" & 変数3 & "/" & 変数4
- イミティエイト ウィンドウに変数1-4が表示される
- イミティエイトウィンドウを表示するには、VBエディターのメニューバー>表示タブからイミティエエイトウィンドウを選択する
Dim test As Range
- testをRange(セル範囲)にする 例 Range("A1:C3")
- 値を入れるときはSetを使用する
- Set test = Range("A1:C3")
- test = 10 A1からC3の範囲に10が入る
- test.Delete 上に移動
- test = "" 移動せずにセルを空にするRange("A1:A3").Clear Range("A1:A3").ClearContents
マクロ実行時に音を出す
- Beep
ワークブックをアクティブにする(複数のブックを起動している時)
- Workbooks("ブック名.xls") .Activate '最前面に表示(アクティブにする)
シートに背景画像の表示、削除
- ActiveSheet.SetBackgroundPicture Filename:="C:\1.jpg" 表示
- ActiveSheet.SetBackgroundPicture Filename:=vbNullString または""設定しない(削除)
セル幅を設定する
- Cells(1, 1).ColumnWidth = 8 基準文字0(ゼロ)8文字分の幅?
- Cells(1, 1).ColumnWidth = 100/1.78 セル幅を約100mmに設定する(印刷時)1.78の値を変えて100mmで印刷されるようにする
ブック,シート情報
- ブックの シート数を調べる Worksheets.Count
- シート名を調べる Worksheets(シート番号).Name
- ブック名を調べる ActiveWorkbook.Name
- ブックのファイルサイズ FileLen(フルパス) C:\1.xls
- ブックのフルパス ActiveWorkbook.FullName
For ループ
- For x = 1 To 100
- x = x+1
- If x=10 Then Exit For xが10なら forから抜け出す
- Next x
- For ループを途中で抜け出すのには、Exit For
- For x=0 To 100 Step 5 xは0.5.10.15・・・・・・・・100
Exit Sub
- Exit Sub でSubから抜け出す(終了する)
GoTo ラベル
- If x=10 Then GoTo ラベル xが10ならラベルに飛ぶ(もどってこない)
- ラベル:
- 処理
With End With 複数の処理
- With cells(1,1) ’セルA1にまとめて設定 太字の部分を省略できる
cells(1,1).Value = 10- With
cells(1,1).Size = 14cells(1,1).Bold = True- End With
cells(1,1).ColumnWidth =16cells(1,1).RowHeight = 20- End With
If Then Else End If
If Then ElseIf End If
- よくIfブロックに対応する End Ifがありません と叱られる
- 解説は http://officetanaka.net/excel/vba/error/compilation_error/error_13.htm
数値変数
- データ型 名称 消費メモリー
- Integer 整数型 2バイト
- Long 長整数型 4バイト
- Single 単精度浮動小数点数型 4バイト
- Double 倍精度浮動小数点数型 8バイト
- Currency 通貨型 8バイト
文字列変数
- String 文字列型
オブジェクトを格納する変数
- Object オブジェクト型
日付を格納する変数
- Date 日付型
全てのデータに対応する変数
- Variant バリアント型
コードの記述が長くなった時は_アンダーバーで改行 「半角スペース+_(アンダースコア?)」
- ActiveSheet.SetBackgroundPicture Filename:= _
- vbNullString
- ActiveSheet.SetBackgroundPicture Filename:=vbNullString と同じ