所以这个问题已经呈现给我,它正在成为我网站制作的一个巨大障碍。对于界面而言,我并不擅长excel,但是编写函数是我从未必须处理的事情。我有一个表格,其中的值由参考编号标记,基本上传递由某个提供商填写的表格。对字段具有所有不同答案的列(是的,它在一列中有不同的字段答案,叹息)需要分解,以便我可以用列标题标记它们,以便最终将它们导入SQL数据库。该来源目前以这种格式提供:
我需要做的是能够填写这些值的基于列的版本,如下所示:
创建列的标准基于A(ref#)BC和D中的值。我猜我需要创建某种条件语句来检查C和D是否等于某个值(C并且D指定E中的信息类型,因此它们几乎是我的关键元素/条件)然后将信息放在单元格E的正确列标题下面。我一直在研究诸如VLookup / Match / Index之类的函数,我无法理解如何应用它们,或者我是否可以使用更好的函数来完成我的任务。在这一点上,即使是对相关SO线程的引用也会很棒。我基本上只需要一些指导来了解这项工作需要做些什么。最重要的是,参考数字上升但没有任何特定的顺序,因此我想知道是否有可能向一个函数提供一个参考数字列表,以便在所有条件都已经完成特定参考编号的情况下递增。
编辑:好的,这是我的新问题 - >
您要求的图片 原始数据:http://imgur.com/htvzqNU 在VBA脚本之后:http://imgur.com/cDQQxE6
这是我们编辑的唯一代码:
vHDRs = Array(Array("Reference #", -1, -2), _
Array("Provider Name", 300, 100), _
Array("Provider Number", 300, 300), _
Array("County", 200, 400), _
Array("Address", 100, 100), _
Array("Zip", 200, 300))
如您所见,地址列未填充
答案 0 :(得分:0)
这是一个相当标准的VBA sub,具有足够的安全性,不应该破坏任何实质内容。
Sub My_Organize()
Dim rw As Long, v As Long, vHDRs As Variant
Dim i As Long, j As Long, iREFNO As Long, iREFROW As Long, iLR As Long
Dim ws As Worksheet, app As Application
Set app = Application
app.ScreenUpdating = False
app.EnableEvents = False
app.DisplayAlerts = False
app.Calculation = xlCalculationManual
On Error Resume Next
Worksheets("Organized").Delete
On Error GoTo Safe_Exit
Worksheets.Add(after:=Sheets(Sheets.Count)).Name = "Organized"
Set ws = Sheets(Sheets.Count)
vHDRs = Array(Array("Reference #", -1, -2), _
Array("Provider Name", 4200, 100), _
Array("Phone #", 4300, 100))
ws.Cells(1, 1).Resize(1, UBound(vHDRs) + 1) = app.Transpose(app.Index(vHDRs, , 1))
With Sheet1
iLR = .Cells(Rows.Count, 1).End(xlUp).Row
With .Cells(1, 1).CurrentRegion
.Cells.Sort Key1:=.Columns(1), Order1:=xlAscending, _
Key2:=.Columns(3), Order2:=xlAscending, _
Key3:=.Columns(4), Order3:=xlAscending, _
Orientation:=xlTopToBottom, Header:=xlYes
For rw = 2 To iLR
If iREFNO <> .Cells(rw, 1).Value2 Then
iREFNO = .Cells(rw, 1).Value2
iREFROW = ws.Cells(Rows.Count, 1).End(xlUp).Row + 1
ws.Cells(iREFROW, 1) = iREFNO
End If
For i = LBound(vHDRs, 1) To UBound(vHDRs, 1)
If .Cells(rw, 3).Value2 = vHDRs(i)(1) And _
.Cells(rw, 4).Value2 = vHDRs(i)(2) Then
ws.Cells(iREFROW, i + 1) = .Cells(rw, 5).Value2
Exit For
End If
Next i
Next rw
End With
End With
Safe_Exit:
Set ws = Nothing
app.Calculation = xlCalculationAutomatic
app.DisplayAlerts = True
app.EnableEvents = True
app.ScreenUpdating = True
Set app = Nothing
End Sub
编辑vHDRs
信息的嵌套数组,以匹配您要从源工作表收集和转置的内容。只需在其中添加一个新的嵌套数组,然后更改标签和数字以匹配列C&amp; D.它们不必在外部数组中有任何特殊顺序,但每个内部数组应该是标签,列C,列D 。
将数据粘贴到新工作簿的 Sheet1 中,针对它运行该例程。它将在队列末尾创建一个新工作表,并根据您在列标题标签数组中设置的参数转置数据,并根据源工作表上的列C和D匹配另外两个数字(即 Sheet 1中)。
如果你反复运行23M行(在多个工作表中),那么这些值可以批量输入数组,以便所有处理都在内存中完成。