0

アクションはすでにタイトルに含まれており、私は近づいていることを知っていますが、動けなくなりました:

Dim wsS As Worksheet, wsU As Worksheet
Set wsS = Sheets("sheet1")
Set wsU = Sheets("non_confid")
Dim col1 As String, col2 As String, i As Long, j As Long
Set wsS = ActiveWindow.ActiveSheet
col1 = "A"
Set wsU = ActiveWindow.ActiveSheet
col2 = "E"
For i = 505 To 700
For j = 2 To 197
    If Not IsEmpty(ActiveCell.Value) Then
       wsS.Range(col1 & i).Copy
       wsU.Range(col2 & j).PasteSpecial xlPasteValues
    End If
Next i

※リストはソート済みですので最初の空白セルで終わります よろしくお願いします!

4

2 に答える 2

0

あなたのコードにはかなりの数の異常があるようです。以下で少しリファクタリングします

Dim wsS As Worksheet
Dim wsU As Worksheet
Dim i As Integer

Set wsS = Sheets("sheet1") 'this has assigned the worksheet sheet1 to wsS
Set wsU = Sheets("non_confid") 'this has assigned the worksheet sheet1 to wsU

col1 = "A"
col2 = "E"

For i = 505 To 700
       If Not IsEmpty(wsS.Range(col1 & i).Value) Then
            wsU.Range(col2 & i - 503).Value = wsS.Range(col1 & i).Value
       End If

Next

これはコードと同様に動作しますが、正しくコピーする必要があります。あなたの質問から、単に空の値をスキップしたいのか、それとも実行を停止したいのかわかりません。範囲内の空の値をスキップするには、次のバージョンのコードが機能します。

Dim wsS As Worksheet
Dim wsU As Worksheet
Dim i As Integer
Dim j As Integer
Set wsS = Sheets("sheet1") 'this has assigned the worksheet sheet1 to wsS
Set wsU = Sheets("non_confid") 'this has assigned the worksheet sheet1 to wsU

col1 = "A"
col2 = "E"
j = 2

For i = 505 To 700
       If Not IsEmpty(wsS.Range(col1 & i).Value) Then
            wsU.Range(col2 & j).Value = wsS.Range(col1 & i).Value
            j = j + 1 'here is a new counter for the position on the second page.
       End If

Next

空のセルが見つかったときにループを停止する場合は、次のコードが機能するはずです。

Dim wsS As Worksheet
Dim wsU As Worksheet
Dim i As Integer
Dim j As Integer
Set wsS = Sheets("sheet1") 'this has assigned the worksheet sheet1 to wsS
Set wsU = Sheets("non_confid") 'this has assigned the worksheet sheet1 to wsU

col1 = "A"
col2 = "E"
j = 2

For i = 505 To 700
       If IsEmpty(wsS.Range(col1 & i).Value) Then
            Exit For 'this jumps out of the loop, so no more copying.
       Else
            wsU.Range(col2 & j).Value = wsS.Range(col1 & i).Value
            j = j + 1
       End If
Next
于 2013-07-24T11:43:00.693 に答える
0

次のようなものを単純に使用してみませんか。

    Sub kamal()

    Dim wsS As Worksheet, wsU As Worksheet
    Set wsS = Sheets("sheet1")
    Set wsU = Sheets("non_confid")

    For j = 2 To 197

    If Len(Trim(wsS.Range(A & j + 503).Value)) > 0 Then

     wsU.Range(col2 & j).Value = wsS.Range(col1 & j + 503).Value

    End If

    Next

    End Sub

または簡単な方法は、数式を使用することです。

于 2013-07-24T11:06:20.870 に答える