SSブログ
Excel2000 VBA メモ ブログトップ

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 メモ]

Excel2000 VBA  選択範囲に連続数値を設定、セル結合がある場合の実験

excelVBA_renzoku_data.jpg
黄色の部分が結合セル
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

Excel2000 VBA メモ1 [Excel2000 VBA メモ]

マクロ実行の高速化

  1. Application.ScreenUpdating=False '画面更新の抑制
  2. 処理
  3. Application.ScreenUpdating=True '抑制の解除
  4. 処理内容によってはかなり高速化する


VBエディター イミティエイト

  1. Debug.Print A    →イミティエイトウインドウにAの値が表示される
  2. B=2 と入力し、?Bと入力するとBの値2が表示される
プロシージャの表示、モジュール全体を連続表示 切り替えボタン(左下)
excel_VBE_02.jpg

 

アクティブセルの位置を記録し、処理後にセルの位置を処理前にもどす

  1. 現在位置 = AcriveCell.Address
  2. 処理
  3. Range(現在位置).Select

 

登録したマクロにショートカットキーを設定する

  1. メニュバー>ツール>マクロ でショートカットキーを設定するマクロを選択し、右下の「オプション」ボタンを押して設定する
 

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 = 14
  • cells(1,1) .Bold = True
  •  End With
  • cells(1,1).ColumnWidth =16
  • cells(1,1).RowHeight = 20
  • End With 

If   Then  Else  End If
If   Then  ElseIf  End If




数値変数

  • データ型       名称             消費メモリー
  • Integer             整数型                2バイト
  • Long                長整数型               4バイト 
  • Single      単精度浮動小数点数型      4バイト
  • Double             倍精度浮動小数点数型      8バイト
  • Currency         通貨型                8バイト

文字列変数

  • String             文字列型

オブジェクトを格納する変数

  • Object            オブジェクト型

日付を格納する変数

  • Date       日付型

全てのデータに対応する変数

  • Variant           バリアント型

コードの記述が長くなった時は_アンダーバーで改行 「半角スペース+_(アンダースコア?)」

  • ActiveSheet.SetBackgroundPicture Filename:= _
  • vbNullString 
  •  ActiveSheet.SetBackgroundPicture Filename:=vbNullString と同じ

 


Excel2000 VBA メモ ブログトップ

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。