VBA Excel:查找使用超过5列的行
我正在开发一个程序,将多个excel工作簿编译成一个,并绘制数据。我遇到的一个问题是,实际数据之前的行不同,我希望代码能够自己找到起点。最重要的是,我希望它使用一个范围,从该行开始,一直到电子表格,直到数据停止 以下是我目前的代码: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
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