0

「情報」というワークシートに顧客データを記入します。次に、同じ顧客データを別のワークシート「注文」に手動でコピーします。「注文」には、請求書番号と次のような構造が含まれています。

      A           D           E               F            H         J
    INVOICE   FIRSTNAME   LASTNAME        DESCRIPTION   POSTCODE   EMAIL
1    1234       Fred       Smith         Red widget      AR225H   fred@smith.com
2    1235       Bill       Jones         Blue widget     EH66VT   bill@jones.com
3    1236
4    1237

データを「情報」から「注文」にセルごとにコピーするマクロを作成したいと思います。これは可能ですが、「注文列Dが空白の場合は、データのコピー先の行3を選択してください」という条件付きコメントが必要です。これがない場合は、最後の注文行を上書きします。

顧客データは「情報」シートで毎回変更されることに注意してください。これが、手動でコピーする理由です。

私は現在、この式を使用して、次に利用可能な請求書番号を情報シートに取り込みます。

= INDEX(Orders!$ A:$ A、COUNTA(Orders!$ D:$ D)+1)

これにより、現在の顧客データに割り当てる適切な請求書番号がすでに含まれている「情報」シートにセル(F3と言う)を設定できます。これを使用して、条件を「Info!F3がOrders!列Aに表示される行に情報を貼り付ける」に書き換えることができます。

それが役立つ場合は、マクロを次に示します。

Sub Macro2()
'
' Macro2 Macro
'

'
    Range("B6").Select
    Selection.Copy
    Sheets("Orders").Select
    Range("C735").Select
    ActiveSheet.Paste
    Sheets("Info").Select
    Range("B7").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("Orders").Select
    Range("D735").Select
    ActiveSheet.Paste
    Sheets("Info").Select
    Range("B8").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("Info").Select
    Range("B11").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("Orders").Select
    Range("E735").Select
    ActiveSheet.Paste
    Sheets("Info").Select
    Range("B12").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("Orders").Select
    Range("F735").Select
    ActiveSheet.Paste
    Sheets("Info").Select
    Range("B15").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("Orders").Select
    Range("G735").Select
    ActiveSheet.Paste
    Sheets("Info").Select
    ActiveWindow.SmallScroll Down:=-6
    Range("B3").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("Orders").Select
    Range("B735").Select
    ActiveSheet.Paste
End Sub

==================

たぶん、その質問には情報が多すぎますか?最も単純な形式では、セルの内容に基づいて行を選択し、マクロを介してこの行に情報を貼り付けるだけです。

==================

更新-これが「情報」シートのレイアウトです。すべての行が「注文」シートの列と一致するわけではないことに注意してください。

    A                             B                C

                          Invoice number:        1236

Peter 
Parker
12
Overflow Road
Stacktown
BB338J
0121 345 6789
0777 789 789
peter@spidermail.com

Order description:          Red widget
4

1 に答える 1

1

架空の住所いいね!

このコードをテストしましたが、動作します。Info適切なデータを取得するには、特にシートでセル参照を変更する必要がある場合があります。

つまり、シートから開始しInfo、関連データを変数に保存し、請求書番号を見つけてOrders、データを貼り付けます。

Sub InfoToOrders()
    Dim InvoiceNo As Long, FirstName As String, LastName As String, Description As String, Postcode As String, Email As String

    With Worksheets("Info")
        InvoiceNo = .Range("D1")
        FirstName = .Range("A3")
        LastName = .Range("A4")
        Description = .Range("B13")
        Postcode = .Range("A8")
        Email = .Range("A11")
    End With

    Dim InvoiceNumbers As Range, invoice As Range

    With Worksheets("Orders")

        Set InvoiceNumbers = .Range("A1:A" & .Range("A1").End(xlDown).Row)

        For Each invoice In InvoiceNumbers
            If invoice = InvoiceNo Then
                invoice.Offset(0, 1) = FirstName
                invoice.Offset(0, 2) = LastName
                invoice.Offset(0, 3) = Description
                invoice.Offset(0, 4) = Postcode
                invoice.Offset(0, 5) = Email
            End If
        Next invoice

    End With
End Sub
于 2013-03-08T18:09:49.610 に答える