Sql server 如何使用VBA将多个列值范围与行匹配,并在另一个位置记录?
我在一家非政府组织做志愿者,帮助为他们每周的客户出勤数据创建一个SQL数据库。数据当前位于Excel电子表格中 我想操纵所说的电子表格,以避免让他们改变他们的流程 关于此电子表格: 每一行代表一个不同的客户机,而一周中有5天的3列包含以下信息(输入时间、输出时间和单位)。在时间单位块的正上方,是一组信息所属的服务日期(日期通常在该范围内合并,但我必须取消合并)。下面是一个截图供参考 我需要做什么: 我需要在单独的一行记录每个客户的出席情况(在不同的位置-可以在同一张表上),将相应的服务日期、进入时间、退出时间和单位与姓名匹配 我尝试过的: 我试着为。。。接下来使用3个计数器循环我需要查找的3个不同范围的信息,并将计数器声明为范围。我不确定当。。。Wend在这里更合适 我也尝试过采用数组方式,但在我的VBA中,这种方式无法实现 我还想知道是否有一个datetime数据类型可以应用于Excel,以消除将附加值范围与其余值匹配的情况Sql server 如何使用VBA将多个列值范围与行匹配,并在另一个位置记录?,sql-server,vba,excel,Sql Server,Vba,Excel,我在一家非政府组织做志愿者,帮助为他们每周的客户出勤数据创建一个SQL数据库。数据当前位于Excel电子表格中 我想操纵所说的电子表格,以避免让他们改变他们的流程 关于此电子表格: 每一行代表一个不同的客户机,而一周中有5天的3列包含以下信息(输入时间、输出时间和单位)。在时间单位块的正上方,是一组信息所属的服务日期(日期通常在该范围内合并,但我必须取消合并)。下面是一个截图供参考 我需要做什么: 我需要在单独的一行记录每个客户的出席情况(在不同的位置-可以在同一张表上),将相应的服务日期、进
旁注:表格上的灰色单元格表示客户当天不参加会议。因此,我需要包含一个If语句来跳过空白单元格。以下代码将满足您的要求,我希望足够让您开始使用-请注意,我有两个工作表,Sheet1(存储数据的位置)和Sheet2(移动数据的位置) 我已经把循环放在其中,r=sheet1上的当前行,c=当前列,然后x是sheet2的计数器 例如,r循环从第3行开始,只转到第5行,但您可以找到最后一行并更改第5行,或者使用lastRow变量,例如
lastRow=.cells(.rows.count,1).end(xlup).row
这一切都假设数据总是以屏幕截图中显示的格式显示。在最里面的IF和END IF块中,可以很容易地重新排列输出
Sub shift_me()
Dim r As Long
Dim c As Long
Dim x As Long
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Sheet2")
x = 1
With ThisWorkbook.Worksheets("Sheet1")
For r = 3 To 5
For c = 3 To 15 Step 3
If Not .Cells(r, c).Value2 = "" And Not .Cells(r, c).Value2 = 0 Then
ws.Cells(x, 1).Value2 = .Cells(r, 1).Value2
ws.Cells(x, 2).Value2 = .Cells(r, 2).Value2
ws.Cells(x, 3).Value2 = .Cells(r, c).Value2
ws.Cells(x, 4).Value2 = .Cells(r, c + 1).Value2
ws.Cells(x, 5).Value2 = .Cells(r, c + 2).Value2
ws.Cells(x, 6).Value2 = .Cells(1, c).Value2
x = x + 1
End If
Next c
Next r
End With
End Sub
这是非常有用的!我想继续将随后几周的值存储在“Sheet2”中。你能告诉我在哪里我可以指示代码开始存储下一个空行上的值吗?所以想象一下“Sheet2”已经被占用了,比如说,第40行。。。然后,您可以使用与我上面提到的类似的方法,将
x=1
替换为:x=ws.cells(ws.rows.count,1).end(xlup).row+1
-这将为您提供x=41。现在,当您运行宏x时,它是Sheet2中的下一个空行,它将再次开始循环并从“Sheet1”中提取(或者您告诉它的任何一张纸!)