У меня есть данные 10 x 2
измерения.Данные выглядят следующим образом:
year rate
05-06 10%
06-07 20.222%
07-08 13.17%
.
.
.
Я хочу напечатать эти данные в виде строки в текстовом поле, присутствующем над объектом диаграммы, и формат первого столбца должен быть текстом, а формат второгоСтолбец должен быть усечен до одного знака после запятой с символом процента.Я объединил данные в виде строки и вставил их в объект текстового поля на диаграмме, сопоставив ячейку, содержащую формулу, вызывающую приведенную ниже функцию.
Формат строки должен выглядеть следующим образом -
05-06 : 10.0% ; 06-07 : 20.2% ; 07-08 : 13.2% ...
Я сохранил эти данные как именованный диапазон rateCurrent
, и я использовал приведенный ниже код для генерации строки видимых строк.
= ConcatenateVisible(rateCurrent, ":", ";")
Пока предположим, что я вставил данные, начиная со столбца 3, строки 8.
Function ConcatenateVisible(rng As Variant, seperator As String, separator1 As String)
For Each cll In rng
If cll.EntireRow.Hidden = False And rng.Column = 3 Then
Debug.Print rng.Row
ConcatenateVisible = ConcatenateVisible & Format(cll.Value, "@") & seperator
Debug.Print cll.Value
Else
Debug.Print rng.Row
ConcatenateVisible = ConcatenateVisible & Format(cll.Value, "0.0%") & seperator1
End If
Next
ConcatenateVisible = Left(ConcatenateVisible, Len(ConcatenateVisible) - Len(seperator))
End Function
По какой-то причине второй цикл не работает, и я получаювывод, как показано ниже -
05-06 : 10.00000000000 : 06-07 : 20.2222222222 : 07-08 : 13.1765433333 ....
Я также попробовал функцию ниже, которая при добавлении цикла if для разрывов формата -
Public Function MakeList(ByVal myRange As Range) As String
On Error GoTo Errhand:
Dim c As Range
Dim MyDict As Object: Set MyDict = CreateObject("Scripting.Dictionary")
For i = 1 To myRange.Cells.Count
For Each c In myRange
If Not Rows(c.Row).Hidden Then
If Not MyDict.exists(c.Value2) Then MyDict.Add c.Value2, 1
End If
Next
Debug.Print c, MyDict.keys
If i Mod 2 = 0 Then
MakeList = Join(MyDict.keys, ": ")
Else
MakeList = Join(MyDict.keys, "; ")
End If
Next
cleanExit:
Set MyDict = Nothing
Set c = Nothing
Exit Function
Errhand:
Debug.Print Err.Number, Err.Description
GoTo cleanExit
End Function
Любые советы или помощь или предложения очень ценятся,ТИА.