0

形式のデータを含むデータシート「注文」があります

order no    Customer    Sales Executive Order Status    Order Date
211 nokia   john    cancelled   23-May-13
643 panasonic   andrew  fulfilled   23-May-13
209 samsung john    fulfilled   4-Apr-14
453 philips andrew  fulfilled   4-Apr-14
311 dell    mary    fulfilled   16-Apr-14
865 panasonic   andrew  fulfilled   16-Apr-14
201 apple   john    fulfilled   3-May-14
453 hp  mary    cancelled   3-May-14
205 nokia   john    fulfilled   4-May-14
643 philips andrew  fulfilled   4-May-14
312 lenovo  mary    fulfilled   22-May-14
204 apple   john    fulfilled   7-Jun-14
432 hp  mary    fulfilled   7-Jun-14
214 nokia   john    pending 25-Jun-14
754 panasonic   andrew  fulfilled   25-Jun-14

上記は、注文シートの多くの列のうち重要な列です。

「営業担当者」がリストされている別のワークシートがあり、月ごとに注文を処理した一意の顧客の数を知りたい

Sales Executive Apr-14  May-14  Jun-14
john    <value> <value> <value>
mary    <value> <value> <value>
andrew  <value> <value> <value>

行に営業担当者名、列に月を読み込んで、以下のように回答するようにコーディングしたい

Sales Executive Apr-14  May-14  Jun-14
john    1   2   1
andrew  2   2   1
mary    1   1   1

これを毎月実行できる vba コードを探しています。上記の例は、実際のデータのサンプル セットです。

私は VBA に比較的慣れていないので、コードについて助けが必要です。

各営業担当者がその月に生成した製品の数と総収益を見つけるには、同様のコードが必要なので、コードがどのように機能するかについての説明があれば助かります。

事前にご協力いただきありがとうございます

編集(以下のOPコメントからのコード):

Sub UniqueReport() 
Dim dict As Object 
Set dict = CreateObject("scripting.dictionary") 
Dim varray As Variant, element As Variant 
Dim lastrow As Long 

lastrow = Sheets("Orders").Range("N" & Rows.Count).End(xlUp).Row varray = Sheets("Orders").Range("N2:N" & lastrow).Value 

For Each element In varray 
    If dict.exists(element) Then 
        dict.Item(element) = dict.Item(element) + 1 
    Else 
        dict.Add element, 1 
    End If 
Next 

ActiveSheet.Range("P2").Value = dict.Count 
End Sub 
4

1 に答える 1

0

ワークシートの数式と関数を使用するだけで、VBA なしでこれを行うことができます。

メイン データ シートで、日付列の横に列を追加し、行 2 のセルに次の数式を貼り付けます。

=TEXT(E2,"mmm yyyy")

これにより、月と年を比較できるようになります

次に、Sales Executivesワークシートで、この式をセル B2 に入力します。

=COUNTIFS(Orders!$C2:$C$16,$A2,Orders!$F$2:$F$16,B$1)

では、この式は何をしているのでしょうか。

最初の基準では、A2 の名前を列 C:C のすべての値と比較し、かつ行 A の月を注文シートの列 F に配置したテキストの月と比較することを指定します。

次に、数式を必要な月にドラッグし、各セールス エグゼクティブにドラッグできます。

また、参照してください。

編集

プログラムでこれを行うこともできます。

  1. Ordersワークシートでの比較のために、数式を含むダミー列を追加TEXTして、月と年の日付を指定します。
  2. Sales Executivesシートに数式を追加します。
  3. 数式の上に値をコピーして貼り付けます
  4. ダミー列を削除します

これを試して:

With Application
    .ScreenUpdating = False
    .DisplayAlerts = False
End With

With Sheets("Orders")
    .Columns("E:E").Insert Shift:=xlToRight
    .Range("E2:E" & .Range("D2").End(xlDown).Row).FormulaR1C1 = "=TEXT(RC[1],""mmm yyyy"")"
End With

With Sheets("Sales Executives")
    .Range("B2:D" & .Range("A2").End(xlDown).Row).FormulaR1C1 = "=COUNTIFS(Orders!C3,RC1,Orders!C5,R1C)"
    .Range("B2:D" & .Range("A2").End(xlDown).Row).Copy
    .Range("B2:D" & .Range("A2").End(xlDown).Row).PasteSpecial Paste:=xlPasteValues
End With

Sheets("Orders").Columns("E:E").Delete Shift:=xlToLeft

With Application
    .ScreenUpdating = True
    .DisplayAlerts = True
End With

したがって、F8 を使用してコードをステップ実行し、その動作を確認するだけです。

もちろん、別のオプションは、SQL PIVOT 関数を使用してデータを取得する SQL Server クエリで計算を行うことです。

それが役立つことを願っています

于 2014-08-08T09:05:37.287 に答える