Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何使用VBA将多个列值范围与行匹配,并在另一个位置记录?_Sql Server_Vba_Excel - Fatal编程技术网

Sql server 如何使用VBA将多个列值范围与行匹配,并在另一个位置记录?

Sql server 如何使用VBA将多个列值范围与行匹配,并在另一个位置记录?,sql-server,vba,excel,Sql Server,Vba,Excel,我在一家非政府组织做志愿者,帮助为他们每周的客户出勤数据创建一个SQL数据库。数据当前位于Excel电子表格中 我想操纵所说的电子表格,以避免让他们改变他们的流程 关于此电子表格: 每一行代表一个不同的客户机,而一周中有5天的3列包含以下信息(输入时间、输出时间和单位)。在时间单位块的正上方,是一组信息所属的服务日期(日期通常在该范围内合并,但我必须取消合并)。下面是一个截图供参考 我需要做什么: 我需要在单独的一行记录每个客户的出席情况(在不同的位置-可以在同一张表上),将相应的服务日期、进

我在一家非政府组织做志愿者,帮助为他们每周的客户出勤数据创建一个SQL数据库。数据当前位于Excel电子表格中

我想操纵所说的电子表格,以避免让他们改变他们的流程

关于此电子表格: 每一行代表一个不同的客户机,而一周中有5天的3列包含以下信息(输入时间、输出时间和单位)。在时间单位块的正上方,是一组信息所属的服务日期(日期通常在该范围内合并,但我必须取消合并)。下面是一个截图供参考

我需要做什么: 我需要在单独的一行记录每个客户的出席情况(在不同的位置-可以在同一张表上),将相应的服务日期、进入时间、退出时间和单位与姓名匹配

我尝试过的: 我试着为。。。接下来使用3个计数器循环我需要查找的3个不同范围的信息,并将计数器声明为范围。我不确定当。。。Wend在这里更合适

我也尝试过采用数组方式,但在我的VBA中,这种方式无法实现

我还想知道是否有一个datetime数据类型可以应用于Excel,以消除将附加值范围与其余值匹配的情况


旁注:表格上的灰色单元格表示客户当天不参加会议。因此,我需要包含一个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”中提取(或者您告诉它的任何一张纸!)