- ベストアンサー
vbaプログラム
excelの列に文字列があり、その文字列をvbaを使って他のシートに貼り付けます。 空白になるまでの文字列をコピーして貼り付けます。for文を使って、null-1までコピーします。 配列を使って、そのnull-1までの添え字の値を取得したいのですが、どのようなプログラムを作ればいいのでしょうか? sheet1のA5以降をコピーして(空白になるまで),それをsheet2のA5以降にコピーして、その列数を反映させたくて。。。 for文と配列を使いたいのですが、よろしくお願い致します。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
説明の通りプログラムすると下記の通り --- Sub Test() Dim i As Long Dim e As Long Dim h() As String e = Sheets("sheet1").Cells(Rows.Count, 1).End(xlUp).Row '最終行を取得 ReDim h(e - 5) '配列確保 For i = 5 To e '配列に格納 h(i - 5) = Sheets("sheet1").Cells(i, 1).Value Next For i = 5 To e '配列から設定 Sheets("sheet2").Cells(i, 1).Value = h(i - 5) Next End Sub
その他の回答 (3)
- mt2008
- ベストアンサー率52% (885/1701)
forを使うとコードが長くなるので配列だけ使って見ました。 質問の意図を誤解していたらごめんなさい。 Sub Sample() Dim vData With Sheets("Sheet1") vData = .Range(.Range("A5"), .Range("A5").End(xlDown)).Value End With With Sheets("Sheet2") .Range(.Range("A5"), .Range("A5").Offset(UBound(vData, 1) - 1)) = vData End With MsgBox (UBound(vData, 1) & "行コピーしました") End Sub
お礼
forがなくてもできるのですね。 びっくりです。 ありがとうございます。
- nda23
- ベストアンサー率54% (777/1415)
連続してセルに値があるなら、For文など 使わないでもできます。 Dim 行数 As Long Dim 列数 As Long '行数と列数を求める 行数 = Sheet1.Range("A5").CurrentRegion.Rows.Count 列数 = Sheet1.Range("A5").CurrentRegion.Columns.Count '範囲をコピーする Sheet1.Range(Sheet1.Cells(1, 5),Sheet1.Cells(行数, 列数 + 4).Copy _ Sheet2.Range("A5") 1回でできることを複数回で実現するのは 速度的にも効率が恐ろしく悪いです。 配列に仕込みたいなら以下のようにします。 ReDim 配列(1 To 行数, 1 To 列数) Dim 行 As Long Dim 列 As Long For 行 = 1 To 行数 For 列 = 1 To 列数 配列(行, 列) = Sheet.Cells(行, 列) Next Next 配列の底を0にする場合は行数-1、列数-1にします。 ReDim 配列(行数 - 1, 列数 - 1) For 行 = 0 To 行数 - 1
お礼
とても分かりやすいです。 ありがとうございました。
- NNori
- ベストアンサー率22% (377/1669)
dim row as integer for row = 5 to 65000 sheet2.cells(row,1).value = sheet1.cells(row,1).value if sheet1.cells(row+1,1).value = "" then exit for end if next 列数は row-5 かな
お礼
プログラムが短くて分かりやすいですね。 ありがとうございます。
お礼
コメントまで作成していただいてありがとうございました!