2017-02-15 3 views
0

私はいくつかの列を持つExcelテーブルを持っています。しかし、現時点では列期間に問題があります。Excelテーブルの空白行を1つの既存の値で埋める方法は?

テーブルをスクロールすると、多くのIDに空の行があり、このIDの1行だけが実際の値を持つことが予想外に気づいています。

VBAを使用して、この唯一の既存の値で他のエンプティラインを埋めることは可能ですか?つまり、ID6979960の空の値はすべて42:15:56の値で埋める必要があります。

私のテーブルの私の他の計算は、正しく動作しません。

VBAで値のコピーがどのように機能するかはわかりません。

Table Example:ID,Duration

答えて

1
Public Sub FillEmpty() 
     Dim finded As Range 
     Dim Sheet As Worksheet 
     Set Sheet = ActiveSheet 'or any other sheet -> .Sheets("") 
     With Sheet 
      lastrow = .Cells(1, 1).End(xlDown).Row 
      For i = 1 To lastrow 
      If StrComp(.Cells(i, 2).Value, "") = 0 Then 
      Set finded = .Columns(2).Find("*", after:=.Cells(i, 2), LookIn:=xlValues) 
      ID = .Cells(finded.Row, 1).Value 
      Filler = .Cells(finded.Row, 2).Text 
      Else 
       ID = .Cells(i, 1).Value 
       Filler = .Cells(i, 2).Text 
      End If 
      Index = i 
      While ID = .Cells(Index, 1).Value 
      .Cells(Index, 2).Value = Filler 
      Index = Index + 1 
      Wend 
      Next i 
     End With 
End Sub 

最も最適なソリューションそうではない、それは実際に素早くメイド。私はあなたの例でそれをテストし、それは動作します。より多くの行ではわかりません。それをチェックし、それがあなたのために働く場合私に知らせてください。

+0

最後の行を見つけるためにこれを見てください。 'xlDown'は最良の選択肢ではありません! ;)http://stackoverflow.com/a/11169920/4628637およびhttp://stackoverflow.com/documentation/excel-vba/918/methods-for-finding-the-last-used-row-or-column- in-a-worksheet#t = 201702151106496482673 – R3uK

+1

うわー、私はxlDownメソッドを使って仕事中いつもそれをやっていました。 – AngelMdez

+0

@AngelMdez私はこのコードを試してみましたが、それは私に "次のものがない"というエラーを出します。たぶんどこにEnd Ifを追加するべきなのでしょうか? –

0
Sub fillerv2() 
rowscnt = 1000 
tmi = 1 
tm = "" 
For i = 1 To rowscnt 
If tm <> Cells(i, 1).Value Then 
    For o = tmi To i - 1 
     If IsEmpty(Cells(o, 2).Value) = False Then 
      Pattern = Cells(o, 2).Value 
      Exit For 
     End If 
    Next o 
    For o = tmi To i - 1 
     Cells(o, 2).Value = Pattern 
    Next o 
    tm = Cells(i, 1).Value 
    tmi = i 
End If 
Next i 
+1

これはOPが要求したものではなく、そのIDの正しい値ではなく、すべての空白のセルに事前設定値を入力します。 –

+0

はい、これは実際に私が求めているものではありません。 –

+0

ああ、ID7777の値が3行目などで "1"の場合、ID7777の他の行はすべて値 "1"でなければなりません。 vbaを使用する場合は問題はありませんが、最適化の問題について1つの質問があります。同じIDがすべて1つずつソートされて整理されていますか? @ArtemiA。 –

関連する問題