我有一个巨大的(~950变量)调查回复电子表格,比需要大2-4倍,因为每个项目的个别响应选项都在不同的列中报告。例如,如果问题2在单元格A1中并且具有3个响应选项,则这些选项列在单元格A2-C2,A3-C3等中的问题下方。注意:只有A2-C2等中的一个填充w / data每次观察。
很明显,我可以手动浏览电子表格并使用与此类似的代码连接A2-C2:
=CONCATENATE(IF(ISBLANK(A4),"",A4),IF(ISBLANK(B4),"",B4),IF(ISBLANK(C4),"",C4))
但是,上述方法需要手动更改代码(问题有2-6个响应选项),并通过所有960个变量的观察值分别复制/粘贴它。因为我想在晚年去世之前完成这项工作,我希望能有一些自动化上述过程的方法。
在每个变量的最后一个响应选项之后,很容易通过并插入一个标识符列(没有数据但是有一些明显的第一行名称),因此代码知道从哪里开始回顾要连接的数据。代码必须知道在它遇到先前连接的结果时停止,并开始当前连接w /后续列。一旦它遇到某一行(比如60?我只有~55个观察点),它就可以查找下一个标识符列并重复该过程。
任何想法都会非常赞赏。
我需要检查空白,以便在数据中没有多余的空格(以便将来分析)。
希望下面将进一步澄清情况。你早先的评论是正确的;每个问题后面跟着55行观察。例如:
| | Q1 | | || Q2 | ||
|-|--------|---------|--------||---------|--------||
|1| 1 | | || | 2 ||
|2| | 2 | || | 2 ||
|3| | | 3 || | 2 ||
|4| | 2 | || 1 | ||
|5| | | 3 || | ||
|6| 1 | | || | 2 ||
|7| 1 | | || 1 | ||
|8| | | 3 || 1 | ||
|9| | 2 | || | 2 ||
在每个问题的最后一个响应选项之后,当前没有空白列,但是(如初始帖子中所述)我可以轻松地将其中一个输入。
答案 0 :(得分:1)
我不是100%确定我理解你的布局,但你可以通过使用& amp;来大大简化连接。如下:
=A4&B4&C4
这将与您的代码具有相同的效果,并且不需要检查空白单元格。
随着信息的出现,我将解决剩下的问题。
编辑:这是我的解决方案。我假设问题在第1行,第一组观察在第2行,所以最后一组观察结果在第56行。
以下是它如何寻找三个问题:
| A | B | C | D | E | F | G |
|----|------------------------------------------
| 1 | Qn1 Qn2 Qn3
| 2 | 1 2 1
| 3 | 2 2 2
| .. |
| 58 | 1 1 1 2 2 3 3
| 59 | 1 4 6
| 60 | 3 5 8
| 61 | Qn1 Qn2 Qn3
| 62 | 1 2 1
| 63 | 2 2 2
答案 1 :(得分:0)
@EJames:感谢您的建议&指针以图形方式布置示例。我需要检查空白,以便在数据中没有多余的空格(以便将来分析)。
希望下面将进一步澄清情况。你早先的评论是正确的;每个问题后面跟着55行观察。例如:
| | Q1 | | || Q2 | ||
|-|--------|---------|--------||---------|--------||
|1| 1 | | || | 2 ||
|2| | 2 | || | 2 ||
|3| | | 3 || | 2 ||
|4| | 2 | || 1 | ||
|5| | | 3 || | ||
|6| 1 | | || | 2 ||
|7| 1 | | || 1 | ||
|8| | | 3 || 1 | ||
|9| | 2 | || | 2 ||
在每个问题的最后一个响应选项之后,当前没有空白列,但是(如初始帖子中所述)我可以轻松地将其中一个输入。
很有责任。
答案 2 :(得分:0)
最快的方式:
如果您愿意,可以创建一个自动执行此操作的宏。
这是宏。这绝不是我最好的编码。你会在15分钟内得到什么。它完成了这项工作,虽然它在完成时崩溃了。 ; o)
由于您处于Stack Overflow中,我假设您可以调整宏以进一步调整您的需求。
Sub Main()
Dim ColumnsCount As Integer
ColumnsCount = Range("A1").CurrentRegion.Columns.Count
For i = 2 To 20000
Dim CurrentCell As Range
Set CurrentCell = Range("A1").Offset(0, i - 1)
If CurrentCell.Value <> "" Then
CurrentCell.Select
Selection.End(xlToRight).Select
Dim AnswersCount As Integer
AnswersCount = Selection.Column - CurrentCell.Column
CurrentCell.Offset(0, AnswersCount).Select
Selection.EntireColumn.Insert
Selection.Value = CurrentCell.Value
i = i + AnswersCount
Selection.Offset(1, 0).Select
Selection.FormulaR1C1 = "=SUM(RC[" + CStr(AnswersCount * -1) + "]:RC[-1])"
Selection.Copy
Range(Selection, Selection.Offset(100, 0)).Select
ActiveSheet.Paste
Selection.EntireColumn.Select
Application.CutCopyMode = False
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
End If
Next i
End Sub
答案 3 :(得分:0)
感谢您提供的信息。除了你的方式,你也可以使用&amp;连接的字符,所以代替:= concatenate(B1,“”,C1,“”,D1)你可以使用:= B1&amp; “”&amp; C1&amp; “”&amp; D1
答案 4 :(得分:0)
旧帖但我使这个函数连接单元格。与SUMIF类似。
Function CONCIF(rng As Range, criteria As Range, sums As Range)
'Function to concatenate a range of cells if the chosen adjacent cells matches
'the criteria.
'To use:
' Copy and Paste this into a module in VB Editor
' In a cell type =CONCIF(rng, criteria, sums) where:
' rng is the range of cells to match the criteria
' criteria is the value you would to match
' sums is the range of cells to concatenate if criteria matches
' To change what is put between the concatenations, edit the " / " below and put
' whatever you would like in between the quotes.
' Enjoy! -RP
Dim rCell As Range
Dim concat As String
Dim dist As Integer
dist = sums.Column - rng.Column
concat = ""
For Each rCell In rng
If rCell = criteria Then
If concat = "" Then
concat = rCell.Offset(0, dist).Value
Else
concat = concat & " / " & rCell.Offset(0, dist).Value
End If
End If
Next rCell
CONCIF = concat
End Function
答案 5 :(得分:0)
或者,如果您只想要一种简单的方法来选择水平范围并使其连接非空白单元格:
Function CONCIF(rng As Range)
Dim rCell As Range
Dim concat As String
Dim dist As Integer
dist = 0
concat = ""
For Each rCell In rng
If rCell.Value <> "" Then
If concat = "" Then
concat = rCell.Value
Else
concat = concat & ", " & rCell.Value
End If
End If
Next rCell
CONCIF = concat
End Function