電子書籍の厳選無料作品が豊富!

EXCEL VBA 最初だけ0という値を入れたい。

以前VBAのストップウォッチ機能について投稿したものですが
最初、startstopボタンを押した時にB6に0を入れるようにしてその後にsplitを押していくと
B8.B10.B12...と値が入っていくようにしたいです!
参考に下記にコード書いておきます!
お手数おかけしますが詳しい方教えて下さい!
宜しくお願いします!

Option Explicit
Declare PtrSafe Function GetAsyncKeyState Lib "User32.dll" (ByVal vKey As Long) As Integer
Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private cnt As Range
Private blnStop As Boolean
Private blnStart As Boolean
Private dblTimer As Double
Private bLap As Double
Private cntLap, No, No2, i, j, k, S, F, X, Z, V, R, No3 As Long
Private keyTimer(0 To 1) As Double

Sub StartStop()
If blnStart = True Then
blnStop = True
' キーを無効化
  Application.OnKey "{ENTER}"
  Application.OnKey "~"
  Application.OnKey "{RIGHT}"
Exit Sub
End If
' キーを有効化
  Call Enter_set
  Call RIGHT_set
bLap = 0
cntLap = 0
blnStart = True
blnStop = False
dblTimer = Timer
Do Until blnStop = True
Cells(2, 2) = Int((Timer - dblTimer) * 100) / 100
Sleep 1
If GetAsyncKeyState(vbKeyRight) Then Call keyControl(0)
If GetAsyncKeyState(vbKeyReturn) Or _
  GetAsyncKeyState(vbKeySeparator) Then Call keyControl(1)
DoEvents
Loop
blnStart = False
blnStop = False
End Sub

Sub keyControl(ByRef n As Long)
Dim dt As Double
Const keyWeight = 120 '←キーの感度をこの値で調節
dt = Timer - keyTimer(n)
If dt < 0 Then dt = dt + 86400
If dt < keyWeight / 1000 Then Exit Sub
keyTimer(n) = Timer
If n = 0 Then Call RGT Else Call nui
End Sub

Sub Enter_set()
End Sub

Sub RIGHT_set()
End Sub

Sub Enter_set1()
    'キー割り当て用
    Application.OnKey "{ENTER}", "nui" 'テンキーのエンターキーのみ
    Application.OnKey "~", "nui"  'キーボードのエンターキーのみ
End Sub

Sub nui()
V = 6
R = Cells(Rows.Count, 1).End(xlUp).Offset(-6, 0).Row - 1
If 2 >= Z Then
Z = 2
If R >= No2 Then
      No2 = No2 + 2
      Sleep 1
     Cells(No2 + 4, Z) = Round(Timer - dblTimer, 1)
     Else
     Z = Z + 1
     No2 = 0
     No2 = No2 + 2
     Sleep 1
     Cells(No2 + 4, Z) = Round(Timer - dblTimer, 1)
End If
   Else
     if R >= No2 Then
      No2 = No2 + 2
      Sleep 1
        Cells(No2 + 4, Z) = Round(Timer - dblTimer, 1)
     Else
     Z = Z + 1
     No2 = 0
No2 = No2 + 2
     Sleep 1
     Cells(No2 + 4, Z) = Round(Timer - dblTimer, 1)
   End If
  End If
End Sub

Sub RIGHT_set1()
    'キー割り当て用
    Application.OnKey "{RIGHT}", "RGT"  'キーボードのエンターキーのみ
End Sub

Sub RGT()
Z =Z + 1
     No2 = 0
     No2 = No2 + 2
     Sleep 1
     Cells(No2 + 4, Z) = Round(Timer - dblTimer, 1)
End Sub

Sub LapSplitClear()
   S = 6
   F = Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row - 2
   'F = 25
    Do While F >= S
    Range(Cells(S, 2), Cells(S, 16)).ClearContents
    S = S + 2
    Loop
  Cells(2, 2) = 0
    Z = 0
    No2 = 0
End Sub

A 回答 (3件)

お礼を読みました。


そこで、少し疑問です。今ある処理は生かすのだと思いますが、
If R >= No2 Thenの時、Zは3すなわち、C列だと思います。
No2変数は、2ステップのようですが、対象セルは重複しないのかな?と

#1で回答しているコードを少しわかりやすくしましたので
R = Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row - 8
上部に入れてください。

If blnStart = True Then
With ActiveSheet
.Cells(7, "C").Offset(splCnt) = Int((Timer - dblTimer) * 100) / 100
splCnt = splCnt + 2
End With
End If
R = Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row - 8
SS = Worksheets("設定").Range("B2").Value



もしかして、示されているコードを書き換えるとの事ならば、もう少し条件をお伝えして頂かないと判りません。

ちなみにご質問の処理だけを行う場合の参考コードを書いておきます。
Option Explicit
Private blnStop As Boolean
Private blnStart As Boolean
Private dblTimer As Double
Private splCnt As Long
Sub StartStop()
If blnStart = True Then
blnStart = False
blnStop = True
splCnt = 0
dblTimer = 0
Exit Sub
Else
blnStart = True
blnStop = False
ActiveSheet.Range("B6").Value = 0
dblTimer = Timer
End If
End Sub
Sub split_button()
If blnStart = True Then
With ActiveSheet
.Cells(7, "C").Offset(splCnt) = Int((Timer - dblTimer) * 100) / 100
splCnt = splCnt + 2
End With
Else
MsgBox ("Startしていません。")
End If
End Sub
    • good
    • 0
この回答へのお礼

回答ありがとうございます!
分かりにくくてすいません!
一回質問終了させていただき、ちゃんと詳細情報を載せたうえで投稿します!
お手数かけましてすみません!
宜しくお願いします。

お礼日時:2021/01/29 13:13

投稿後気が付きました


B2でなくB6でしたね
ActiveSheet.Range("B6").Value = 0 '
    • good
    • 0
この回答へのお礼

回答ありがとうございます!
splitボタンですが下記コードに追加したいです。
スタートがC7 からでした。すみません
Sub LapSplit14項目用()

R = Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row - 8
SS = Worksheets("設定").Range("B2").Value
If 2 >= Z Then
Z = 3
If R >= No2 Then
      No2 = No2 + 2
      Sleep 1
     Cells(No2 + 5, Z) = Round(Timer - dblTimer, SS)
     Else
  Z = Z + 1
     No2 = 0
     No2 = No2 + 2
     Sleep 1
     Cells(No2 + 5, Z) = Round(Timer - dblTimer, SS)
End If
   Else
     If R >= No2 Then
      No2 = No2 + 2
      Sleep 1
        Cells(No2 + 5, Z) = Round(Timer - dblTimer, SS)
     Else
     Z = Z + 1
     No2 = 0
     No2 = No2 + 2
     Sleep 1
     Cells(No2 + 5, Z) = Round(Timer - dblTimer, SS)
   End If
  End If
End Sub

お礼日時:2021/01/29 10:31

こんにちは、


>最初、startstopボタンを押した時にB6に0を入れるようにしてその後にsplitを押していくとB8.B10.B12...と値が入っていくようにしたいです!

変数を追加
Private splCnt As Long

Sub StartStop()
If blnStart = True Then
blnStop = True
' キーを無効化
Application.OnKey "{ENTER}"
Application.OnKey "~"
Application.OnKey "{RIGHT}"
splCnt = 0 'ここに追加
Exit Sub
Else
ActiveSheet.Range("B2").Value = 0 'これも追加
End If

プロシージャを追加 (下記を丸ごとコピペ)
Sub split_button()
With ActiveSheet
.Cells(8 + splCnt, 2) = Int((Timer - dblTimer) * 100) / 100
splCnt = splCnt + 2
End With
End Sub

splitを押していく?ボタンに
split_button を登録

ご質問のコードを参考にしています。
いかがでしょう?
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!