Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10全般 : Excel 2016)
不要データをはずしながら配列に格納したい
投稿日時: 19/05/09 15:21:25
投稿者: miso
メールを送信

originalデータのB列に0となっているデータは配列に入れずにとばし、最後に一括でListシートに書き出しをしたいです。
できれば書き出し後に並び替えより、フィルタで抽出より、配列に取り込む際に削れれば一番良いのですが。。。
あまり効率できではないのでしょうか?
ご指導の程、宜しくお願い申し上げます。 miso
 

Sub 抽出()

 Dim i As Long
 Dim j As Long
 Dim s As Long
 Dim myRow As Long
 Dim myList As Variant
 
 Worksheets("List").Cells.Clear
 Worksheets("List").Range("1:1").Value = Worksheets("original").Range("1:1").Value
 
    myRow = Cells(Rows.Count, 1).End(xlUp).Row
 ReDim myList(myRow, 10)

    s = 0
    For i = 2 To myRow
        For j = 0 To 10
            If Cells(i, 2) <> 0 Then
                 myList(s, j) = Cells(i, j + 1).Value
            End If
        Next j
        s = UBound(myList.Count) + 1
    Next i

 Sheets("List").Range("A2:J" & myRow) = myList
End Sub

回答
投稿日時: 19/05/09 15:56:04
投稿者: 半平太

処理順序がおかしい気がします。
 
B列が0かどうかを事前チェックして、データを転記するかどうか決める。
 

Sub 抽出()
    Dim i As Long
    Dim j As Long
    Dim s As Long
    Dim myRow As Long
    Dim myList As Variant
    
    Worksheets("List").Cells.Clear
    Worksheets("List").Range("1:1").Value = Worksheets("original").Range("1:1").Value
    
    myRow = Cells(Rows.Count, 1).End(xlUp).Row
    ReDim myList(myRow, 10)
    
    s = 0
    For i = 2 To myRow
        If Cells(i, 2) <> 0 Then ’先にチェックする
            For j = 0 To 10
                myList(s, j) = Cells(i, j + 1).Value
            Next j
            s = s + 1
        End If
    Next i
    
    Sheets("List").Range("A2:J" & myRow) = myList
End Sub

投稿日時: 19/05/09 16:30:44
投稿者: miso
メールを送信

半平太様、お早いご回答ありがとうございます。
できました!!!先にチェックしてから配列に入れるのですね。まだまだやり方が分かっておりませんでした。
ありがとうございます。