私はVBAにはまったく新しく、エクセルモジュールをスクリプト化して、ワークブックの各シートに特定のセクションを抽出し、それらをフォーマットして新しいブックに1枚ずつ出力することを試みています。複数のワークシートでのデータの抽出
これまで私はこれを持っています。
Public Sub extractCol()
' Find FF&E Section, Add 3 rows and Identify relevant columns.
Dim rFind As Range
With Range("A:A")
Set rFind = .Find(What:="FF&E", LookAt:=xlWhole, MatchCase:=False,
SearchFormat:=False)
If Not rFind Is Nothing Then
NumRange = rFind.Row + 3 ' Find FF&E line and add three
CRange = "C" & NumRange & ":" & "C" & NumRange + 100 ' Define First 100
Lines in Column C
ERange = "E" & NumRange & ":" & "E" & NumRange + 100 ' Define First 100
Lines in Column E
KRange = "K" & NumRange & ":" & "K" & NumRange + 100 ' Define First 100
Lines in Column K
MRange = "M" & NumRange & ":" & "M" & NumRange + 100 ' Define First 100
Lines in Column M
Set range1 = Union(Range(CRange), Range(ERange), Range(KRange),
Range(MRange)) ' Combine individual column ranges in to one selection
range1.Copy ' Copy new combined range
Set NewBook = Workbooks.Add ' Open new Workbook
ActiveCell.PasteSpecial Paste:=xlPasteValues ' Paste to new Workbook
End If
End With
End Sub
これは私が正しくしていないビットを抽出するので素晴らしいですが、それは現在のシートだけです。すべてのシートを処理するにはどのようにループするのですか?
2番目に、すべての結果を同じシートに貼り付けたいと思いますか?
最後に、シート名を抽出してフォーマットする以下のスクリプトがあります。理想的には、出力先のシートに応じてこのデータを表示する列を出力に追加したいと考えています。
Function FindRoom()
shtName = ActiveSheet.Name
Dim arr() As String
arr = VBA.Split(shtName, " ")
xCount = UBound(arr)
If xCount < 1 Then
FindRoom = ""
Else
FindRoom = arr(xCount)
End If
End Function
申し訳ありませんが、私は、これは、単純な答えは一つの問題ではないですが、それだけで正しい方向に私を指していても、すべてのヘルプは感謝される知っています。
シートをループする方法のコード例がたくさんあります。 For-Nextループは標準であり、ワークシート変数を参照するだけで済みます。あなたはこの道を試したことがありますか?あなたは、新しいワークブックのすべての結果が欲しいという意味ですか? – SJR
私はこれに出くわしましたが、動作させることができなかったので、私は立ち往生しました。私は各シートをループして結果を新しいワークブックシートに追加したいと思います。私の前提は、ループが発生する必要があるだけでなく、最後の行が見つかるたびに新しいワークブックを作成し、それが設定した最初のワークブックに追加するのではなく、 –
あなたは試したことを投稿できますか? FindRoom関数の問題は、場合によっては空の文字列を返すことです。 – SJR