プロが教える店舗&オフィスのセキュリティ対策術

Excelにて、別ファイルからデーター(在庫数)を転記するのですが、転記先のデーター(在庫数)と合計したいのです、可能でしょうか
可能でしたらご教授願います。

<説明>
Aファイル=転記元
Bファイル=転記先
データー = 在庫数

Aファイルからデーター(在庫数)をBファイルのセルへ転記します(在庫数は、-1などのーのついた数字もあり)転記先のセルはH2:AM100の範囲です。Bファイルのセルに入力してあるデーター(在庫数)とAファイルから転記された(在庫数)を合計したいのですが、どうすれば合計出来るのか分からず困っています。もしシートモジュールにマクロをいれてできるのであれば、どのようなコードを
入れたらよいのかご教授願います。

また、現在 シートモジュールに下記が入力されています
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Target.Address = "$A$1" Then
UserForm3.Show vbModeless
ElseIf Target.Address = "$B$1" Then
UserForm6.Show vbModeless
End If
Cancel = True
End Sub

説明が下手ですみません
ご教授願います。

質問者からの補足コメント

  • ありがとうございます。
    >転記先範囲は分かりますが、在庫数のあるセル範囲、出力先、転記された範囲との参照関係が解りません。
    ⇒在庫数のある範囲は、転記先範囲と同じです。セルには全てにデーターが入つてはいません
    データー転記先セルのデーターに転記データーを合計したい(データー転記先が50で、転記データー50であれば100としたい)
    >また、転記された時に一度にすべての範囲で実行するのか、在庫数を変更した時に合計するのかもわかりません。
    ⇒転記されたときに手合計されるのであれば全ての範囲でも、転記箇所のみでもかまいません
    >何かシートモジュールにこだわる理由が御有りなのでしょうか。
    ⇒シートモジュールにこだわりはありません

    No.1の回答に寄せられた補足コメントです。 補足日時:2021/02/10 22:55
  • >ダブルクリックをトリガーにするのであれば、都度なのでしょうか?
    ⇒説明が下手ですみません こだわりはありません
    合計をする時に都度転記する必要があるのかも不明ではないかと思います。
    >転記先の範囲に転記元と既にある値の合計を書き込むのであれば、
    現状の値を関数などで算出している場合、関数は値になってしまいますね。
    ⇒現状、転記先のセルデーターに転記データーを上書きしてしまうのを合計した
    データーにしたいのですが、関数でできるものなのかマクロで出来るものなのか
    分からず、分かりにくい説明となってしまいました。
    すみません

      補足日時:2021/02/10 22:56
  • 遅くまで対応して頂きありがとうございます
    説明があいまいですみません
    したいことは、現在、Aファイルのマクロで、Bファイルの("H2:AM100")の範囲の中のセルにデーターを転記します。
    転記先のセルは("H2:AM100")の範囲で、その都度H2,I5,I6の様に複数のセルに転記します。
    そして、転記したセルだけを対象に合計したいです。
    Bファイルは、Aファイルから転記されたセルの箇所を合計するようにしたです。
    Bファイルのシート数は、決まってなく1~5の間です。シート名もまちまちです。

    Aファイルのコードです。分割します
    Sub 転記()

    No.3の回答に寄せられた補足コメントです。 補足日時:2021/02/11 06:34
  • Sub 転記()
    Dim myPath As String, fN As String
    Dim wB As Workbook, wS As Worksheet
    Dim i As Long, k As Long
    Dim c As Range, myCol As Long
    Dim FoundCell As Range, FirstCell As Range
    Dim myAry
    myPath = ThisWorkbook.Path & "\"
    fN = ComboBox2.Value
    Workbooks.Open myPath & fN
    Set wB = ActiveWorkbook
    With ThisWorkbook.Worksheets("データーリスト")
    For i = 2 To .Cells(Rows.Count, "H").End(xlUp).Row

      補足日時:2021/02/11 06:41
  • If .Cells(i, "H") <> "" Then
    For k = 1 To wB.Worksheets.Count
    Set wS = wB.Worksheets(k)
    Set c = wS.Rows(1).Find(What:=ComboBox1.Value, LookIn:=xlValues, Lookat:=xlWhole)
    If Not c Is Nothing Then
    myCol = c.Column
    Set FoundCell = wS.Range("A:A").Find(What:=.Cells(i, "H"), LookIn:=xlValues, Lookat:=xlWhole)
    If Not FoundCell Is Nothing Then
    Set FirstCell = FoundCell
    GoTo 処理
    Do

      補足日時:2021/02/11 06:47
  • Set FoundCell = wS.Range("A:A").FindNext(After:=FoundCell)
    If FoundCell.Address = FirstCell.Address Then Exit Do
    処理: wS.Cells(FoundCell.Row, myCol) = .Cells(i, "I")
    Loop
    End If
    End If
    Next k
    End If
    Next i
    End With
    'MsgBox "完了"
    End Sub

    以上です

      補足日時:2021/02/11 06:49

A 回答 (4件)

こんばんは、


ご掲示のコードを改造して対象に転記する時に既存データにプラスすると言う事であれば、
処理部分 wS.Cells(FoundCell.Row, myCol) = .Cells(i, "I")

wS.Cells(FoundCell.Row, myCol) = _
wS.Cells(FoundCell.Row, myCol) + .Cells(i, "I")
とすれば良いように思います。

範囲は、ComboBox1の値と1行目項目の一致するカラムと
H列の値とA列行方向の一致する行を検索して、同じ行の該当カラムにI列同じ行の値を代入しているように思います。

この範囲を("H2:AM100")に限定すると言う事でしょうか?
ComboBox1の値で調整できそうですが、どうでしょう。
    • good
    • 0
この回答へのお礼

ありがとうございます

wS.Cells(FoundCell.Row, myCol) = _
wS.Cells(FoundCell.Row, myCol) + .Cells(i, "I")

使わせていただきます。

親切に、回答頂きありがとうございました。
感謝いたします

お礼日時:2021/02/11 21:33

#1です


転記先、元のシート名を聞いていませんでしたね。
双方のシートはインデックス1としてのサンプルですが、
汎用性はありませんので、直してください。

2つのファイルは開いているものとします。
マクロはBファイル=転記先に書かれているとします。
転記元の拡張子は仮に.xlsxとしています。
対象シートは共にインデックス1です。

VBAで書き替えられた値は戻せませんので、コピーファイルなどで検証して必要に応じ変更を加えるようにしてください。

ざっくりとしか検証していませんのと、解釈が違っているかも知れませんので、あくまでデバッグ用サンプルです。

Dim i As Long, j As Long
Dim sorAry, trgAry, ansAry()
ReDim ansAry(98, 32)
Application.ScreenUpdating = False
Windows("Aファイル.xlsx").Activate
sorAry = Sheets(1).Range("H2:AM100")
ThisWorkbook.Activate
trgAry = Sheets(1).Range("H2:AM100")
For i = 1 To UBound(sorAry, 1)
For j = 1 To UBound(sorAry, 2)
ansAry(i - 1, j - 1) = sorAry(i, j) + trgAry(i, j)
Next j
Next i
ThisWorkbook.Sheets(1).Range("H2:AM100") = ansAry
Application.ScreenUpdating = True
この回答への補足あり
    • good
    • 0

転記元のシートを丸ごとコピーして、転記先にペースト。


ペーストする際、「形式を選択して貼り付け」で「加算」を選択してペーストすれば、うまく行っちゃうかもです。
    • good
    • 1

こんばんは、回答ではありません。


転記先範囲は分かりますが、在庫数のあるセル範囲、出力先、転記された範囲との参照関係が解りません。
また、転記された時に一度にすべての範囲で実行するのか、在庫数を変更した時に合計するのかもわかりません。

何かシートモジュールにこだわる理由が御有りなのでしょうか。
ダブルクリックをトリガーにするのであれば、都度なのでしょうか?
合計をする時に都度転記する必要があるのかも不明ではないかと思います。

転記先の範囲に転記元と既にある値の合計を書き込むのであれば、
現状の値を関数などで算出している場合、関数は値になってしまいますね。
この回答への補足あり
    • good
    • 0
この回答へのお礼

ありがとうございます。
説明が下手ですみません

お礼日時:2021/02/10 22:57

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!