1、你把if range("a"&i)<>"姓名" and range("a"&i)<>"年龄" and range("a"&i)<>"年级" 反过来写成if range("a"&i)="姓名" or range("a"&i)="年龄" or range("a"&i)="年级",就简单了; 2、如果数量仍然觉得多,就用循环,需要定义一个数组,存储你需要的字段名: dim arr(1 to 6) arr(1)="姓名" arr(2)="年龄" arr(3)=“年级” .... for i=1 to 33 '循环33个列 if isempty(cells(1,i)) then '如果第一行的标题列为空就退出循环 exit for endif s=cells(1,i) '读取列标题,标题假设在第一行 bz=false '定义查询标志 for k=1 to 6 '循环数组 if arr(k)=s then '数组=列标题 bz=true '改变查询标志并退出查询 exit for endif next k if not bz then '如果没查到表示要删除 columns(i).delete '删除i列 i=i-1 '删除后后面的列会前移,所以参数要-1,否则前移的这一列会漏判断 endif next i 上面的代码虽然写的很长,但灵活性也更大,可以应付比较复杂的情况。 代码没有测试,可能会有错误;