2016-07-08 12 views
0

次の行が次の行にコピーされないように、空の。行1のすべてがヘッダーであるとします。EXCEL VBA - 行内のセルをループします。空でない場合は、次の行が空になるまで別の行にコピーします。

データ等である。

A2 ClientA  B2 Product1  C2 Price  D2 Quantity  E2 Cost 
    A3    B3    C3 Price  D3 Quantity  E3 Cost 
    A4    B4    C4 Price  D4 Quantity  E4 Cost 
    A5 ClientB  B5 Product2  C5 Price  D5 Quantity  E5 Cost 
    A6    B6    C6 Price  D6 Quantity  E6 Cost 
    A7 ClientC  B7 Product3  C7 Price  D7 Quantity  E7 Cost 
    A8    B8    C8 Price  D8 Quantity  E8 Cost 
    A9    B9    C9 Price  D9 Quantity  E9 Cost 

A3とA4は、クライアントAで満たされ、次の行が空でなくなるまで、B3及びB4は、製品で満たされます。

私は同様の質問を探すために検索しましたが、どのように記述するかはわかりません。誰でもVBAコードがどうなるかのアイデアを持っている

A2 ClientA  B2 Product1  C2 Price  D2 Quantity  E2 Cost 
    A3 ClientA  B3 Product1  C3 Price  D3 Quantity  E3 Cost 
    A4 ClientA  B4 Product1  C4 Price  D4 Quantity  E4 Cost 
    A5 ClientB  B5 Product2  C5 Price  D5 Quantity  E5 Cost 
    A6 ClientB  B6 Product2  C6 Price  D6 Quantity  E6 Cost 
    A7 ClientC  B7 Product3  C7 Price  D7 Quantity  E7 Cost 
    A8 ClientC  B8 Product3  C8 Price  D8 Quantity  E8 Cost 
    A9 ClientC  B9 Product3  C9 Price  D9 Quantity  E9 Cost 

EXCEL VBA - Loop through cells in a column, if not empty, print cell value into another column

最終結果は次のようになるでしょうか?

答えて

1

これにはVBAは必要ありません。

書き込みヘルパー列でこの式:=IF(ISBLANK(A2),F1,A2)

ヘルパー列を想定し、このカラムF.ドラッグダウンセットであり、その後、元の列に値をコピーします。列Bの手順を繰り返します。

+0

間違っているだろう、私はどのように私の場合についてTHXメイト –

1

VBAを使用する場合は、これを使用できます。

データの最後の行をどのように探したかったかわかりませんでしたので、自分で変更できる変数を提供しました。これは行に対応しています。 Zを使用する最初のForループは列A(1)と列B(2)をループし、このループ内でセルを通過し、セル値が ""の場合に最後に見た値を入力する別のForループを持ちます。

Sub LoopFill() 

Dim LastEntry As String, LastRow As Integer 

LastRow = 25 

For Z = 1 To 2 
    LastEntry = "" 
    For i = 1 To LastRow 
     If Cells(i, Z).Value = "" Then Cells(i, Z).Value = LastEntry 
     LastEntry = Cells(i, Z).Value 
    Next i 
Next Z 

End Sub 
+0

、これはC列の一部が空であっても動作しますました列Eの最後の行を探したいですか? 追加: LastRow = activesheet.Cells(.Rows.Count、 "E")。End(xlUp).Row –

+0

はい、うまくいくはずです。 – tjb1

+0

答えの一つがあなたの質問に役立つか、答えが見つかった場合は、回答としてマークしてください。 –

1

あなたがする必要があります:

  • SHEETNAME:あなたが処理さ

  • arColumns =アレイたいシートの名前に( "A"、2、3):この配列


にあなたが塗りつぶされたい列番号や文字を追加します。
 
Sub FillRows() 
    Const SheetName As String = "Sheet3" 

    Dim lastRow As Long, x As Long, y 
    Dim arColumns 
    arColumns = Array("A", 2, 3) 

    With Worksheets(SheetName) 
     lastRow = .Rows(Rows.Count).End(xlUp).Row 
     For x = 3 To lastRow 
      For y = 0 To UBound(arColumns) 
       If IsEmpty(.Cells(x, arColumns(y)).value) Then .Cells(x, arColumns(y)).value = .Cells(x - 1, arColumns(y)).value 

      Next 
     Next 

    End With 

End Sub 

+0

UBound(arColumns)は配列の上限を見つけることですが、配列宣言は動的ではありません。 arColumns = Array( "A"、2,3) コードはどのように機能しますか? –

+0

'UBound(arColumns)'と 'UBound(arColumns、1)'は配列の最初の次元の最後のインデックスを返します。 –

0

これは、VBAなしで行う別の方法です。

  1. セレクトブランク(CTRL + G、特別、選択空白、[OK]をクリックします)数式バー、タイプ=(DIRECTLY FIRST BLANK上のセル)で
  2. 例:A2が空白の場合、= A1
  3. CTRLキーを押しながらEnterキーを押すと、すべての空白セルに式が適用されます。
  4. 範囲を選択し、必要に応じて値をコピーして貼り付け、数式を削除します。
  5. あなたが値を貼り付け、ソートやフィルタを実行しようとしていない場合は、データが
関連する問題