- 締切済み
エクセルのVBAコードにつてい
以下のコードについて、その内容をまだ自分の知識では理解できず困っておりまして、アドバイスいただければと思いまして書き込みました。 『コード』 Sub Test() Dim Lc As Integer Dim Ct As Integer Dim MyR As Range Dim C As Range Dim D As Range Lc = Range("A1").End(xlToRight).Column - 2 For Each C In Range("B2", Range("B65536").End(xlUp)) Ct = WorksheetFunction.Count(C.Offset(, 1).Resize(, Lc)) If Ct > 0 Then Set MyR = C.Offset(, 1).Resize(, Lc).SpecialCells(2, 1) For Each D In MyR With Sheets("Sheet2").Range("A65536").End(xlUp) .Offset(1).Value = C.Value .Offset(1, 1).Value = Cells(1, D.Column).Value End With Next Set MyR = Nothing End If Next With Sheets("Sheet2") .Columns("A:B").AutoFit .Activate End With End Sub 『質問』 1.「Lc = Range("A1").End(xlToRight).Column - 2」の部分の解釈は「A1から右方向に一番最後のセルまでを範囲指定し、その一番右のセルの列番号を取得する」変数という解釈でいいのか 2.「Ct = WorksheetFunction.Count(C.Offset(, 1).Resize(, Lc))」の部分の変数はどういった値の整数を取得する変数なのか 以上2点についてアドバイスいただけると幸いです。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- papayuka
- ベストアンサー率45% (1388/3066)
VBE画面で表示-イミディエイトウィンドウでイミディエイトウィンドウを開きます。 各行の下にDebugを入れてみましょう。 Lc = Range("A1").End(xlToRight).Column - 2 '↓これ Debug.Print "Lcは " & Lc For Each c In Range("B2", Range("B65536").End(xlUp)) '↓これ Debug.Print "Cはセルは " & c.Address Ct = WorksheetFunction.Count(c.Offset(, 1).Resize(, Lc)) '↓これ Debug.Print c.Offset(, 1).Resize(, Lc).Address & "の" & _ "データが入っている数 = Ctは " & Ct 実行するとイミディエイトウィンドウにそれぞれの値が書かれます。 また、デバック-ステップインでステップ実行をかけて F8キーで進めていき、通り過ぎた後にマウスポインタを変数にあてると値がポップアップしたりもします。 1は既に回答が出てます。 1行目はタイトル行として、A1~G1までタイトルが入っているとします。 A1から右にG列(7列目)まで飛び、7-2=5を得ます。 2は B2:Bxx (xxはB列最後の行)までループして、C列からLcで得た列に入っている値の個数をカウントしています。 Cには最初にB2が入ります。 C.Offset(, 1)の意味はB2から行方向に0、列方向に1行ったセルです。(C2) Resize(, Lc)はB2から1で求めた数(5)右に行ったセルです。(G2) 合わせると C2:G2 の範囲になります。 Countでこの範囲の個数を求めて、Ctに代入しています。 Ctが0より大きい場合に処理をして、次へループし、B3・・・・Bxxまで繰り返します。
- error123
- ベストアンサー率21% (54/247)
とりあえず1.です。 A1セルを選択した状態でCtrl+→キーを押して飛ぶセルから左に2つ戻ったセルのある列番号をLcとする。