我正在为Excel工作表上的命令按钮编写代码,该代码将从输入表中获取数据并将其传输到不同的工作簿模板。
我有6个可能的输入部分(在一个部分中)x1-x6,用户可以放入数据。当我按下命令按钮时,我希望将其复制然后粘贴到另一个工作表上的指定单元格中,来自这6个输入的数据(如果有的话)。
这是我的问题所在:我有副本&找出粘贴的东西和连接部分,但我无法弄清楚如果用户只放入x1和x2并将其余部分留空则如何删除额外的逗号。
基本上我正在尝试从行尾修剪逗号并停在第一个非逗号字符,这有意义吗?我将把代码和示例输出放入帮助
Private Sub CommandButton1_Click()
Dim x1, x2, x3, x4, x5, x6, X As String
Dim HData As Worksheet
Dim Sdata as Workbook
Worksheets("Information").select
x1 = Range("B1").Value
x2 = Range("B2").Value
x3 = Range("B3").Value
x4 = Range("B4").Value
x5 = Range("B5").Value
x6 = Range("B6").Value
X = x1 + ", " & x2 + ", " & x3 + ", " & x4 + ", " & x5 + ", " & x6
'lots of code between here and the next part'
.Offset(1,1) = X
OUTPUT sample1, sample2, , , ,
< - 如果在这些单元格的输入部分中没有输入数据(或者如果没有输入任何内容则根本没有逗号),我不希望这些逗号显示...
答案 0 :(得分:2)
抱歉,我目前所使用的机器上没有安装Excel,因此我的语法可能需要稍微调整一下,因为我无法测试它。你基本上有两个选择。
首先是一些混乱的算法工作。
'Strip leading commas
Do While InStr(X,", ") == 1
X = RIGHT(X,LEN(X)-2) ' remove the first two characters
Loop
'Remove trailing commas
Do While InStrRev(X,", ") == LEN(X) - 1 ' check the math on this one
X = LEFT(X,LEN(X)-2)
Loop
'Remove internal extra commas
Do While InStr(X,", , ") > 0
X = REPLACE(X, ", , ", ", ")
Loop
EDITED:REPLACE函数应该在循环中,因为REPLACE不会在代码上递归运行。之前,“X ,,,, X”只会减少到“X,,X”
更好的解决方案是在没有额外逗号的情况下生成X.
X = ""
For row = 1 to 6
x = Range("B" & i).Value
If LEN(X) > 0 Then
If LEN(X) == 0 Then
X = x ' fencepost solution
Else
X = X & ", " & x
End If
End If
Next i
答案 1 :(得分:2)
试试这个(更新范围内缺少的单元格):
Private Sub CommandButton1_Click()
Dim X As String, HData As Worksheet, Sdata As Workbook
Worksheets("Information").Select
X = Join(Application.Transpose(Range("B1:B6")), " ")
X = Replace(Trim(X), " ", ",")
Do Until InStr(1, X, ",,") = 0
X = Replace(X, ",,", ",")
Loop
'lots of code between here and the next part'
.Offset(1, 1) = X
假设您在该范围内没有空格如果有回复,我们可以解决它。
工作原理: 取范围(数组/值组)并将其直接填充到字符串中,用空格连接每个元素
修剪字符串,即删除前后空格
用逗号替换所有剩余空格
这就是为什么如果您的数据已经有空格,我们将不得不再添加几行,这很简单。
我赞成这种方法,因为不涉及循环。
答案 2 :(得分:1)
循环,如果不为空则添加到字符串并为后续预挂起分配分隔符:
Dim X As String, delimiter As String, cell As Range
For Each cell In Range("B1:B6")
If (Len(cell.Value) > 0) Then
X = X & delimiter & cell.Value
delimiter = ", "
End If
Next
Debug.Print X