excel 基于条件对表行进行连接或文本联接

myss37ts  于 2022-12-05  发布在  其他
关注(0)|答案(1)|浏览(159)

我有一个要导入Excel的GPS轨迹文件(同一文件中的多辆汽车),我想操纵和导出数据,使其符合一个gpx文件类型的单一选择的汽车。一些列是不需要从原始文件和一些文本需要添加到现有的列之间。我已经建立了一个宏,它可以完成一半的工作,但是它复制了那辆车的整行,而不是以我需要的形式获取数据。
在Excel中,我可以使用textjoin公式来实现我的目标,但我希望它是一个宏,这就是我遇到问题的地方。下面是一些示例数据和我的宏。我将在sheet 1上的C21中输入我要查找的汽车编号,并且只输入该汽车编号的行(列B)将移动到工作表2。我需要的格式是“trkpt lat=“insert lat”lon=“insert lon”time/insert time/”我将在这里将原始行的特定部分连接或文本连接到sheet 2上,但使用上面提到的格式。下面是一个数据示例,我的宏仅用于复制整行
第一个
我尝试了几个版本的textjoin工作表函数,可以替换cell.entirerow.copy代码行,但它不能获取与我想要的汽车匹配的正确行。我觉得我的方向是正确的,但缺少了一些东西。

mo49yndu

mo49yndu1#

请尝试下一个代码。它应该非常快,使用数组并立即丢弃处理结果。我看不到列标题,但代码假设要处理的数据从“A:A”列开始,到“G:G”第二行结束:

Sub Getdata()
  Dim wsSource As Worksheet, wsDest As Worksheet, lastR As Long
  Dim arrS, arrD, i As Long, k As Long
  Const carNo As Long = 6  'place here the car number
  
  Set wsSource = Worksheets(1)
  Set wsDest = Worksheets(2)
  
  lastR = wsSource.Range("A" & wsSource.rows.count).End(xlUp).row
  arrS = wsSource.Range("A2:G" & lastR).Value 'place the range in an array for faster iteration/processing
  
  ReDim arrD(1 To UBound(arrS), 1 To 3) 'redim the destination array as its maximum possible number of rows
  For i = 1 To UBound(arrS)
        If arrS(i, 2) = carNo Then
            k = k + 1
            arrD(k, 1) = "trkpt lat=""" & arrS(i, 4) & """"
            arrD(k, 2) = "lon=""" & arrS(i, 5) & """"
            arrD(k, 3) = "time/" & arrS(i, 7) & "/"
        End If
  Next i
  If k > 0 Then
        wsDest.Range("A2").Resize(k, 3).Value = arrD
 End If
 
 MsgBox "Ready...": wsDest.Activate
End Sub

请在测试后发送一些反馈。

相关问题