Я бы посоветовал взглянуть на реализацию EOS Portable Archive

У меня есть таблица со столбцом вроде следующего (пожалуйста, опустите числа, они нужны для форматирования открытых, закрытых, недоступных ячеек):

  1. ОТКРЫТЫЙ
  2. ОТКРЫТЫЙ
  3. недоступно
  4. ОТКРЫТЫЙ
  5. ЗАКРЫТО
  6. ОТКРЫТЫЙ
  7. ЗАКРЫТО
  8. недоступно
  9. ЗАКРЫТО
  10. недоступно
  11. ОТКРЫТЫЙ

Архивы двоичной сериализации еще не переносимы. См. Здесь: http: //www.boost. org / doc / libs / 1_55_0 / libs / serialization / doc / todo.html # portablebinaryarchives

Спасибо заранее за любую помощь!

Редактировать:

Спасибо Майклу Моулсдейлу за ответ! Я отредактировал код, чтобы искать пустую ячейку вместо END. Вот код:

PrivateSub CommandButton1_Click()
Dim VarCycles
Dim BooStart
Dim booClosed

VarCycles = 0
BooStart = False
booClosed = False

Range("B2").Select
While Selection.Value <> IsEmpty("B2")
    If Selection.Value = "OPEN" And BooStart = False Then
        BooStart = True
    End If
    If Selection.Value = "CLOSED" And BooStart = True Then
        BooStart = False
        VarCycles = VarCycles + 1
    End If
    Selection.Offset(1, 0).Select
Wend
Range("B1").Select
Selection.Value = VarCycles

Конец Югу

-2
user3446462 21 Мар 2014 в 17:03
Я вижу только один паттерн Open->Closed->Open (4->5->6). Почему the correct amount of 'cycles' would be 2?
 – 
Dmitry Pavliv
21 Мар 2014 в 17:07
1
Разместите код. Вы пробовали что-нибудь? какие у тебя ошибки? или вы просто хотите, чтобы кто-то сделал это за вас?
 – 
BRBT
21 Мар 2014 в 17:31
SO 4->5->6 - это 1 цикл, а второй цикл - 6->7->11. Один и тот же OPEN может быть «циклом» и замкнутым «циклом».
 – 
user3446462
21 Мар 2014 в 18:11
Извините, это был мой первый пост, и я не знал, что нужно написать свой собственный код. Я играл с =COUNTIF(B:B,(INDEX(B:B,MATCH(Q1,B:B,0)+1="OPEN"))) где список OPEN, CLOSE находится в B столбец и Q1=ЗАКРЫТЬ. Я знаю, что могу поменять это в коде, но я менял местами, чтобы посмотреть, смогу ли я получить что-то, что работает.
 – 
user3446462
21 Мар 2014 в 18:20

2 ответа

Лучший ответ

Двоичные различия в файлах, вызывающие непригодный для использования десериализованный объект

Sub Macro1()
'
' Macro1 Macro
'

'
    varCycles = 0
    booStart = False
    booClosed = False

    Range("B2").Select
    While Selection.Value <> "END"
        If Selection.Value = "OPEN" And booStart = False Then
            booStart = True
        End If
        If Selection.Value = "CLOSED" And booStart = True Then
            booStart = False
            varCycles = varCycles + 1
        End If
        Selection.Offset(1, 0).Select
    Wend
    Range("B1").Select
    Selection.Value = varCycles
End Sub
0
Michael Moulsdale 21 Мар 2014 в 17:27

Я думаю, вы можете сделать это с помощью этой функции:

=IF(AND(A1="OPEN"; A2="CLOSED"; A3="OPEN"); 1; 0)

Который доступен по разрешительной лицензии. Это обещает реализовать действительно переносимый формат архива сериализации (с некоторыми задокументированными ограничениями).

0
hhh 21 Мар 2014 в 17:10