0

これを説明するために最善を尽くします。うまくいけば、スクリプトのメモが私のとりとめのないことを明確にします。簡単に言えば、このスクリプトは完了すると、過去の生産シートをめくって、これらのシートから選択したデータを 1 つにコンパイルします。現在のコード内では、貼り付ける次の空のセルを特定するときに、Replace() の出力を正しく機能させるのに問題があります。ワーク ブック セクションを読み始めるときに必要なコード変更の量を制限しようとしています。それが理にかなっていることを願っています。「コピーペーストには、限られた変更で過去をコピーするコードが必要でした。私のアイデアは、ターゲット列を変更するだけで済みました。」私のスキルは限られていますが、私は学んでいるので、方法やデザインについてアドバイスやフィードバックをお気軽にお寄せください. 現在、columnCEL変数が範囲選択で機能する方法をデバッグしようとして困惑しています。誰かが私にくれた建設的なものは何でも感謝します。リンク、情報ソースなど、私はこのサイトやその他のサイトを何時間もサーフィンしてきましたが、いくつかのことがわかりました...

    Sub parse()
Dim strPath As String
Dim columnCEL As String
Dim lastrow As Range

'open WB to consolidate too
                        Workbooks.Open "c:\prodplan\compiled\plancon.xlsx"

Set lastrow = ActiveSheet.UsedRange.End(xlDown).Offset(1, 0)


Set objexcel = CreateObject("Excel.Application")
objexcel.Visible = True
objexcel.DisplayAlerts = False
strPath = "C:\prodplan"
Set objfso = CreateObject("Scripting.FileSystemObject")
Set objFolder = objfso.GetFolder(strPath)


'Loop through objWorkBooks
For Each objfile In objFolder.Files

    If objfso.GetExtensionName(objfile.Path) = "xlsx" Then
        Set objworkbook = objexcel.Workbooks.Open(objfile.Path)

objworkbook.Worksheets("plan").Select

 'start header dates and shifts copy from objworkbook to consolidated WB
  objworkbook.Worksheets("plan").Range("b6:p7").Select


            Selection.copy
                    Workbooks("plancon.xlsx").Worksheets("data").Range("B1").Select
                    lastrow.Select
                    ActiveCell.PasteSpecial

                    'start loop for objworkbook name copy to field in plancon corisponding with date/shift and copy/past select row data.





 objworkbook.Close False

 'Move proccesed folder to new Dir

End If
'remove msgbox after debug
 MsgBox "loop stoper remove for final application"
Next

objexcel.Quit




End Sub

"destination  WB "Plancon table structure                   
Date    shift   day Total sales Inventory   Travel
source WB NAME  Thurs   Night   3429        
source WB NAME  Fri Day 2735        
source WB NAME  Fri Night   5294        
source WB NAME  Sat Day 7672        
source WB NAME  Sat Night   0       



Source structure                    
Shift:  Thurs   Fri Fri     
Shift:  Night   Day Night       
Date:   40360   40361   40361       
Total sales 3429    2735    5294        
Inventory   1750.5045   1685.854    3374.3956       
Travel                  

ティム、アンディ、お時間をありがとう。あなたはどちらも正しいです。それはオフセット(1,0)でなければなりません。ティムは、宛先のワークブックを開いたときのアクティブセルに関して、「a1」に設定しましたが、指定された列に貼り付ける前にコードがLastcellをアクティブに設定するため、必要ないという考えでそれを削除しましたペーストごとにハードコードされます。貼り付けのために新しい列を入力するたびに、最後の行の指定を変更する必要がない方法を見つけようとしていました。Andy の提案は、私にとって物事を単純化してくれると信じています。例と理解のために他のコードを検索すると、usedrange が表示されませんでした」 提案を反映するようにコードを更新しました。ソース テーブルと宛先テーブルの例も追加しました。ソース テーブルには、例の形式で宛先 WB にコピーされる約 78 行のラベルが含まれています。完璧な世界では、すべての転置ペーストを選択すると、そこにたどり着きます。残念ながら、ガベージが多すぎて、手動で 87+ WB をフィルタリングするのは魅力的ではありませんでした。比較と等しいコピー範囲のいずれかでループする必要があります。または、ソース内の各行のコピー範囲と等しい検索。どちらがより速く/より生産的かについてのアドバイスはありますか? いずれにせよ、あなたの助けに感謝します/響板であること. どちらがより速く/より生産的かについてのアドバイスはありますか? いずれにせよ、あなたの助けに感謝します/響板であること. どちらがより速く/より生産的かについてのアドバイスはありますか? いずれにせよ、あなたの助けに感謝します/響板であること.

4

1 に答える 1

1

もっと探しました..これは、検索ランキングのトップにほど遠いMS開発者の記事で見つかりました。いずれにせようまくいきました。

   Dim MyColumn As String
        Dim Here As String
        Here = ActiveCell.Address
                 MyColumn = Mid(Here, InStr(Here, "$") + 1, InStr(2, Here, "$") - 2)
lastrow = ActiveWorkbook.ActiveSheet.Range(MyColumn & "65536").End(xlUp).Offset(1, 0)
于 2012-06-20T18:23:13.347 に答える