人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

エクセルを使用して以下のある数値を知りたいです。
今、ある数値が100.05になっており刻々と0.01づつ変化しています。
100.05→100.06→100.07→100.06→100.07→100.06
上記の様に上下どちらに動くは不明です。

さて知りたい数値とは99.00や100.00や101.00など小数点以下が00の時のラインを踏んだ回数です。
但し以下の条件があります。
※同じラインを上下している場合はカウントしない。

例)カウント3の場合
99.99→100.00→100.01→(省略)→100.99→101.00→100.99→(省略)→100.01→100.00
上記では100.00と101.00と100.00を踏んでいます。

例)カウント1の場合
99.99→100.00→99.99→100.00→100.01→100.00→100.01→100.00→99.99
上記では100.00で一度カウントされているものの他のラインを踏んでいないために同じライン上での上下はカウントされません。

以上、計算の仕方(アルゴリズム)をご教授ください。
宜しくお願いします。

●質問者: spyglass
●カテゴリ:コンピュータ 科学・統計資料
✍キーワード:00 アルゴリズム エクセル カウント 上下
○ 状態 :終了
└ 回答数 : 2/3件

▽最新の回答へ

1 ● pahoo
●10ポイント

VBAを使うという前提で回答します。


◎質問者からの返答

100.05→100.06→100.07→100.06→100.07→100.06

上記を試してみたところまだ小数点以下"00"を踏んでいないにも関わらず全てでインクリメントが発生しました。

逆に100.00を踏むとインクリメントされません。

NGの様です。


2 ● Mook
●60ポイント ベストアンサー

値が刻々と変化というのは、特定セルの値が変化しているのでしょうか。

それとも時系列で変化している値が並んでいるのでしょうか。


後者であれば、たとえばA列に対象となるデータがある場合、下記のような計算式

で取得できると思います。

A B C
1 100.05 =INT(A1) =IF(MOD(INT(A1*100),100)=0,1,0)
2 100.04 =IF(MOD(INT(A2*100),100)=0,INT(A2),B1) =IF(B1=B2,C1,C1+1)
3 100.05 以下B2をコピー 以下C2をコピー

でC列にカウントした値が表示されます。


前者の場合は、VBA のWorksheet_Change 関数を使用すれば下記のようになるでしょうか。

Private Sub Worksheet_Change(ByVal Target As Range)
 If Intersect(Target, Range("A1")) Is Nothing Then Exit Sub
 
 Application.EnableEvents = False
 If (CInt(Range("A1") * 100) Mod 100) = 0 Then
 If Range("C1").Value <> CInt(Range("A1").Value) Then
 Range("C1").Value = CInt(Range("A1").Value)
 Range("B1").Value = Range("B1").Value + 1
 End If
 End If
 Application.EnableEvents = True
End Sub

A1が値、B1がカウント、C1が直前の整数値です。


いずれにせよ、直前の値を保持しそれと比較した結果をカウントするのが

基本的な考え方になります。

◎質問者からの返答

説明が抜けておりましたが後者のセルの変化値のカウントです。

完璧な答えです、イルカ賞です。

有難う御座いました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ