スプレッドシートで「期限切れ」と「期限切れ」という単語を見つける必要がありますが、それらが表示される列は可変であり、レコード (行) の数も同様です。データにこれらの値がないすべての行を削除し、他の行が削除された後にシートに残っているデータを合計する必要があります。手がかりはありますか?
3 に答える
1
ADOで何かを試すこともできます。
Dim cn As Object
Dim rs As Object
Dim strFile As String
Dim strCon As String
Dim strSQL As String
Dim strWhere As String
Dim i As Integer
''http://support.microsoft.com/kb/246335
strFile = ActiveWorkbook.FullName
strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strFile _
& ";Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1"";"
Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
cn.Open strCon
strSQL = "SELECT * FROM [Sheet1$] AS s "
rs.Open strSQL, cn, 3, 3
For i = 0 To rs.fields.Count - 1
strWhere = strWhere & " AND (UCase(s.[" _
& rs.fields(i).Name & "] ) Not Like '%DUE%' Or s.[" _
& rs.fields(i).Name & "] Is Null) "
Next
strSQL = strSQL & " WHERE " & Mid(strWhere, 5)
rs.Close
rs.Open strSQL
For i = 0 To rs.fields.Count - 1
Sheets("Sheet2").Cells(1, i + 1) = rs.fields(i).Name
Next
Worksheets("Sheet2").Cells(2, 1).CopyFromRecordset rs
于 2009-11-20T20:59:24.703 に答える
1
このようなものを試すことができます。
これをマクロに入れて実行します
Sub Macro1()
Dim sheet As Worksheet
Dim usedRange As Range
Set sheet = ActiveSheet
Set usedRange = sheet.usedRange
Dim rowCount As Integer
Dim columnCount As Integer
Dim iRow As Integer
Dim iColumn As Integer
rowCount = usedRange.Rows.Count
columnCount = usedRange.Columns.Count
For iRow = rowCount To 1 Step -1
For iColumn = 1 To columnCount
If ((InStr(1, LCase(usedRange(iRow, iColumn)), "overdue") > 0) Or (InStr(1, LCase(usedRange(iRow, iColumn)), "due") > 0)) Then
usedRange.Range(Cells(iRow, 1), Cells(iRow, columnCount)).Delete
End If
Next iColumn
Next iRow
End Sub
于 2009-11-20T13:15:05.687 に答える
1
Excel は、エラーを除いて、任意の値を文字列に変換できる必要があります。したがって、エラーを返す数式がある場合は、型の不一致が発生している可能性があります。その問題を回避する Find メソッドを使用する別の方法を次に示します。検索は、列をループするよりも遅くなる可能性がありますが、大量のデータがない場合は気付かないでしょう。
Sub DeleteOverDue()
Dim i As Long
Dim rFound As Range
'Loop backward through the used range
For i = Sheet1.usedRange.Rows.Count To 1 Step -1
'Should find "due" and "overdue" because of xlPart
Set rFound = Sheet1.usedRange.Cells(i, 1).EntireRow.Find("due", , xlValues, xlPart)
'If it's not found, delete the row
If rFound Is Nothing Then
Sheet1.usedRange.Cells(i, 1).EntireRow.Delete
End If
Next i
End Sub
注: このコードはデータを削除するため、実際のデータのコピーに対して、それが機能することを確認するまで使用してください。
于 2012-07-23T16:52:47.467 に答える