在数据处理时,有时需要根据指定列的内容进行重新排序。比如样品测试时,假设存在5个测碍测行臬试点,测试点2和测试点3无需测,在作报告时,一般会保留测试点2和测试点3的位置,测试数据为罗嵯脶姥空。假定有一组测试数据,要根据“品号”列和给定的测试点数目(暂定5个),进行重新排序。下面介绍如何通过VBA代码,进行任务的实现。
工具/原料
ThinkpadE470
Windows10家庭中文版21H1
office365
方法/步骤
1、在Excel文件中,同时按下组合按钮【alt+F11】,打开vba编辑器。
2、在编辑器窗口中,插入一个模块,然后在模块内输入如下代码。OptionExplic坡纠课柩itSubsample_sort烫喇霰嘴()'根据品号列重新排序Dimrow_iniAsInteger,row_testAsInteger,numberAsIntegerDimname_sampleAsString,iiAsInteger,flagAsIntegerDimrow_tempAsInteger,row_objectAsIntegerrow_ini=2'测试数据从第2行开始(第1行是标题行)row_test=Cells(Rows.Count,3).End(xlUp).Row'测试数据最后一行的行号number=5'测试点数目,包括无需测的测试点。name_sample="SAM21-123"'样品名称'1.根据“品号”列查找测试数据Forii=1Tonumberrow_temp=row_test+1+iiCells(row_temp,3)="SAM21-123"&"-"&CStr(ii)'输入样品单号Cells(row_temp,4).Formula="=IFERROR(MATCH(C"&CStr(row_temp)&",C:C,0),10000)"'例:"=IFERROR(MATCH(C6,C:C,0),10000)"row_object=Cells(row_temp,4).ValueIfCells(row_temp,4).Value<=row_testThen'复制目标行到指定区域Rows(row_object).CopyRows(row_temp).SelectActiveSheet.PasteElseCells(row_temp,4).Formula=""EndIfNextii'2.覆盖原有的测试数据Rows(row_test+2&":"&row_test+2+number+row_test-row_ini+1).CopyRows(row_ini).SelectActiveSheet.PasteMsgBox"Done!"ExitSubEndSub
3、在"测试数据"表内,运行上述的宏命令,就可以得到经过重新排序后的测试数据。