• ベストアンサー

vbaプログラム

excelの列に文字列があり、その文字列をvbaを使って他のシートに貼り付けます。 空白になるまでの文字列をコピーして貼り付けます。for文を使って、null-1までコピーします。 配列を使って、そのnull-1までの添え字の値を取得したいのですが、どのようなプログラムを作ればいいのでしょうか? sheet1のA5以降をコピーして(空白になるまで),それをsheet2のA5以降にコピーして、その列数を反映させたくて。。。 for文と配列を使いたいのですが、よろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • o_chi_chi
  • ベストアンサー率45% (131/287)
回答No.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

y6411y
質問者

お礼

コメントまで作成していただいてありがとうございました!

その他の回答 (3)

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.3

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

y6411y
質問者

お礼

forがなくてもできるのですね。 びっくりです。 ありがとうございます。

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.2

連続してセルに値があるなら、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

y6411y
質問者

お礼

とても分かりやすいです。 ありがとうございました。

  • NNori
  • ベストアンサー率22% (377/1669)
回答No.1

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 かな

y6411y
質問者

お礼

プログラムが短くて分かりやすいですね。 ありがとうございます。

関連するQ&A