
ExcelでON,OFFの切り替え時間をカウントしたい。
MS Excelにてデータの整理を行っています。
今回、ONとOFFの信号を読み取ってそれを各セルに表示しているのですが、
それをカウントしたいのです。
現在エクセル上では以下のようになっています。
A B C D
1 時間 信号
2 1 ON
3 2 ON
4 3 ON
5 4 ON
6 5 OFF
7 6 OFF
・ ・ ・
・ ・ ・
・ ・ ・
これらを
(1)トップ(セル番B2)から始め、下のセルをどんどん読んでいく
(2)ONが連続していればカウント続行、OFFになったらカウントを止める。そのカウントをcell C2に入れる。
(3)次は逆にOFFをカウントしていき、同じようにONになったらカウントを止める。そのカウントをcell D2に入れる
(4)(2)と(3)を繰り返し行い、ONのカウントはC列に、OFFのカウントはD列に入力していく。
(5)参照する対象のセルが空白であれば、演算(マクロ?)をストップする。
というふうにしたいのですがよくわかりません。
なお、時間は1セル1秒の間隔になっていますので、セルの数をカウントする方法で構いません。
VBAを使っても構いませんので、どなたかご教授お願いいたします。
No.2ベストアンサー
- 回答日時:
一例です。
各連続する区間をカウントしていますので相違しているようでしたら読み捨て下さい。
Sub カウント()
a = 1
b = 1
For i = 2 To Cells(Rows.Count, 2).End(xlUp).Row
Select Case Cells(i, "B").Value
Case "ON"
If Cells(i, "B") <> Cells(i + 1, "B") Then
Cells(i, "C").Value = a
a = 1
Else
a = a + 1
End If
Case "OFF"
If Cells(i, "B") <> Cells(i + 1, "B") Then
Cells(i, "D").Value = b
b = 1
Else
b = b + 1
End If
End Select
Next i
End Sub
ありがとうございました。
きちんとカウントすることができました。
初心者のため、コードの内容についてはわかりませんので自身で学習してみたいと思います。
No.4
- 回答日時:
もし、勘違いしていたならばすみません。
作業列を設ければ関数でも可能だと思います。
例えば、F列とG列を作業列として使用するものとします。
まず、F2セルに次の数式を入力して下さい。
=IF($B$1="OFF",1,"")
次に、G2セルに次の数式を入力して下さい。
=IF($B$1="ON",1,"")
次に、F3セルに次の数式を入力して下さい。
=IF(AND($B2="ON",$B3<>"ON"),COUNT(F$2:F2)+1,"")
次に、G3セルに次の数式を入力して下さい。
=IF(AND($B2="OFF",$B3<>"OFF"),COUNT(G$2:G2)+1,"")
そして、F3~G3の範囲をコピーして、予定されるB列の行数を上回るのに充分な回数になるまで、同じ列の4行目以下に貼り付けて下さい。
次に、C2セルに次の数式を入力して下さい。
=IF(ROWS($1:1)>COUNT($F:$F)-($B$2="OFF"),"",MATCH(ROWS($1:1)+($B$2="OFF"),$F:$F)-MATCH(ROWS($1:1),$G:$G))
次に、D2セルに次の数式を入力して下さい。
=IF(ROWS($1:1)>COUNT($G:$G)-($B$2="ON"),"",MATCH(ROWS($1:1)+($B$2="ON"),$G:$G)-MATCH(ROWS($1:1),$F:$F))
そして、C3~D3の範囲をコピーして、予定されるON・OFFの切り換え回数を上回るのに充分な回数になるまで、同じ列の4行目以下に貼り付けて下さい。
以上でカウント可能になると思います。
No.3
- 回答日時:
VBAは忘れてしまいましたので、少々いい加減ですが、
こんな感じ?
(ActiveSheetが対象。ON、OFF以外の値が出てきたところで停止します。)
Sub sample()
Dim rng As Range
Dim val As String, count As Long
Set rng = ActiveSheet.Cells(1, 2)
ActiveSheet.Columns("C:D").ClearContents
count = 0
Do
val = rng.Offset(1, 0).Value
If (val <> "ON" And val <> "OFF") Then Exit Do
If (val = rng.Value) Then
count = count + 1
Else
Call setCount(count, rng.Value)
count = 1
o_val = val
End If
Set rng = rng.Offset(1, 0)
Loop
Call setCount(count, rng.Value)
End Sub
Sub setCount(cnt As Long, v As String)
Dim c As Integer
If (cnt = 0) Then Exit Sub
If (v = "ON") Then c = 3 Else c = 4
ActiveSheet.Cells(Rows.count, c).End(xlUp).Offset(1, 0).Value = cnt
End Sub
回答ありがとうございました。
実行してみた結果、表示はされましたが、
「ONとOFFどちらか」または「ONとOFFどちらも」実際の値よりも+1されてしまいます。
自身で学習して解析してみたいと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
CubesoftPDFはAdobe Acrobat Re...
-
ゆうちょ認証アプリが使えません
-
既存のプログラムで拡張子HPGの...
-
Acronis True Image HD 2022の...
-
Outlookのエラー表示について
-
パソコンソフトでお知恵を下さ...
-
SketchUp Freeのダウンロードの...
-
notepadというテキストエディタ...
-
コピー元とコピー先を同じにす...
-
フォルダー内のファイル名をテ...
-
STEAM版BF4が起動しない
-
premiere「ディスク上のファイ...
-
PowerDVDでブルーレイを再生で...
-
EXCELファイルの拡張子変更につ...
-
iTunesを完全にアンインストー...
-
powerAutomateの使用メモリにつ...
-
エクセルなどで自分専用の辞書...
-
Kritaについて
-
ホームページビルダークラシッ...
-
Pencil plannerで非常に困って...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
パソコンソフトでお知恵を下さ...
-
Outlookのエラー表示について
-
STEAM版BF4が起動しない
-
既存のプログラムで拡張子HPGの...
-
jtrim 1.53cが正常な動きをし...
-
SketchUp Freeのダウンロードの...
-
ChatGPTの回答をコピーしても箇...
-
premiere「ディスク上のファイ...
-
Acronis True Image HD 2022の...
-
iTunesと似た機能のソフトを教...
-
Windows Media Playerが動作し...
-
スプレッドシートの作業範囲
-
コピー元とコピー先を同じにす...
-
ゆうちょ認証アプリが使えません
-
microsoft teamsの左のアイコン...
-
mp3 ファイルをCDに焼く無料ソ...
-
Google日本語で『賛否』が出ない
-
powerAutomateの使用メモリにつ...
-
CubesoftPDFはAdobe Acrobat Re...
-
Prishwallというソフト
おすすめ情報