Вопрос: Ввод строки в строку, построенную в формуле excel, в метке данных


Мне нужно построить метку данных в диаграмме excel, используя формулу, строящую строку из двух ячеек с разрывом строк между ними.

Это будет работать в формуле ячейки:

=A1 & CHAR(10) & B1

и это будет работать в VBA

=A1 & Chr(10) & B1

как в этом сообщении: http://www.ozgrid.com/forum/showthread.php?t=40644 но ни один из этих подходов не работает внутри метки данных. Есть идеи?


0
2017-11-09 15:55


Источник


Чтобы это работало в ячейках, необходимо включить Word Wrap. Это опция в метке данных? - Brad
Нет, но если я ссылаюсь на ячейку с разрывом строки, то она, похоже, работает - Dan


Ответы:


В VBA вы можете использовать это:

Dim str as String

str = Range("A").Value & vbCrlf & Range("B").Value

vbCrlf даст вам прерывание строки ...


1
2017-11-09 15:58



=A1 & CHAR(10) & B1 также работает, если вы сделаете так, как говорит Брэд, и установите ячейку для использования переноса слов. Вы не можете установить это внутри определения данных. Он должен быть привязан к ячейке или настройке с помощью vba. - Jook
= A1 & Chr (10) & B1 отлично работает в VBA, а также в моем вопросе. Решить это в VBA не проблема, но спасибо в любом случае. Кроме того, vbNewLine работает, что, вероятно, является наиболее читаемым выбором, если вы используете VBA. - Dan


Это сработало для меня в VBA:

Sheet1.ChartObjects(1).Chart.SeriesCollection(1).Name = "a" & vbCr & "b"

И, как сказано, это работает с формулой:

=DATASERIES(Sheet1!$E$1,Sheet1!$A$2:$A$4,Sheet1!$B$2:$B$4,1)

E1 = "a" & CHAR(10) & "b"

E1 должен иметь набор переносов слов.

DATASERIES - это то, что вы видите в разделе редактирования формул, когда вы выбрали свою серию.


0
2017-11-09 16:29



Часть DATASERIES не нужна, все, что мне было нужно, это поместить разрыв строки в ячейку, а затем сделать метку данных ссылкой на эту ячейку. So = A1 & CHAR (10) & B1 в ячейке, завернутой словом (скажем C1), а затем в метке данных just = C1 работает. Я не уверен, что это то, что вы говорили в своем ответе, но я собираюсь отметить его как правильное, возможно, вы можете отредактировать его, чтобы отразить этот комментарий. - Dan
ОК. Я вижу преимущество настройки этой формулы DATASERIES, но это дает мне ошибку. Я использую excel 2012. Если я нажму на серию, то получаю следующую формулу: = SERIES («Заметки с плавающей ставкой», NSS! $ I $ 35: $ I $ 85, NSS! $ L $ 35: $ L $ 85,5 ) Я попытался добавить диапазон ярлыков данных в качестве параметра в нескольких местах, но ничего не работает, а также я попытался изменить SERIES на DATASERIES, но также и не хорошо. Есть идеи? - Dan
Мой пример был на excel2007, и да, это, что вы описали в своем комментарии. Я просто использовал формулу DATASERIES вместо соответствующего диалога. Основываясь на том, что вы написали, я бы изменил его, например. =SERIES(NSS!$I$34,NSS!$I$35:$I$85,NSS!$L$35:$L$85,5) но я не могу это проверить. - Jook
Подождите, а затем, где вы поместите имя серии, которое является первым параметром в моей функции SERIES ()? А также, если вы просто ссылаетесь на одну ячейку, тогда вы получаете только один datalabel no? Мне нужно, чтобы все точки имели метки, ссылающиеся на разные ячейки, поэтому замените NSS! $ I $ 34 на диапазон. Но, глядя на вашу формулу, кажется, что вы пытаетесь получить разлад строки в названии серии, а не в роли datalable. Я решил это с VBA, но если есть способ, я не хочу это слышать. - Dan
Ах, ладно, да, тогда это было недоразумение - я бы не знал, каким образом индивидуально назначать значения для данных без VBA. Каким-то образом я был под сильным впечатлением от тебя. - Jook


Так вот как я заработал.

Шаг 1: создайте новый столбец с включенным wordwrap с формулой =A1 & CHAR(10) & B1 в ячейке C1 и при необходимости перетащить

Шаг 2. Запустите следующий код VBA, чтобы установить, чтобы каждая метка данных указывала на правильную ячейку

Sub SetDataLabels()

    Dim ChartName As String
    ChartName = "My Chart's Name"

    With ActiveSheet.ChartObjects(ChartName).Chart

        Dim Series As Integer
        Series = 4

        With .SeriesCollection(Series)

            Dim currentPoint As Integer

            For currentPoint = 1 To .Points.Count

                .Points(currentPoint).DataLabel.Text = Range("C" & currentPoint).Text

            Next currentPoint
        End With

    End With

End Sub

0
2017-11-12 13:21