VBA Excel:查找使用超过5列的行

VBA Excel:查找使用超过5列的行,vba,excel,Vba,Excel,我正在开发一个程序,将多个excel工作簿编译成一个,并绘制数据。我遇到的一个问题是,实际数据之前的行不同,我希望代码能够自己找到起点。最重要的是,我希望它使用一个范围,从该行开始,一直到电子表格,直到数据停止 以下是我目前的代码: Private Sub runHPO_Click() Dim FolderPath As String Dim FileName As String Dim WorkBk As Workbook Dim SourceRange As range Dim DestRa

我正在开发一个程序,将多个excel工作簿编译成一个,并绘制数据。我遇到的一个问题是,实际数据之前的行不同,我希望代码能够自己找到起点。最重要的是,我希望它使用一个范围,从该行开始,一直到电子表格,直到数据停止

以下是我目前的代码:

Private Sub runHPO_Click()
Dim FolderPath As String
Dim FileName As String
Dim WorkBk As Workbook
Dim SourceRange As range
Dim DestRange As range
Dim DataSheet As Worksheet
Dim cht As Chart

Application.ScreenUpdating = False

'Test specific section - directory, chart title
FolderPath = "I:\SHARED\Marshall Test Compiler\Performance Tests\3.2.1.7 HPO\"
FileName = Dir(FolderPath & "*.*")
ThisWorkbook.Charts.Add.Name = "HPO"
Set cht = ActiveChart
With cht
    .ChartType = xlXYScatterLinesNoMarkers
    .HasTitle = True
    .ChartTitle.Text = "3.2.1.7 Hot Pump Out"
    .Axes(xlCategory).HasTitle = True
    .Axes(xlCategory).AxisTitle.Text = "Time [min:sec]"
    .Axes(xlValue, xlPrimary).HasTitle = True
    .Axes(xlValue, xlPrimary).AxisTitle.Text = "Fan Speed [rpm]"
End With

Do While FileName <> ""
    ThisWorkbook.Sheets.Add(After:=Sheets(Sheets.Count)).Name = FileName
    Set DataSheet = ActiveSheet
    Set WorkBk = Workbooks.Open(FolderPath & FileName)
    Set SourceRange = WorkBk.Worksheets(1).range("A1:Z2045")
    Set DestRange = DataSheet.range("A1:Z2045")
    DestRange.Value = SourceRange.Value

    'Change legend name to serial number
    Dim LName As String
    LName = DataSheet.range("A14").Characters(8, 9).Text

    'Add plotting
    Dim profTime As range
    Dim profInSpeed As range
    Dim profSpDemand As range
    Dim profLoLimit
    Dim xrange As range
    Dim fsrange As range
    Dim pwmrange As range
    Dim btrange As range
    Dim sdrange As range

    Set profTime = ThisWorkbook.Worksheets("Profiles").range("H4:H13")
    Set profInSpeed = ThisWorkbook.Worksheets("Profiles").range("I4:I13")
    Set profSpDemand = ThisWorkbook.Worksheets("Profiles").range("J4:J13")
    Set profUpLimit = ThisWorkbook.Worksheets("Profiles").range("K4:K13")
    Set xrange = DataSheet.range("A797:A2045")
    Set fsrange = DataSheet.range("D797:D2045")
    Set pwmrange = DataSheet.range("J797:J2045")
    Set btrange = DataSheet.range("F797:F2045")
    Set sdrange = DataSheet.range("K797:K2045")

    xrange.NumberFormat = "mm:ss"
    profTime.NumberFormat = "mm:ss"

    'Profile
    With cht.SeriesCollection.NewSeries
        .Name = "Input Speed"
        .AxisGroup = xlPrimary
        .Values = profInSpeed
        .XValues = profTime
    End With
    With cht.SeriesCollection.NewSeries
        .Name = "Speed Demand"
        .AxisGroup = xlPrimary
        .Values = profSpDemand
        .XValues = profTime
    End With
    With cht.SeriesCollection.NewSeries
        .Name = "Fan Speed Upper Limit"
        .AxisGroup = xlPrimary
        .Values = profUpLimit
        .XValues = profTime
    End With

    'Fan Speed
    With cht.SeriesCollection.NewSeries
        .Name = LName & " Fan Speed"
        .AxisGroup = xlPrimary
        .Values = fsrange
        .XValues = xrange
    End With

    'PWM
    With cht.SeriesCollection.NewSeries
        .Name = LName & " PWM"
        .AxisGroup = xlSecondary
        .Values = pwmrange
        .XValues = xrange
    End With

    'Box Temp
    With cht.SeriesCollection.NewSeries
        .Name = LName & " Box Temp"
        .AxisGroup = xlSecondary
        .Values = btrange
        .XValues = xrange
    End With

    'Speed Demand
    With cht.SeriesCollection.NewSeries
        .Name = LName & " Speed Demand"
        .AxisGroup = xlSecondary
        .Values = sdrange
        .XValues = xrange
    End With

    WorkBk.Close savechanges:=False
    FileName = Dir()
Loop

With cht
    .HasAxis(xlValue, xlSecondary) = True
    .Axes(xlValue, xlSecondary).HasTitle = True
    .Axes(xlValue, xlSecondary).AxisTitle.Select
    .Axes(xlValue, xlSecondary).AxisTitle.Text = "PWM [%] / Box Temp [degC]"
    .Axes(xlValue, xlPrimary).MaximumScale = 2400
    .Axes(xlValue, xlSecondary).MaximumScale = 120
    .Axes(xlValue, xlSecondary).MinimumScale = -800
    .SeriesCollection(1).Delete
End With
ThisWorkbook.Worksheets("Compiler").Select
Application.ScreenUpdating = True
End Sub
Private Sub runHPO_单击()
将FolderPath设置为字符串
将文件名设置为字符串
将WorkBk设置为工作簿
将源范围变暗为范围
变暗减小范围为范围
将数据表设置为工作表
暗海隧As图
Application.ScreenUpdating=False
'测试特定部分-目录,图表标题
FolderPath=“I:\SHARED\Marshall Test Compiler\Performance Tests\3.2.1.7 HPO\”
FileName=Dir(FolderPath&“***”)
ThisWorkbook.Charts.Add.Name=“HPO”
设置cht=ActiveChart
与红隧
.ChartType=xlxySpatterlinesNoMarkers
.hasttle=正确
.ChartTitle.Text=“3.2.1.7热泵输出”
.Axes(xlCategory).hasttle=True
.Axes(xlCategory).AxisTitle.Text=“时间[分钟:秒]”
.Axes(xlValue,xlPrimary).hastintle=True
.Axes(xlValue,xlPrimary).AxisTitle.Text=“风扇转速[rpm]”
以
文件名“”时执行此操作
ThisWorkbook.Sheets.Add(之后:=Sheets(Sheets.Count)).Name=文件名
设置数据表=活动表
设置WorkBk=Workbooks.Open(文件夹路径和文件名)
设置SourceRange=WorkBk.Worksheets(1.range)(“A1:Z2045”)
设置DestRange=DataSheet.range(“A1:Z2045”)
DestRange.Value=SourceRange.Value
'将图例名称更改为序列号
作为字符串的Dim LName
LName=数据表。范围(“A14”)。字符(8,9)。文本
'添加绘图
模糊时间范围
Dim profInSpeed As范围
变暗profemand As范围
暗色profLoLimit
变暗X范围作为范围
变暗fsrange作为范围
变暗PWM范围作为范围
变暗btrange As范围
Dim sdrange As范围
Set profTime=thispoolk.Worksheets(“Profiles”).range(“H4:H13”)
设置profInSpeed=ThisWorkbook.Worksheets(“Profiles”).range(“I4:I13”)
Set PROFSPEMAND=ThisWorkbook.工作表(“配置文件”).范围(“J4:J13”)
Set PROFAPLIMIT=ThisWorkbook.Worksheets(“Profiles”).range(“K4:K13”)
设置xrange=数据表范围(“A797:A2045”)
设置fsrange=DataSheet.range(“D797:D2045”)
设置pwmrange=数据表范围(“J797:J2045”)
设置btrange=数据表范围(“F797:F2045”)
设置sdrange=DataSheet.range(“K797:K2045”)
xrange.NumberFormat=“mm:ss”
profTime.NumberFormat=“mm:ss”
"侧面图"
使用cht.SeriesCollection.NewSeries
.Name=“输入速度”
.AxisGroup=xlPrimary
.Values=profInSpeed
.XValues=profTime
以
使用cht.SeriesCollection.NewSeries
.Name=“速度需求”
.AxisGroup=xlPrimary
.Values=profspemand
.XValues=profTime
以
使用cht.SeriesCollection.NewSeries
.Name=“风扇转速上限”
.AxisGroup=xlPrimary
.Values=profaplimit
.XValues=profTime
以
'风扇转速
使用cht.SeriesCollection.NewSeries
.Name=LName和“风扇转速”
.AxisGroup=xlPrimary
.Values=fsrange
.XValues=xrange
以
'脉宽调制
使用cht.SeriesCollection.NewSeries
.Name=LName&“PWM”
.AxisGroup=xlSecondary
.Values=pwmrange
.XValues=xrange
以
“箱温
使用cht.SeriesCollection.NewSeries
.Name=LName&“箱温”
.AxisGroup=xlSecondary
.Values=btrange
.XValues=xrange
以
“速度需求
使用cht.SeriesCollection.NewSeries
.Name=LName和“速度需求”
.AxisGroup=xlSecondary
.Values=sdrange
.XValues=xrange
以
WorkBk.Close savechanges:=False
FileName=Dir()
环
与红隧
.HasAxis(xlValue,xlSecondary)=真
.Axes(xlValue,xlSecondary).hastintle=True
.Axes(xlValue,xlSecondary).AxisTitle.Select
.Axes(xlValue,xlSecondary).AxisTitle.Text=“PWM[%]/Box Temp[degC]”
.轴(xlValue,xlPrimary)。最大刻度=2400
.轴(xlValue,xlSecondary)。最大刻度=120
.轴(xlValue,xlSecondary)。最小刻度=-800
.系列集合(1).删除
以
此工作簿。工作表(“编译器”)。选择
Application.ScreenUpdating=True
端接头

在您的示例中,您的数据被最左侧的大量标题信息所阻塞。如果始终是这种情况,则可以选择一列,该列前面永远不会有数据,然后使用以下命令查找第一行:

FirstRow=工作表(“您的工作表名称”)。单元格(1,20)。结束(xlDown)。行

(这假设第20列没有所有标题数据)。您可以使用以下命令查找连续数据的最后一行:

LastRow=Sheets(“您的工作表名称”)。单元格(第一行,20)。结束(xlDown)。行

最后一列:

LastColumn=Sheets(“您的工作表名称”).Cells(第一行,Columns.Count)。end(xltoLeft)。Column


如果没有无障碍列,我建议您使用
.Find
功能查找唯一的数字或alpha格式。

欢迎使用SO!一般来说,像我这样的人帮助你,把你的问题分成更小的、离散的关于“我该怎么做…”的问题要容易得多。“我希望代码能够自己找到起点。”---让我们谈谈这个问题。你听说过
xlUp
xlDown
吗?使用
单元格(i,j)
怎么样?谷歌这些,看看它可能有帮助!谢谢,我会记住的!我在谷歌上做了很多搜索,并尝试了一些变化,主要包括
.find
,但我似乎无法让它工作。我相信我使用的确切代码是
rowStart=DataSheet.Columns(“K”).Find(what:=“*”,After:=单元格(“K1”),LookIn:=xlValues,SearchDirecti