2016-12-28 161 views
1


ファイルを複数回コピーし、「Linkuire」シートの列Dの名前のリストの後に出力の名前を変更します。
列Dは、D1000までセルにデータを取り込む連結式でいっぱいです。
連結式が ""(何もない)返ってきたら、コードがそのセルを無視するようにします。VBA:処理中の空白セルをスキップする

' the range of cells that contain the rename list 
With ActiveWorkbook.Sheets("Linkuire") 
Set rRenameList = .Range("D2", .Cells(.Rows.Count, "D").End(xlUp)) 
End With 

今では単に「「

がどのようにコードがCONCATENATEのリターンがあるすべてのセルを無視することができます」?」いくつかは=であっても、D1000細胞に口座にすべてのD2を取りますか(私はPDFファイルに特定のシートを変換するVBAコードと同じ問題を抱えている - 。データは、CONCATENATE式からだと「それも、CONCATENATEリターンた場合、すべてのセルを変換」や空白である)

はありがとう..

答えて

0

これはうまくいくはずです。それはあなたの範囲をループし、長さがより大きいまたは1 純粋SpecialCells()アプローチは

あなたが動作しないため、編集

Sub Test() 
' Adapted from http://stackoverflow.com/a/8320884/4650297 

    Dim rng1 As Range, rRenameList As Range, cel As Range 
    With ActiveWorkbook.Sheets("Linkuire") 
    Set rng1 = .Range("D2", .Cells(.Rows.Count, "D").End(xlUp)) 
    End With 

    For Each cel In rng1 
    If Len(cel) >= 1 Then 
     If Not rRenameList Is Nothing Then 
      Set rRenameList = Union(rRenameList, cel) 
     Else 
     ' the first valid cell becomes rng2 
      Set rRenameList = cel 
     End If 
    End If 
    Next cel 

Debug.Print rRenameList.Address 
End Sub 
+0

ありがとう、これは素晴らしいです。私の問題を解決しました。ありがとう、私はVBAで新しいです:) – MisterA

1

に等しい場合にのみ、あなたのrRenameListにセルアドレスを追加二つのアプローチを、以下の使用してループを避けることができます:

  • AutoFilter()SpecialCells()アプローチ:

    をこのアプローチでは
    With ActiveWorkbook.Sheets("Linkuire") 
        With .Range("D1", .Cells(.Rows.count, "D").End(xlUp)) 
         .AutoFilter Field:=1, Criteria1:="<>" '<--| filter out blanks 
         If Application.WorksheetFunction.Subtotal(103, .Cells) > 1 Then Set rRenameList = .Resize(.Rows.count - 1).Offset(1).SpecialCells(xlCellTypeVisible) 
        End With 
        .AutoFilterMode = False 
    End With 
    

  • 式とSpecialCells()アプローチ

    With ActiveWorkbook.Sheets("Linkuire") 
        With .Range("D2", .Cells(.Rows.count, "D").End(xlUp)) 
         .Offset(, 1).FormulaR1C1 = "=IF(RC[-1]="""", 1,"""")" 
         Set rRenameList = .Offset(, 1).SpecialCells(xlCellTypeFormulas, xlNumbers).Offset(, -1) 
         .Offset(, 1).ClearContents 
        End With 
    End With 
    

    あなたは私が右に隣接するように選択した「ヘルパー」の列に数式を書いています。それ以外のオフセットに調整することができます

+0

それはあなたのために働くでしょうか?私はそのようなことを試みましたが、それはまだすべてのセルをつかむだけです... OPはすべてのセルに "= Concat(A1、B1)"を持っているので、すべてのセルをつかんでいます。 – BruceWayne

+0

User3598756sソリューションが機能しませんでした。フォーミュラが何かの結果をもたらすかどうかに関わらず、まだすべての細胞を取得しています。ブルース、あなたのコードはちょうど完璧に働いた:)私は答えとして市場に出て、ありがとう – MisterA

+0

あなたは両方が正しい!私は2つの異なる(働いている)アプローチで自分の答えを編集しました – user3598756

関連する問題