我有100K的Excel文件,其中有许多员工信息,我想将所有存在的数据移至此员工的第一行,下面的图片会比我的文字更响亮,可以使用VBA代码做这个?或有Excel中的一个把戏,我不知道的将所有行移至第一个行
1
A
回答
2
试试下面的代码。
Sub Demo()
Dim ws As Worksheet
Dim cel As Range, rng As Range
Dim lastRow As Long, lastCol As Long, i As Long
Dim fOccur As Long, lOccur As Long, colIndex As Long
Dim dict As Object, c1
Application.ScreenUpdating = False
Set ws = ThisWorkbook.Sheets("Sheet1") 'change Sheet1 to your data range
Set dict = CreateObject("Scripting.Dictionary")
With ws
lastRow = .Cells(.Rows.Count, "A").End(xlUp).Row 'last row with data in Column A
lastCol = .Cells.Find(What:="*", _
After:=.Range("A1"), _
Lookat:=xlPart, _
LookIn:=xlFormulas, _
SearchOrder:=xlByColumns, _
SearchDirection:=xlPrevious, _
MatchCase:=False).Column 'last column with data in Sheet1
Set rng = .Range("A1:A" & lastRow) 'set range in Column A
c1 = .Range("A2:A" & lastRow)
For i = 1 To UBound(c1, 1) 'using dictionary to get uniques values from Column A
dict(c1(i, 1)) = 1
Next i
colIndex = 16 'colIndex+1 is column number where data will be displayed from
For Each k In dict.keys 'loopthrough all unique values in Column A
fOccur = Application.WorksheetFunction.Match(k, rng, 0) 'get row no. of first occurrence
lOccur = Application.WorksheetFunction.CountIf(rng, k) 'get row no. of last occurrence
lOccur = lOccur + fOccur - 1
'copy range from left to right
.Range(.Cells(fOccur, 1 + colIndex), .Cells(lOccur, lastCol + colIndex)).Value = .Range(.Cells(fOccur, 1), .Cells(lOccur, lastCol)).Value
'delete blanks in range at right
.Range(.Cells(fOccur, 1 + colIndex), .Cells(lOccur, lastCol + colIndex)).SpecialCells(xlCellTypeBlanks).Delete Shift:=xlUp 'delte blank rows
Next k
End With
Application.ScreenUpdating = True
End Sub
0
尝试以下。您可以修改以下代码以匹配您要移动范围的位置:
Dim oW As Worksheet: Set oW = ThisWorkbook.Worksheets("Sheet8")
With oW.UsedRange
.Cut .Offset(0, .Columns.Count + 2)
End With
相关问题
- 1. DELPHI将第二行移至第一行备注
- 2. 一组中选择的所有行至第一个0
- 3. 如何将行鼠标移至行中的所有单元格
- 4. 将焦点移至DataGrid中新行的第一列(WPF)
- 5. SplFileObject将指针移至上一行
- 6. SED将文字移至下一行
- 7. 如何将第一行文件重复到所有第一列?
- 8. SQL - 返回所有行其中至少一个具有值“Y”
- 9. 将MySQL表的所有行转移到另一个表
- 10. 加入表中第一个匹配的行中的所有行
- 11. 字符串将第一个单词移至字符串末尾
- 12. 如何将光标移至引号内的第一个单词?
- 13. Sed将文本移至行首?
- 14. 如何将一行数据框移到第一行?
- 15. TextMate问题:如何将脱字符号移至下一个/上一个空行
- 16. 获取从第一个和最后一个行开始的所有行
- 17. 在HREF中断以移至下一行
- 18. UPDATE第二排以后的所有行,加入1至这些行
- 19. 删除第一个/包括第一个/每行后的所有内容
- 20. 第一次窗体验证后移至第二个窗体javascript
- 21. 将第一个单词移至Java中的最后一个位置
- 22. 移调行至Colums SQL
- 23. 移调(也许)行至列
- 24. 将第一项与词典中的所有条目进行比较,并将其与第一项进行比较
- 25. Excel Pivot将结果行移动到第一行
- 26. 如何将圆圈后面的一行移至圆圈底部
- 27. 如何将组件移至FlowLayout中的下一行?
- 28. 将行中的一列移到第三行(对于整个数据库)sqlite
- 29. Javascript:将textarea的每一行与另一个textarea的所有行进行比较
- 30. 关联数组最后一个元素移至第一
是的,VBA代码可以做到这一点。我不认为你可以用Power Query来做到这一点。并且手动方法对您的大型数据库来说过于繁琐 –