У меня есть лист Excel с 1000 строками, каждый из которых содержит 100 столбцов с номерами, упорядоченными от наименьшего к наибольшему слева направо (это все даты или годы, когда что-то произошло). Я хочу создать порядковый индекс для этих дат, нанося каждый столбец на 1-100.

На следующем рисунке показан пример интересующего меня графика. Здесь я построил только 2 из 1000 строк, но это по сути то, что я хотел бы сделать со всем набором данных. Пример точечного графика

Вот также ссылка на скриншот электронной таблицы Excel. По сути, я ищу более быстрый способ построения строк 1-1000 против строки 1001.Пример электронной таблицы

Есть ли способ сделать это в Excel быстрее, чем создать 1000 серий и выбрать данные 1000 раз? Или есть другая программа для этого? Я чувствую, что г было бы полезно, но у меня нет никакого опыта в этой программе.

1 ответ1

1

Да, есть более быстрый способ. Вы можете использовать макрос, чтобы создать свой сюжет программно.

Если вы знаете VB, перейдите к шагу 3.

  1. Откройте окно Visual Basic - через вкладку "Разработчик" или Alt-F11.
  2. В левом верхнем углу находится список рабочих тетрадей и модулей. Найдите название вашей книги, щелкните правой кнопкой мыши на ее названии и выберите «Вставить> Модуль». В дереве файлов теперь должна быть папка с именем Модули с элементом "Модуль1". Дважды щелкните по нему.
  3. Теперь вы находитесь в модуле Excel VB. Добавьте следующий код:

    Sub chart()
    ActiveSheet.Shapes.AddChart.Select
    ActiveChart.ChartType = xlXYScatter
    ActiveChart.Legend.Delete
    i = 1
    numSeries = 1000
    Do While i < numSeries + 1
      ActiveChart.SeriesCollection.NewSeries
      ActiveChart.SeriesCollection(i).XValues = "=Sheet1!$A$" & i & ":$CV$" & i
      ActiveChart.SeriesCollection(i).Values = "=Sheet1!$A$" & numSeries + 1 & ":$CV$" & numSeries + 1
      i = i + 1
    Loop
    End Sub
    
  4. Запустите код, используя кнопку запуска или меню в окне Visual Basic, или через вкладку "Разработчик" в Excel.

  5. Вы можете увидеть в коде имена столбцов $ A и $ CV. Измените их, если результат по каким-либо причинам не соответствует вашим данным. переменная numSeries может быть изменена, если вы хотите другое количество строк позже. Этот код предполагает, что у вас нет строки заголовка, и что данные оси X находятся в последней строке, что является необычным способом хранения данных диаграммы, но соответствует вашему примеру.

Изменить: X и Y переключены:

Sub chart()
ActiveSheet.Shapes.AddChart.Select
ActiveChart.ChartType = xlXYScatter
ActiveChart.Legend.Delete
i = 1
numSeries = 1000
Do While i < numSeries + 1
  ActiveChart.SeriesCollection.NewSeries
  ActiveChart.SeriesCollection(i).Values = "=Sheet1!$A$" & i & ":$CV$" & i
  ActiveChart.SeriesCollection(i).XValues = "=Sheet1!$A$" & numSeries + 1 & ":$CV$" & numSeries + 1
  i = i + 1
Loop
End Sub

и теперь пытаемся получить 1000 предметов с пределом 255, отображая в каждой серии 4 набора данных:

Sub chart()
ActiveSheet.Shapes.AddChart.Select
ActiveChart.ChartType = xlXYScatter
ActiveChart.Legend.Delete
i = 1
numSeries = 1000

s0 = "Sheet1!$A$" & numSeries + 1 & ":$CV$" & numSeries + 1


Do While i < (numSeries / 4 + 1)
  s1 = "=Sheet1!$A$" & i & ":$CV$" & i
  s2 = ", Sheet1!$A$" & i + numSeries / 4 & ":$CV$" & i + numSeries / 4
  s3 = ", Sheet1!$A$" & i + 2 * numSeries / 4 & ":$CV$" & i + 2 * numSeries / 4
  s4 = ", Sheet1!$A$" & i + 3 * numSeries / 4 & ":$CV$" & i + 3 * numSeries / 4


  ActiveChart.SeriesCollection.NewSeries
  ActiveChart.SeriesCollection(i).Values = s1 & s2 & s3 & s4
  ActiveChart.SeriesCollection(i).XValues = "=" & s0 & ", " & s0 & ", " & s0 & ", " & s0
  i = i + 1
Loop
End Sub

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .