2017-05-24 12 views
0

enter image description here picは自分のコードで何が起こるかを示しています。Excel VBA:最後に使用された行の後にセルにデータを追加します。

ユーザーフォームがあり、ユーザーフォームのラベルを選択したワークシートに追加します。そして、これが私が試みたものです。問題は、他のセルと同じ行にない1つのセルがあるのはなぜですか?

Dim c As Control 
For Each c In Me.Controls 
    If TypeName(c) = "Label" Then 
     With ActiveSheet 
      i = i + 1 
      Dim lastRow As Long 
      lastRow = .Cells(.Rows.Count, "A").End(xlUp).Row + 1 

      If c <> "Chapter" Then 
       .Range(Cells(1, 1), Cells(1, i)).Name = "Chapter1" 
       .Range("Chapter1").Merge 
       .Range("Chapter1").Value = "Chapter 1" 
       .Range("Chapter1").HorizontalAlignment = xlCenter 

       .Cells(lastRow, i).Value = c.Caption 
      End If 
     End With 
    End If 
Next 
+1

あなたがしたい場合**空白**最後に使用された行(ダダで満たさ=最後の行)の後、細胞 'lastRow'が最後を表しているため、その後' LASTROW + 1 'を使用します行はデータで満たされています。 –

+0

これは+ 1で発生します –

+1

私はあなたが達成しようとしていることを推測することはできませんので、あなたの目標を教えてください。あなたのコードが実際に何をしているのか、それが何を期待しているのかを記述してください。 –

答えて

1

問題は、.Cells(.Rows.Count, 1).End(xlUp).Rowを行う最初の時間はまだ何も存在しないだろうA2に、そうlastRowは1になります。しかし、あなたが値をつけたら、「いいえ」ということです(iが2である)そのコードを次回実行すると、A2が塗りつぶされるので、.Cells(.Rows.Count, 1).End(xlUp).Rowは2を返し、得られる効果を得ます。他のすべての値は1行下がります。

これを解決する方法はいくつかありますが、ここには1つの方法があります。 + IIf(i = 1, 1, 0)lastRowの割り当てを追加します。

lastRow = .Cells(.Rows.Count, 1).End(xlUp).Row + IIf(i = 1, 1, 0) 
+0

こんにちは、どうもありがとうございます。これは私のために働いた。私はあなたの説明を通して自分のコードに何が起こっているのか理解しました。どうもありがとうございます。今度は、あなたが何が起こったのかを理解するために私に言ったことについて、私は研究します。どうもありがとうございます。 –

+1

あなたを歓迎します;-) 'IIf'は' i = 1'のとき結果に1を加え、そうでなければ何も(0)を加えません。それは 'If ... Then ... Else ...'のようなものですが、式で使うことができる形式です。 – trincot

+0

よろしくお願いします。今、私は分かる。どうもありがとうございます。 –

関連する問題