VBA如果Sheet1中的特定单元格包含数据> 0,请在Sheet2上放置一个特定的代码

我给SHEET1上的一组数据可能看起来像这样:

BCDEFGH (Codes) 31 21957 0 3707 0 1996 356 3422 32 13 0 13 0 13 10 3455 33 4543 0 767 0 413 423 3446 34 6119 0 1033 0 556 1549 3603 35 12238 0 2066 0 1113 56 3703 

每行数据对应一个特定的代码(见上面的代码列)。 例如,行31中任何大于0的数据都有代码34-22。 行32是34-55,行33是34-46,行34是36-03,行35是37-03。

我如何根据上面的数据编写一个可以在SHEET2上得到这个结果的macros:

  AG AH AI AJ 57 3 4 2 2 (based on data in cell B31 of Sheet1) 58 3 4 5 5 (based on data in cell B32 of Sheet1) 59 3 4 4 6 (based on data in cell B33 of Sheet1) 60 3 6 0 3 (based on data in cell B34 of Sheet1) 61 3 7 0 3 (based on data in cell B35 of Sheet1) 62 3 4 2 2 (based on data in cell D31 of Sheet1) 63 3 4 5 5 (based on data in cell D32 of Sheet1) 

等等等等…

到目前为止,我有这样的:

 Dim x As Integer, DestLast As Long, HoldVal As String If Sheets("Sheet1").Range("B31").Value > 0 Then DestLast = Sheets("Sheet2").Range("AG" & Rows.Count).End(xlUp).Row + 1 If DestLast < 57 Then DestLast = 57 HoldVal = Sheets("Sheet1").Range("H31").Value For x = 1 To 4 Dim columnNumber2 As Integer columnNumber2 = 32 + x Sheets("Sheet2").Cells(DestLast, columnNumber2).Value = Mid(HoldVal, x, 1) Next x End If 

这个问题是,我将不得不为每个单元格(B31:G35)写这个macros。 有没有更简单的方法来做到这一点?

请让我知道,如果我错过任何信息,或者如果你有什么我问的问题!

像这样的东西(未经testing – 我认为理所当然地写出的循环体是按照你希望它为单元格B31做的,并且说明如何修改它以适用于整个范围的细胞,按照列似乎你想要的方式)

 Dim i As Long, j As Long For j = 2 To 7 'Columns B to G For i = 31 To 35 If Sheets("Sheet1").Cells(i,j).Value > 0 Then DestLast = Sheets("Sheet2").Range("AG" & Rows.Count).End(xlUp).Row + 1 If DestLast < 57 Then DestLast = 57 HoldVal = Trim(Str(Sheets("Sheet1").Cells(i,8).Value)) For x = 1 To 4 Dim columnNumber2 As Integer columnNumber2 = 32 + x Sheets("Sheet2").Cells(DestLast, columnNumber2).Value = Mid(HoldVal, x, 1) Next x End If Next i Next j