Предельная загадка диапазона

Я вернулся к сообщению Michael, сделал еще некоторый ввод по абсолютному адресу и понял, что действительно должен был сделать двойное преобразование, и в конечном счете разработал этот небольшой самородок:

Convert.ToString(Convert.ToChar(Int32.Parse(EncodedString.Substring(intParseIndex, 2), System.Globalization.NumberStyles.HexNumber)));

Оттуда я просто сделал цикл, чтобы пройти все символы 2 2 и получить их "hexified" и затем переведенный в строку.

Nick, и кто-либо еще заинтересовал, я шел вперед, и отправил мое небольшое приложение в CodePlex. Не стесняйтесь использовать/изменять, как Вам нужно.

5
задан Mathieu Guindon 1 March 2019 в 17:04
поделиться

3 ответа

Я думаю, что магическая функция, которую вы здесь ищете, - это Union (). Он встроен в Excel VBA, поэтому посмотрите справку по нему. Он делает именно то, что вы ожидаете.

Прокрутите свои диапазоны, но вместо построения строки создайте диапазон с несколькими областями. Затем вы можете выбрать или установить свойства для всего этого сразу.

Я не знаю, каков (если есть) ограничение на количество областей, которые вы можете создать в одном диапазоне, но оно больше 600. Я также не знаю, какие (если есть) ограничения на выбор или установку свойств многозонного диапазона, но, вероятно, стоит попробовать.

6
ответ дан 13 December 2019 в 19:30
поделиться

Более быстрым вариантом может быть использование свойства SpecialCells, чтобы найти пробелы, а затем скрыть строки:

Sub HideRows()

    Dim rng As Range

    Set rng = ActiveSheet.Range("A1:A600")
    Set rng = rng.SpecialCells(xlCellTypeBlanks)
    rng.EntireRow.Hidden = True

End Sub

Я думаю, это будет работать только с ячейками в пределах UsedRange.

2
ответ дан 13 December 2019 в 19:30
поделиться

Небольшое ускорение может быть получено, если вы установите RowHeight значение 0. В моей системе это происходит примерно в два раза быстрее (на 6000 итерациях около 1,17 секунды против 2,09 секунды)

Вы не упомянули, что такое «довольно долго» и какую версию XL вы используете ...

Частично ваша проблема может заключаться в обнаружении вашей строки код, который проверяет строку, которую вы хотите скрыть (?).

Вот мой тестовый код в XL 2003 (закомментируйте одну версию, затем другую):

Option Explicit

Public Sub test()
  Dim i As Integer
  Dim t As Long

  t = Timer()
  Application.ScreenUpdating = False
  For i = 1 To 6000
    With Range("A" & i)
        'If .Value = vbEmpty Then .EntireRow.Hidden = True
        If .Value = vbEmpty Then .RowHeight = 0
    End With
    Next
  Application.ScreenUpdating = True
  Debug.Print Timer() - t & " seconds"
  End Sub
2
ответ дан 13 December 2019 в 19:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: