2016-04-07 17 views
1

私はコーディングの世界ではかなり新しいです。私はそれらの中にテキストと2つの空白行を持つセルの行のグループを持っています。彼らは2と3のグループであり、列AとBにあります。次のテキストグループへのExcel VBAループ最初の空白セルに移動し、テキスト文字列を入力します

テキストの各グループについて、私は列Bのテキストの上の最後の空白のセルに移動し、そのグループセルAの "。

私はこれを使用してみました:これは、テキストの最初のグループのためだけに働い

Sub FindBlankAndFill() 

    Dim cnter As Integer  
    firstRow = Cells(Rows.Count, 1).End(xlUp).Row 
    cnter = 0 

    For i = 2 To firstRow 
     If IsEmpty(Cells(i, 1)) Then 
      Select Case cnter 
       Case 0: Cells(i, 2).Value = "Test Value" 
       Case Else: Cells(i, 2).Value = "" 
      End Select 
      cnter = cnter + 1 
     End If 
    Next i 

End Sub 

を、その後、完全に空白他のグループを去りました。上記のコードにもないので、テキスト文字列に必要なセルの値を取得します。

あなたにアイデアや解決策がある場合は、私は非常に助けていただければ幸いです。 [After]ピクチャでは、黄色のセルはVBAが追加するセルです。 "Test Value"のアンダースコアの後の部分は、その特定のグループのA列のセルから引き出される必要があります。

Sample of Data before the VBA is run

Sample of Data After the VBA is run

+0

何をしているのか分かりませんが、 'if'文の外側に' cnter = cnter + 1'を置いておきたいですか? – findwindow

+0

前と後のデータ(例:スクリーンショット)のほんの一例が、参考になると思われます。 – OldUgly

+0

私は前後のデータのいくつかの写真を小さな説明とともに追加しました。他の情報が役立つかどうか教えてください。ありがとう! – tbanner

答えて

0

あなたのアルゴリズムが近かったです。基本的には、cnter変数を使用して、遭遇する空白行を追跡しているので、データを見つけたときに値をリセットする必要があります。あなたのfirstRowの声明は実際にはlastRowです。

Option Explicit 

Sub FindBlankAndFill() 
    Dim ws As Worksheet 
    Dim lastRow As Long 
    Dim cnter As Integer 
    Dim i As Integer 

    Set ws = ActiveSheet 
    lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row 
    cnter = 0 

    For i = lastRow To 1 Step -1 
     If IsEmpty(ws.Cells(i, 1)) Then 
      Select Case cnter 
       Case 0: 
        '--- found the blank row above the data 
        ws.Cells(i, 2).Value = "Test Value_" & ws.Cells(i + 1, 1) 
        cnter = 1 
       Case 1: 
        '--- found the blank row below the data, 
        ' so do nothing 
      End Select 
     Else 
      '--- we found some data, so set the flag 
      ' for when we find the next blank row 
      cnter = 0 
     End If 
    Next i 
End Sub 
+0

PeterT、これは私が望んでいたのとまったく同じように動作するようです! – tbanner

関連する問題