Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


2451 / 13645 ツリー ←次へ | 前へ→

【67940】×の連続数を割り出す Toshi 11/1/18(火) 13:38 質問[未読]
【67941】Re:×の連続数を割り出す ぴかる 11/1/18(火) 14:18 発言[未読]
【67942】Re:×の連続数を割り出す Jaka 11/1/18(火) 14:26 発言[未読]
【67944】Re:×の連続数を割り出す UO3 11/1/18(火) 14:30 回答[未読]
【67945】Re:×の連続数を割り出す momo 11/1/18(火) 14:40 発言[未読]
【67949】Re:×の連続数を割り出す UO3 11/1/18(火) 16:15 発言[未読]
【67951】Re:×の連続数を割り出す momo 11/1/18(火) 17:45 発言[未読]

【67940】×の連続数を割り出す
質問  Toshi  - 11/1/18(火) 13:38 -

引用なし
パスワード
   こんにちは、教えてください。
a列に、ある試合の結果を、試合日の古い順に上から下に向かって
試合結果を○が×で入力しています。
やりたいのはc1に、試合の連敗記録数を表示させたいのですが、
その方法が分かりません。
要は、連続して続いた×の最高数をc1に表示させたいわけです。

【67941】Re:×の連続数を割り出す
発言  ぴかる  - 11/1/18(火) 14:18 -

引用なし
パスワード
   Toshiさん、こんにちは

あんましセンスは問わんといて下さいね。

Sub サンプル()

Dim I As Integer
Dim X数 As Integer


  Range("C1").Value = 0
  X数 = 0
  For I = 1 To Range("A65536").End(xlUp).Row
    If X数 = 0 And Cells(I, 1).Value = "×" Then
      X数 = 1
    End If
    If Cells(I, 1).Value = "×" Then
      If Cells(I + 1, 1).Value = "×" Then
        X数 = X数 + 1
      ElseIf (Cells(I + 1, 1).Value <> "×" Or I = Range("A65536").End(xlUp).Row) Then
        If X数 > Range("C1").Value Then
          Range("C1").Value = X数
        End If
        X数 = 0
      End If
    End If
  Next
  
End Sub

【67942】Re:×の連続数を割り出す
発言  Jaka  - 11/1/18(火) 14:26 -

引用なし
パスワード
   作業列を使うと簡単な数式だけですみますけど、
A1を項目名として
勝敗は、A2から下に書いてあるとして、
作業列をB列として、B2に
=IF(A2="×",IF(A1="×",B1+1,1),"")
B2を下にフィル。

最大は、
=MAX(B:B)
とかでも....。

【67944】Re:×の連続数を割り出す
回答  UO3  - 11/1/18(火) 14:30 -

引用なし
パスワード
   ▼Toshi さん:

書き終えてアップしようとしたら、既に同じようなものがぴかるさんから
出ていましたが、書いちゃったのでアップします。

Option Explicit

Sub Sample()
  Dim c As Range
  Dim oldX As Boolean
  Dim oldStr As String
  Dim maxCnt As Long, curCnt As Long
  
  With Worksheets("Sheet1")  '<== 実際のシート名に
    For Each c In .Range("A1:A" & .Range("A" & .Rows.Count).End(xlUp).Row + 1)
      If oldStr <> c.Value Then
        If oldX Then
          If curCnt > maxCnt Then maxCnt = curCnt
        End If
        curCnt = 0
      End If
      curCnt = curCnt + 1
      oldStr = c.Value
      oldX = False
      If oldStr = "X" Then oldX = True
    Next
  End With
  
  MsgBox "記録は" & maxCnt & "連敗です"
  
End Sub

【67945】Re:×の連続数を割り出す
発言  momo  - 11/1/18(火) 14:40 -

引用なし
パスワード
   ▼Toshi さん:
同じく、書いてしまったのでアップしてみます。
配列で処理してます。

Sub test()
Dim tbl As Variant, i As Long, ans As Long
tbl = Application.Transpose(Range("A1").CurrentRegion.Columns("A").Value)
tbl = Filter(Split(Join(tbl, ""), "○"), "×")
For i = 0 To UBound(tbl)
 If ans < Len(tbl(i)) Then
  ans = Len(tbl(i))
 End If
Next i
Range("C1").Value = ans
End Sub

【67949】Re:×の連続数を割り出す
発言  UO3  - 11/1/18(火) 16:15 -

引用なし
パスワード
   ▼momo さん:

わぁ、かっこいいです。
勉強になります!

もしA列が○と×だけであれば

tbl = Filter(Split(Join(tbl, ""), "○"), "×") は

tbl = Split(Join(tbl, ""), "○") でもいいですよね。

【67951】Re:×の連続数を割り出す
発言  momo  - 11/1/18(火) 17:45 -

引用なし
パスワード
   ▼UO3 さん:
>もしA列が○と×だけであれば
>
>tbl = Filter(Split(Join(tbl, ""), "○"), "×") は
>
>tbl = Split(Join(tbl, ""), "○") でもいいですよね。

そうですね。問題は無いです。

○が続くと、""の要素が多いので無駄にLen()を計算させなくても良いように
入れてみました〜

2451 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free