私はこのフォーラムを初めて使い、予算スプレッドシートからブックに情報を得るための助けが必要です。私が引っ張っているスプレッドシートには、複数の列と行にデータが広がっていて、空白のセルがたくさんありますが、空白のないブック内の行アイテム形式でレイアウトする必要があります。 私は各シートの各セルと行を手動でリンクすることができますが、多くのコードを必要とし、あまりエレガントではありません。 私は最良の選択肢は、列Bを介してループを実行し、そこに値がある場合、その行の値を持つすべてのセルを新しいシートにコピーすることだと思います。vbaを使用してデータをコピーして1つのスプレッドシートから別のスプレッドシートにデータを並べ替える
これは、これまで私が持っているコードです:
Private Sub ImportBudget_Click()
Dim BudgetBook As Workbook
Dim filter As String
Dim caption As String
Dim BudgetFileName As String
Dim ActiveBook As Workbook
Dim targetWorkbook As Workbook
Set targetWorkbook = Application.ActiveWorkbook
' get the budget workbook
filter = "Excel files (*.xlsx),*.xlsx"
caption = "Please Select an input file "
BudgetFileName = Application.GetOpenFilename(filter, , caption)
Set BudgetBook = Application.Workbooks.Open(BudgetFileName)
' copy data from budget to target workbook
Dim targetSheet As Worksheet
Set targetSheet = targetWorkbook.Worksheets(1)
Dim sourceSheet As Worksheet
Set sourceSheet = BudgetBook.Worksheets(1)
Dim i As Integer
Dim j As Integer
j = 2
For i = 2 To 300
If sourceSheet.Cells(i, 2).Value <> "" And sourceSheet.Cells(i, 1) <> "" Then
targetSheet.Cells(j, 1).Value = sourceSheet.Cells(i, 1).Value
targetSheet.Cells(j, 2).Value = sourceSheet.Cells(i, 2).Value
targetSheet.Cells(j, 3).Value = sourceSheet.Cells(i, 3).Value
j = j + 1
End If
Next i
BudgetBook.Close
End Sub
これに伴う問題は、それが元のスプレッドシートの1セクションのためにうまく機能していることである、しかし、一部の地域では、データの最大9列を持っています行さらに、予算シートが別のセクションに分割されているため、セクションごとに同じコードを書き直して、iを新しい範囲に変更する必要がありますか?
ここにまともなコードがありますが、あなたがしようとしていることを正確に伝えるのは難しいです。 「セクションごとに同じコードを書き直す」必要はないと言いますが、より多くのガイダンスを提供するには、入出力のより良いアイデアや「セクション」の意味を理解することが役に立ちます(つまり、1つのセクションでどのように動作するのか、他のセクションではどうしてうまくいかないのでしょうか?) –
ありがとうございます。残念ながら、私はかなり機密情報を使って作業しています。そうしないと、ソースシートを投稿してしまいます。セクションごとに、私は予算シートが複数の費用タイプに分割され、それぞれが独自のデータセットを持ち、セクションごとに異なるように構成されていることを意味します。元のコードが1つのセクションで機能した理由は、そこにあるデータが固定されていて、常に入力されているということです。しかし、他のセクションは詳細を必要とし、常に満たされるとは限りません... –
データをサニタイズしてから、データ。実際のデータは重要ではありませんが、あなたが作業しているものと達成しようとしているものをよく理解するのを助けることを試みている人にとっては重要です。また、あなた自身の明確な発言をコメント自体([編集中])(http://stackoverflow.com/posts/38961626/edit))のコメントに追加してください。コメントはありません: –