2017-06-09 46 views
1

任务:我想复制几个单元格在一行(13时刻),可能包含一些空白。我想将这些值粘贴到列中的13行中。嵌套的循环不能按预期工作

尝试次数:我还没有碰到.Pastespecial , Paste:=xlPasteValues, SkipBlanks:=True, Transpose:= True

当前方法:我想使用FOR循环来验证和传输。

Dim j As Long, I As Long 
For j = 3 To 16 
If Not IsEmpty(Cells(aCell.Row, j)) Then 
    For i = 16 To 33 
     oSht.Cells(i, 4).Value = Cells(aCell.Row, j).Value 
    Next i 
End If 
Next j 

问题:但是这个代码是从Cells(aCell.Row, j).采取最后一个非空单元格和oSht.Cells(i, 4)显示它的i所有值。

请求:我想确定什么是我的FOR循环错误或者是否有更简单的方法来复制几个单元格并粘贴所有非空单元格。

+0

你可以尝试做'oSht.Range(oSht.Cells(16,4),oSht.Cells(33,4))值=细胞(。 aCell.Row,J).Value'? (另外,我强烈建议在'Cells(aCell.Row,...)之前放置另一个表名,以便明确表示该值为何。 – BruceWayne

+0

谢谢@BruceWayne,该建议没有产生任何错误,但它没有在上一篇文章中,我发现用“aCell”定义WB和WS会导致编译器错误。如果我错了,请纠正错误,但由于aCell是一个已定义的单元格,所以对工作簿和工作表的引用是已经存在 –

+0

是的,但是'Cells(aCell.Row,j)'不是完全作用域的,VBA会将它读作'Cells(#,j)',它已经定义了aCell的行但是不级联所以它寻找一个单元格,但是你还没有定义什么范围的单元格,所以它会假定当前具有焦点的单元格。如果你不是在表单之间切换,但是没有像你那样严格 – nbayly

回答

0

不知道的情况下是有点难以提供合适的答案,但我认为这个问题是内循环,这应该只是一个计数器,就像这样:

Dim j As Long, I As Long 
For j = 3 To 16 
If Not IsEmpty(Cells(aCell.Row, j)) Then 
    i=i+1 
    oSht.Cells(i, 4).Value = Cells(aCell.Row, j).Value 
End If 
Next j 
+0

谢谢,我已经考虑过这个选项。我似乎无法让代码跑过第一个循环。这16条线路中只有第一条线路可以传输。 –

+0

'i = oSht.Range(“D”&Rows.Count).End(xlDown).Row'不工作吗?我不确定代码是否存在错误,但理论上把这个放在有计数器的地方应该让程序检查'for'语句每次迭代的最后一行。 –

+0

是的,如果我理解正确,你需要将非空的单元格从一行移动到列中,所以对于每个新的j(源行中的列),如果它不是空的,我(在命令列中行)将移动一个。对不起,如果我误解了。 – Jayvee

0

对我调换工作,但我只选择细胞值:

Option Explicit 

Public Sub transposeContig() 

    Sheets(1).UsedRange.Rows(1).SpecialCells(xlCellTypeConstants, 23).Copy 

    Sheets(2).Cells(1, 1).PasteSpecial Transpose:=True 

End Sub 

enter image description here