一、使用函数公式自动提取数据
VLOOKUP函数跨表提取 - 语法:`=VLOOKUP(查找值, 表格数组, 列索引号, [范围查找])`
- 示例:从Sheet2提取Sheet1中A列数据到B列,公式为`=VLOOKUP(A2, Sheet1!$A$2:$B$100, 2, FALSE)`,按`Ctrl+Shift+Enter`确认。
INDEX+MATCH组合获取最新数据
- 公式:`=INDEX(A:A, MATCH(MAX(IF(A:A<>"", ROW(A:A))), A:A, 0))`
- 示例:在A列数据中提取最新值,需按`Ctrl+Shift+Enter`输入。
MID+FIND提取固定位置数据
- 公式:`=MID(文本, 起始位置, 长度)`
- 示例:从A2单元格提取从第3位开始的3位数字,公式为`=MID(A2, 3, 3)`,拖动填充柄批量处理。
FIND+MID提取括号内容
- 步骤:
1. 使用`FIND("(", A1)`定位左括号位置;
2. 使用`FIND(")", A1)`定位右括号位置;
3. 计算长度:`=FIND(")", A1) - FIND("(", A1) - 1`;
4. 提取内容:`=MID(A1, 3, 长度)`;
- 示例:从A1提取括号内的"市场部",公式为`=MID(A1, 3, FIND(")", A1) - FIND("(", A1) - 1)`。
二、使用VBA自动化数据提取
基础提取代码
```vba
Sub 提取数据()
Dim wsSource As Worksheet, wsTarget As Worksheet
Dim lastRow As Long, i As Long
Set wsSource = ThisWorkbook.Sheets("数据源")
Set wsTarget = ThisWorkbook.Sheets("提取结果")
lastRow = wsSource.Cells(wsSource.Rows.Count, "A").End(xlUp).Row
For i = 2 To lastRow
wsTarget.Cells(i, 1).Value = wsSource.Cells(i, 1).Value
Next i
End Sub
```
- 说明:将源表A列数据复制到目标表A列,跳过标题行。
多表数据批量提取
```vba
Sub 多表提取()
Dim ws As Worksheet, targetRow As Long
Dim lastRow As Long
For Each ws In ThisWorkbook.Worksheets
If ws.Name <> "汇总表" Then
lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
ws.Range("A2:A" & lastRow).Copy Destination:=ThisWorkbook.Sheets("汇总表").Range("A2")
End If
Next ws
End Sub
```
- 说明:遍历所有工作表,跳过汇总表,将数据复制到指定汇总表。
条件筛选提取
```vba
Sub 筛选提取销售额大于1000的数据()
Dim wsSource As Worksheet, wsTarget As Worksheet
Dim lastRow As Long, i As Long
Set wsSource = ThisWorkbook.Sheets("数据源")
Set wsTarget = ThisWorkbook.Sheets("筛选结果")
lastRow = wsSource.Cells(wsSource.Rows.Count, "A").End(xlUp).Row
For i = 2 To lastRow
If wsSource.Cells(i, "D").Value > 1000 Then
wsTarget.Cells(i, 1).Value = wsSource.Cells(i, 1).Value
wsTarget.Cells(i, 2).Value = wsSource.Cells(i, "B").Value
End If
Next i
End Sub
```
- 说明:筛选出销售额大于1000的记录,并复制到目标表。
三、注意事项
数据规范: 公式法需数据格式统一,建议提前清理数据(如去除空格、统一列宽); 效率提升