2016-12-23 2 views
0

Excelには新しく、VBAで解決策が見つかるかもしれません。 私はいくつかの列を削除する必要があるシステム生成レポートを作成していますが、最初の25行に重要な情報が含まれています。この情報の後、15〜40行の実際のレポートデータが得られます(行数はセンターによって異なります)。
空の列を削除し、AからZまでソートして、最後の列に 'Average'を挿入して、この実際のデータを処理する必要があります。 現在、実際のレポートデータをコピーして不要な列をトリムし、必要な変更を行い、先月のレポートでVLOOKUPを適用して開閉回数が一致しているかどうかを確認しています(ほとんどの場合、それを同じ場所に貼り付けます。それはVBAを使用して行うことができますか?ヘッダーのテキストに基づいて列のデータをコピーして処理する方法ヘッダーは最初の行にありません

レポートのフォーマット

 > For the period 01-11-2011 to 30-11-2011    
    > *Parameter Selection List            
    >From      01-11-2011 
    >Date      30-11-2011 
    > Partner     SAM 
    >Code      TWO 
    >Location     999 
    >Report For    All 
    >Code     : TWO         
    >Location :    ABC 

    Product Name |LastCount|AddedInPeriod |Left In The Period |Net Total | Average  
    SUPER GLUE |123456 |0    | 0    | 234567 |   
    CRICKET BAT |345678 |0    | 0    | 346899 |   
    NICON   |2345  |0    | 0    | 2456 |   
    OLD STICKS |45689 |0    | 0    | 56778 |    
    Total   |517168 |0    | 0    | 640700 | 

製品名最終カウントが列Dであり、C列が空白で、列Bにある、ヘッダーAddedInPeriodが列DとFにmeargedさにそのデータ列Fにあり、と同じです。(ヘッダーは列GとHにマージされますが、データは列Hにマージされます)、コラムIは空白です。ネット合計はJで、コロンKは空白であり、平均はCol Lです ヘッダーの下にあるデータProduct name、Last CountsおよびNet Totalが必要ですが、残りの範囲は削除する必要があります。 (いくつかのセルが結合され、注意してください) 最終報告書はそれを行うにはどのようにこの

 For the period 01-11-2011 to 30-11-2011 
     *Parameter Selection List            
    From     01-11-2011 
    Date     30-11-2011 
    Partner     SAM 
    Code     TWO 
    Location    999 
    Report For    All 
    Code     :TWO         
    Location :    ABC 

Product Name|Last Count |Net Total|Average 
CRICKET BAT |345678  |346899 |346288.5 
NICON  |2345  |2456  |2400.5 
OLD STICKS |45689  |56778 |51233.5 
SUPER GLUE |123456  |234567 |179011.5 
**Total  |517168  |640700 |578934** 

のようになりますか?

+0

Excelファイルのスクリーンショットは役に立ちます –

答えて

0

ここには、提案したヘッダーを含む列の文字を取得する関数があります。

Function Letter(oSheet As Worksheet, name As String, Optional num As Integer) 
If num = 0 Then num = 1 
Letter = Application.Match(name, oSheet.rows(num), 0) 
Letter = Split(Cells(, Letter).Address, "$")(1) 
End Function 

だけ

新しい変数を作成し、関数にヘッダを渡す、すなわち、

newvar =文字(シート( "Sheets1")、 "スーパー接着剤"、4)図4は、その後、

Sheets("Sheet2").Range(newvar & "4:" & newvar & Range("A1").End(xlDown).Row).Copy Destination:=Sheets("Sheet2").Range("A1") 

を使用する。これは、特定の列から情報を取るだろう、あなたはヘッダを見つけることができ行、あなたが手紙を持っていたら、このインスタンスでは、私は、行4を置くことを示す場所、です列見出しを付けて、それをsheet2に貼り付けてください。A1

+0

多分私は間違っていますが、動作しません。 –

+0

説明していただけますか?私は本当に新しいです! –

+0

ヘッダーでコピーするには、あなたの名前がどこにあるかの列の文字を取得する必要があるので、 "SUPER GLUE"がC列にあるとしましょう。コピーが必要なため、文字Cを格納する変数を作成する必要があります範囲。だからC2:C100をコピーしたい場合は、文字列を取得するために文字関数が必要です。 Range( "A1")。End(xlDown).Rowは最後の行を取得する単なる方法です。 – Lowpar