在Excel VBA中合并并将值从单元格传递到另一个单元格

在Excel VBA中合并并将值从单元格传递到另一个单元格,vba,excel,Vba,Excel,基本上,我希望合并两个单元格中的值,然后在单击按钮后将其显示在另一个新单元格中。棘手的是每次我输入一个新值时,它都会显示在下一行。例如,我将组合A1和B1中的值,并将其传递给C1。下次我重新输入A1和B1时,新值应传递给C2。 以下是我编写的代码: Private Sub CommandButton2_Click() Dim count As Integer Dim rowNo As String Dim val As String Dim val2 As String Dim sum As

基本上,我希望合并两个单元格中的值,然后在单击按钮后将其显示在另一个新单元格中。棘手的是每次我输入一个新值时,它都会显示在下一行。例如,我将组合A1和B1中的值,并将其传递给C1。下次我重新输入A1和B1时,新值应传递给C2。 以下是我编写的代码:

Private Sub CommandButton2_Click()

Dim count As Integer
Dim rowNo As String
Dim val As String
Dim val2 As String
Dim sum As String    

count = 1
rowNo = "C" + CStr(count)   

If (Range("A1") <> "" And Range("B1") <> "") Then    
val = Range("A1")
val2 = Range("B1")    
sum = val + "/" + val2    
Worksheets("Sheet1").Range(rowNo).Value = sum
count = count + 1
End If

End Sub 
Private子命令按钮2\u单击()
将计数设置为整数
暗罗诺为弦
作为字符串的Dim val
Dim val2作为字符串
点心串
计数=1
rowNo=“C”+CStr(计数)
如果(范围(“A1”)和范围(“B1”)),则
val=范围(“A1”)
val2=范围(“B1”)
总和=val+“/”+val2
工作表(“表1”)。范围(行号)。值=总和
计数=计数+1
如果结束
端接头
我是excel VBA新手,上面的代码只在A1中写入值,当我重新输入值时,它没有转到下一行,有人能帮我解决这个问题吗?

试试看

Worksheets("Sheet1").Range(rowNo).Value = sum

除了回答您的具体问题外,我还将对您的代码添加一些(希望有用)注释

  • 可以方便地完全限定范围,例如使用
    工作表(“表1”)。范围
    而不是
    范围
    ,请参阅

  • 要选择一个
    范围
    ,您可以使用直接寻址(如chris nielsen的评论)或其他选项,如
    偏移量
    ,此处可能比较方便

  • 由于
    count
    被重置为1,因此您的代码似乎总是会转到同一目标单元格
    rowNo
    C1。您必须让您的
    Sub
    知道将结果放置在何处,这是关键。我想最安全的选择是将工作表中的一个单元格设置为包含该信息,然后让您的
    Sub
    读取该信息。如果您知道C列只包含您想要的结果,并且数据在那里是连续的,那么您可以使用下面的代码,它说明了这里的所有项目

  • 定义用作参考的变量通常很方便,例如,
    Dim rng as Range
    Set rng=工作表(“Sheet1”)。Range…

  • 下面的代码应该可以工作

    Private Sub CommandButton2_Click()
        Dim val As String
        Dim val2 As String
        Dim sum As String
        Dim rng As Range
        Dim ws As Worksheet
        Set ws = Worksheets("Sheet1")
        With Worksheets("Sheet2")
          If (IsEmpty(.Range("C1"))) Then
            Set rng = .Range("C1")
          Else
            ' There are other options to find the last cell
            Set rng = .Cells(.Rows.count, "C").End(xlUp).Offset(1, 0)
          End If
          If (ws.Range("A1") <> "" And ws.Range("B1") <> "") Then
            val = ws.Range("A1")
            val2 = ws.Range("B1")
            ' Added ' to prevent sum being converted into a date
            'sum = "'" + val + "/" + val2
            sum = "'" & val & "/" & val2
            rng.Value = sum
          End If
        End With
    End Sub
    
    Private子命令按钮2\u单击()
    作为字符串的Dim val
    Dim val2作为字符串
    点心串
    变暗rng As范围
    将ws设置为工作表
    设置ws=工作表(“表1”)
    带工作表(“表2”)
    如果(IsEmpty(.Range(“C1”)),则
    设置rng=.Range(“C1”)
    其他的
    '还有其他选项可用于查找最后一个单元格
    设置rng=.Cells(.Rows.count,“C”).End(xlUp).Offset(1,0)
    如果结束
    如果(ws.Range(“A1”)和ws.Range(“B1”)),则
    val=ws.范围(“A1”)
    val2=ws.范围(“B1”)
    “已添加”以防止总和转换为日期
    'sum=“”+val+“/”+val2
    sum=“”&val&“/”&val2
    rng.值=总和
    如果结束
    以
    端接头
    

    PS:根据工作表的内容,选择目标范围的方式有一些变化。

    Thx,现在可以工作了~但是,当我在单元格中重新输入值时,它不会转到下一行。你知道为什么吗?我只是意识到,每次单击按钮时,它都会通过“计数=1”。有没有其他方法可以避免这种情况?当我在单元格中重新输入值时,它不会转到下一行。它向单元格写入一个值,即故事结束。如果要更改活动选择,请编写更多代码。提示:
    Range(“您的范围”)。选择
    将值与
    sum=val+“/”+val2
    组合时,结果可能会自动视为日期,并相应地格式化目标单元格。您可能需要明确地采取行动来防止/恢复这种情况。这太棒了!我学到了一些新东西,非常感谢!顺便说一句,如果我想检索表1中的A1和B1并在表2中的C1中显示它,我应该怎么做?我想我需要把每一张纸都标出来,而不是用语句来定义它?嗯,我想我明白了!谢谢你,祝你今天愉快@user1805430-请检查更新的代码。您可以在Sheet1上使用…
    为基础,并明确指定Sheet2(例如,使用
    ws
    )。@user1805430-尤其是因为您将使用不同的工作表,请不要忘记。