Vba 我可以将数据从一个工作簿复制到另一个工作簿,但我需要它更智能并替换现有数据

Vba 我可以将数据从一个工作簿复制到另一个工作簿,但我需要它更智能并替换现有数据,vba,excel,Vba,Excel,请允许我解释一下我目前拥有的以及它的用途 我有一个大型excel表格,其中包含Facebook导出的数千行数据。基本上,每周我们都会收到大约30张不同的表格,其中包含来自Facebook页面的数据(发布的内容、喜欢的程度等)。这一切都需要进入一个庞大的数据数据库。因此,我使用VBA代码自动复制所需的数据并将其粘贴到正确的位置 如果我是诚实的,它是从我发现的其他各种密码中被弗兰肯斯坦发现的。但它是有效的 Sub CopyFacebook_v2() Dim shtOrigin As Workshee

请允许我解释一下我目前拥有的以及它的用途

我有一个大型excel表格,其中包含Facebook导出的数千行数据。基本上,每周我们都会收到大约30张不同的表格,其中包含来自Facebook页面的数据(发布的内容、喜欢的程度等)。这一切都需要进入一个庞大的数据数据库。因此,我使用VBA代码自动复制所需的数据并将其粘贴到正确的位置

如果我是诚实的,它是从我发现的其他各种密码中被弗兰肯斯坦发现的。但它是有效的

Sub CopyFacebook_v2()
Dim shtOrigin As Worksheet
Dim strFile As String

Application.ScreenUpdating = False

Set shtReach = ActiveWorkbook.Sheets("DATA")

strFile = Application.GetOpenFilename

If CStr(strFile) <> "False" Then

Country = InputBox("What MARKET is this data from?")
Page = InputBox("What is the name of the PAGE?")

shtReach.Range("M" & Rows.Count).End(xlUp).Offset(1).Value = Country
shtReach.Range("N" & Rows.Count).End(xlUp).Offset(1).Value = "Facebook"
shtReach.Range("E" & Rows.Count).End(xlUp).Offset(1).Value = Page

Set shtOrigin = Workbooks.Open(strFile).Sheets(2)
Set shtL = shtOrigin.Range("L1")
Set shtK = shtOrigin.Range("K1")
Set shtJ = shtOrigin.Range("J1")

'**Version 3

    'ID
    shtOrigin.Range("B2:B5000").Copy Destination:=shtReach.Range("N" & Rows.Count).End(xlUp).Offset(0, -13)
    'URL
    shtOrigin.Range("C2:C5000").Copy Destination:=shtReach.Range("N" & Rows.Count).End(xlUp).Offset(0, 41)
    'Message
    shtOrigin.Range("D2:D5000").Copy Destination:=shtReach.Range("N" & Rows.Count).End(xlUp).Offset(0, -11)
    'Type
    shtOrigin.Range("E2:E5000").Copy Destination:=shtReach.Range("N" & Rows.Count).End(xlUp).Offset(0, -7)
    'Date
    shtOrigin.Range("H2:H5000").Copy Destination:=shtReach.Range("N" & Rows.Count).End(xlUp).Offset(0, 1)
    'Comment
        If shtL = "comment" Then
            shtOrigin.Range("L2:L5000").Copy Destination:=shtReach.Range("N" & Rows.Count).End(xlUp).Offset(0, 8)
        End If
        If shtK = "comment" Then
            shtOrigin.Range("K2:K5000").Copy Destination:=shtReach.Range("N" & Rows.Count).End(xlUp).Offset(0, 8)
        End If
        If shtJ = "comment" Then
            shtOrigin.Range("J2:J5000").Copy Destination:=shtReach.Range("N" & Rows.Count).End(xlUp).Offset(0, 8)
        End If
    'Like
    If shtL = "like" Then
            shtOrigin.Range("L2:L5000").Copy Destination:=shtReach.Range("N" & Rows.Count).End(xlUp).Offset(0, 9)
        End If
        If shtK = "like" Then
            shtOrigin.Range("K2:K5000").Copy Destination:=shtReach.Range("N" & Rows.Count).End(xlUp).Offset(0, 9)
        End If
        If shtJ = "like" Then
            shtOrigin.Range("J2:J5000").Copy Destination:=shtReach.Range("N" & Rows.Count).End(xlUp).Offset(0, 9)
        End If
    'Share
    If shtL = "share" Then
            shtOrigin.Range("L2:L5000").Copy Destination:=shtReach.Range("N" & Rows.Count).End(xlUp).Offset(0, 11)
        End If
        If shtK = "share" Then
            shtOrigin.Range("K2:K5000").Copy Destination:=shtReach.Range("N" & Rows.Count).End(xlUp).Offset(0, 11)
        End If
        If shtJ = "share" Then
            shtOrigin.Range("J2:J5000").Copy Destination:=shtReach.Range("N" & Rows.Count).End(xlUp).Offset(0, 11)
        End If


Set shtOrigin = Workbooks.Open(strFile).Sheets(1)

    'Organic Reach
    shtOrigin.Range("J3:J5000").Copy Destination:=shtReach.Range("N" & Rows.Count).End(xlUp).Offset(0, 4)
    'Paid Reach
    shtOrigin.Range("K3:K5000").Copy Destination:=shtReach.Range("N" & Rows.Count).End(xlUp).Offset(0, 7)
    'Total Organic Views
    shtOrigin.Range("Y3:Y5000").Copy Destination:=shtReach.Range("N" & Rows.Count).End(xlUp).Offset(0, 15)
    'Total Paid Views
    shtOrigin.Range("AA3:AA5000").Copy Destination:=shtReach.Range("N" & Rows.Count).End(xlUp).Offset(0, 16)
    '3% Organic Views
    shtOrigin.Range("AC3:AC5000").Copy Destination:=shtReach.Range("N" & Rows.Count).End(xlUp).Offset(0, 17)
    '3% Paid Views
    shtOrigin.Range("AE3:AE5000").Copy Destination:=shtReach.Range("N" & Rows.Count).End(xlUp).Offset(0, 18)


   Application.CutCopyMode = False

   ActiveWorkbook.Close False

    Set shtOrigin = Nothing
    Set shtL = Nothing
    Set shtK = Nothing
    Set shtJ = Nothing

Set shtDestin = Nothing

Columns("G").Replace What:="SharedVideo", _
                        Replacement:="Video", _
                        LookAt:=xlPart, _
                        SearchOrder:=xlByRows, _
                        MatchCase:=False, _
                        SearchFormat:=False, _
                        ReplaceFormat:=False

Run "FillColBlanks_Offset"

Else

    Application.ScreenUpdating = True

    MsgBox "No valid file selected", vbOKOnly + vbInformation, "Copy Error"

Set shtDestin = Nothing

End If

End Sub
Sub-CopyFacebook_v2()
Dim shtOrigin As工作表
作为字符串的Dim strFile
Application.ScreenUpdating=False
Set shtReach=ActiveWorkbook.Sheets(“数据”)
strFile=Application.GetOpenFilename
如果CStr(标准文件)“错误”,则
国家=输入框(“此数据来自哪个市场?”)
Page=InputBox(“页面的名称是什么?”)
shtReach.Range(“M”和Rows.Count).End(xlUp).Offset(1).Value=Country
shtReach.Range(“N”和Rows.Count).End(xlUp).Offset(1).Value=“Facebook”
shtReach.Range(“E”和Rows.Count).End(xlUp).Offset(1).Value=Page
Set shtOrigin=工作簿。打开(strFile)。工作表(2)
设置shtL=shtOrigin.Range(“L1”)
设置shtK=shtOrigin.Range(“K1”)
设置shtJ=shtOrigin.范围(“J1”)
“**第3版
”“是的
shtOrigin.Range(“B2:B5000”)。复制目标:=shtReach.Range(“N”和Rows.Count)。结束(xlUp)。偏移量(0,-13)
'网址
shtOrigin.Range(“C2:C5000”)。复制目标:=shtReach.Range(“N”和Rows.Count)。结束(xlUp)。偏移量(0,41)
“消息
shtOrigin.Range(“D2:D5000”)。复制目标:=shtReach.Range(“N”和Rows.Count)。结束(xlUp)。偏移量(0,-11)
'类型
shtOrigin.Range(“E2:E5000”)。复制目标:=shtReach.Range(“N”和Rows.Count)。结束(xlUp)。偏移量(0,-7)
“日期
shtOrigin.Range(“H2:H5000”)。复制目标:=shtReach.Range(“N”和Rows.Count)。结束(xlUp)。偏移量(0,1)
评论
如果shtL=“comment”,则
shtOrigin.Range(“L2:L5000”)。复制目标:=shtReach.Range(“N”和Rows.Count)。结束(xlUp)。偏移量(0,8)
如果结束
如果shtK=“comment”,则
shtOrigin.Range(“K2:K5000”)。复制目标:=shtReach.Range(“N”和Rows.Count)。结束(xlUp)。偏移量(0,8)
如果结束
如果shtJ=“comment”,则
shtOrigin.Range(“J2:J5000”)。复制目标:=shtReach.Range(“N”和Rows.Count)。结束(xlUp)。偏移量(0,8)
如果结束
“就像
如果shtL=“like”,则
shtOrigin.Range(“L2:L5000”)。复制目标:=shtReach.Range(“N”和Rows.Count)。结束(xlUp)。偏移量(0,9)
如果结束
如果shtK=“like”,则
shtOrigin.Range(“K2:K5000”)。复制目标:=shtReach.Range(“N”和Rows.Count)。结束(xlUp)。偏移量(0,9)
如果结束
如果shtJ=“like”,则
shtOrigin.Range(“J2:J5000”)。复制目标:=shtReach.Range(“N”和Rows.Count)。End(xlUp)。Offset(0,9)
如果结束
“分享
如果shtL=“共享”,则
shtOrigin.Range(“L2:L5000”)。复制目标:=shtReach.Range(“N”和Rows.Count)。结束(xlUp)。偏移量(0,11)
如果结束
如果shtK=“共享”,则
shtOrigin.Range(“K2:K5000”)。复制目标:=shtReach.Range(“N”和Rows.Count)。结束(xlUp)。偏移量(0,11)
如果结束
如果shtJ=“共享”,则
shtOrigin.Range(“J2:J5000”)。复制目标:=shtReach.Range(“N”和Rows.Count)。结束(xlUp)。偏移量(0,11)
如果结束
Set shtOrigin=工作簿。打开(strFile)。工作表(1)
“有机延伸
shtOrigin.Range(“J3:J5000”)。复制目标:=shtReach.Range(“N”和Rows.Count)。End(xlUp)。Offset(0,4)
“付费到达
shtOrigin.Range(“K3:K5000”)。复制目标:=shtReach.Range(“N”和Rows.Count)。结束(xlUp)。偏移量(0,7)
"有机整体观",
shtOrigin.Range(“Y3:Y5000”)。复制目标:=shtReach.Range(“N”和Rows.Count)。结束(xlUp)。偏移量(0,15)
“付费总浏览量
shtOrigin.Range(“AA3:AA5000”)。复制目标:=shtReach.Range(“N”和Rows.Count)。结束(xlUp)。偏移量(0,16)
“3%的有机观点
shtOrigin.Range(“AC3:AC5000”)。复制目标:=shtReach.Range(“N”和Rows.Count)。End(xlUp)。Offset(0,17)
“3%的付费浏览量
shtOrigin.Range(“AE3:AE5000”)。复制目标:=shtReach.Range(“N”和Rows.Count)。结束(xlUp)。偏移量(0,18)
Application.CutCopyMode=False
ActiveWorkbook.Close为False
设置shtOrigin=Nothing
设置shtL=无
设置shtK=Nothing
设置shtJ=无
设置shtDestin=Nothing
列(“G”)。替换为:=“SharedVideo”_
替换:=“视频”_
看:=xlPart_
搜索顺序:=xlByRows_
MatchCase:=假_
SearchFormat:=False_
ReplaceFormat:=False
运行“FillColBlanks\u Offset”
其他的
Application.ScreenUpdating=True
MsgBox“未选择有效文件”,vbOKOnly+vbInformation,“复制错误”
设置shtDestin=Nothing
如果结束
端接头
所以,虽然这目前有效,但它也是一把相当钝的锤子。例如,由于数据经常与现有数据重叠,我们必须检查并删除任何重复的数据。它还复制大量文本,而不是一行一行地复制,这使得它很难做很多事情

我要寻找的是一种让代码再次检查URL(B列)是否已经存在的方法。如果有,我希望覆盖现有数据顶部的数字

如果URL不存在,我想为数据创建一个新行

我试着研究一个解决方案,但似乎没有什么适合这种情况。任何帮助都将不胜感激


谢谢,您可以在列中循环并使用find,如果它找到了值,它将使用找到的行作为目标行。循环可能需要一段时间。 如果找不到,它将找到最后一行并将该行用作目标行。 代码在表格(2)中的N列循环,并在B列表格中找到值(“数据”)

请注意,这个
Sub DiT()
    Dim LstRw As Long
    Dim Rng As Range
    Dim c As Range, FnD As Range
    Dim sh As Worksheet
    Dim ws As Worksheet, r As Long

    Set sh = Sheets("Data")
    Set ws = Sheets(2)
    Application.ScreenUpdating = False
    With sh
        LstRw = .Cells(.Rows.Count, "N").End(xlUp).Row
        Set Rng = .Range("N2:N" & LstRw)
        For Each c In Rng.Cells
            '--------------
            Set FnD = ws.Columns(2).Find(what:=c.Value, lookat:=xlWhole)

            If Not FnD Is Nothing Then
                r = FnD.Row
                With ws
                    .Cells(r, "A").Value = c.Offset(, -1).Value
                    .Cells(r, "B").Value = c.Value
                    .Cells(r, "C").Value = c.Offset(, -3).Value
                End With
            Else:
                With ws
                    r = ws.Cells(ws.Rows.Count, "B").End(xlUp).Row + 1

                    .Cells(r, "A").Value = c.Offset(, -1).Value
                    .Cells(r, "B").Value = c.Value
                    .Cells(r, "C").Value = c.Offset(, -3).Value

                End With
            End If
            '----------------------
        Next c

    End With

End Sub