アプリ版:「スタンプのみでお礼する」機能のリリースについて

A-Book指定セルをB-BooK指定列で突合し
B-Bookの指定列の数値をA-Bookに転記するような事を考えてます。
可能でしょうか?(添付画像参照)

※B-Bookは開いている事を前提としております。
よろしくお願いいたします。

「別ブックから取得」の質問画像

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

  • ありがとうございます。

    >Aブックの『D~L列まであり』ってC列と同様にと言う事?
    そうです。

    Bブックのデータの①F列→②B列でソートしてAブックのB6からB23の値をBブックH列から探し転記
    したいのです。

    No.1の回答に寄せられた補足コメントです。 補足日時:2021/04/28 21:59
  • めぐみんさん、ありがとうございました。
    検証致しました。

    Bブックより抽出データの取得は出来ませんでした。
    Bブックは少し加工しましたが添付の通りです。

    「別ブックから取得」の補足画像2
      補足日時:2021/04/30 11:00
  • 実作業をマクロの記録でコードを書き出しました。


    Sub Macro1()

    Range("C2").Select 'Aブック
    Selection.Copy
    Application.WindowState = xlNormal
    Windows("当月対象.xlsx").Activate
    ActiveSheet.Range("$A$1:$O$31121").AutoFilter Field:=6, Criteria1:="121543029" ’Aブック_C2の値の場合。
    Windows("受渡書.xlsm").Activate
    Range("C5").Select ’C5:L5の場合を繰り返す
    Application.CutCopyMode = False
    Selection.Copy

    続く・・・

      補足日時:2021/04/30 14:36


  • Windows("当月対象.xlsx").Activate
    ActiveSheet.Range("$A$1:$O$31121").AutoFilter Field:=2, Criteria1:="1310300101" ’Aブック_C5の値の場合。
    Windows("受渡書.xlsm").Activate
    Range("B6").Select 'B6の値の場合。 B6:B23の場合をC5:L5まで順次抽出する。

    Application.CutCopyMode = False
    Selection.Copy

    続く・・・

      補足日時:2021/04/30 14:38
  • Windows("当月対象.xlsx").Activate
    ActiveSheet.Range("$A$1:$O$31121").AutoFilter Field:=8, Criteria1:="420" 'B6の値の場合。コピーしてC6に張付ける。
    Range("L19597").Select 
    Application.CutCopyMode = False
    Selection.Copy
    Windows("受渡書.xlsm").Activate
    Range("C6").Select ’対象はC6:L23
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks :=False, Transpose:=False
    End Sub

      補足日時:2021/04/30 14:39
  • Qchan1962様
    ありがとうございました。
    遅くなりましたが検証致しました。
    添付の赤字部分が取得出来ませんでした。
    又、
    >Windows("受渡書.xlsm").Activate
    >End Sub
    の部分ですがシート指定で作動を考えております。

    「別ブックから取得」の補足画像6
    No.5の回答に寄せられた補足コメントです。 補足日時:2021/05/06 09:01

A 回答 (7件)

未検証!ですけどね。



Sub megu()
Const wbB As String = "'[B-Book.xlsx]Sheet1'!" 'ブック名・拡張子・シート名は適宜修正

With Worksheets("Sheet1") 'A-Bookの書き出すシート名は適宜修正
With .Range("C6:L23")
.Formula = Join(Array("=SUMIFS(", "$L:$L,", "$H:$H,$B6,", "$F:$F,C$2,", "$B:$B,C$5)"), wbB)
.Value = .Value
End With
End With

End Sub
    • good
    • 1
この回答へのお礼

検証させて頂き作動を確認致しました。

>セルの絶対参照・相対参照の $ には触れていないですよね?
実際のsheetに置き換えをして変更してなかったのが原因でした。

度々のご回答に感謝致します。
ありがとうございました!

お礼日時:2021/05/06 17:02

あ、あとセルの絶対参照・相対参照の $ には触れていないですよね?



.Formula = Join(Array("=SUMIFS(", "$L:$L,", "$H:$H,$B6,", "$F:$F,C$2,", "$B:$B,C$5)"), wbB)

この中のものです。
結果としてどうなったのかは、

.Value = .Value

をコメントにして数式を表示させてみればわかりやすかったかも。
    • good
    • 1
この回答へのお礼

遅くなりましたが検証致しました。
サンプルではD2:L2まで空欄でしたので最初はC6:C23以外は「0」表示
でしたが、>.Value = .Value をコメントして数式表示をして修正いたしましたら全取得が出来ました。
ありがとうございました!

お礼日時:2021/05/06 09:09

No.4です。



No.3のコードを画像を基に作成したファイルで検証した所では問題なく抽出できました。
ブック名等を変更する際に ' [ ] ! などを消したとか(でもエラーになるかな?)、数値と数字の違いがあるとかそう言う類ではないのかなって感じます。
なので私の方では修正すべき箇所がわかりません。

ADODB使っても良いのですけど、大掛かりなコードになりそうですしね。
    • good
    • 1

こんばんは、


C2の次はD2・・・L2 こんな感じでキーは変わるので良いのでしょうか?
結構な行数がありますが、
データ作るのが良くわからず、未検証ですがどうでしょう。。
添付図のA-Bookを元にしています。シート名不明の為、インデックス1です。

Sub sample()
Dim mySh As Worksheet
Dim ary(), c As Range
Dim key1 As String, key2 As String
Dim i As Long, j As Long
Set mySh = ThisWorkbook.Worksheets(1)
Application.ScreenUpdating = False
For i = 1 To 10
key1 = mySh.Cells(2, i + 2).Value
key2 = mySh.Cells(5, i + 2).Value
Windows("当月対象.xlsx").Activate
With ActiveSheet
With .Range("A1:O31121")
.AutoFilter Field:=6, Criteria1:=key1
.AutoFilter Field:=2, Criteria1:=key2
End With
For Each c In .Range("H2:H" & .AutoFilter.Range(.AutoFilter.Range.Count).Row).SpecialCells(xlCellTypeVisible)
For j = 6 To mySh.Cells(Rows.Count, "B").End(xlUp).Row
If c.Value = mySh.Cells(j, "B").Value Then
ReDim Preserve ary(j - 6)
ary(j - 6) = c.Offset(, 4).Value
End If
Next j
Next c
.Range("A1:O31121").AutoFilter
End With
On Error Resume Next
mySh.Range("B6").Offset(, i).Resize(UBound(ary) + 1) = WorksheetFunction.Transpose(ary)
Erase ary
Next i
Application.ScreenUpdating = True
Windows("受渡書.xlsm").Activate
End Sub
この回答への補足あり
    • good
    • 1
この回答へのお礼

ご返答、遅くなりまして申し訳ございません。

>C2の次はD2・・・L2 こんな感じでキーは変わるので良いのでしょうか?
おっしゃる通りです。

6日まで検証できる環境ではないので後ほど検証させて頂きます。

楽しみです。
どうもありがとうございました。

お礼日時:2021/05/01 21:29

ブック名・シート名をどのように修正して検証されたのかが気になりますね。

    • good
    • 0
この回答へのお礼

お返事遅くなりました。
時間がなくて詳しく検証出来なかったのですがご指定の通りブック名シート名を変更したのですが、すべて「0」で表示されてしまいました。
6日まで検証できる環境ではないので後ほど・・・
ありがとうございました。

お礼日時:2021/05/01 21:21

B-BooKを上からナメていって、条件に合うものを見つけるだけなので、出来ないはずはないのですが、それすら出来ないってことですか?


それとも、そんなカッコ悪いコーディングは嫌なので、もっとスマートな書き方を教えて欲しいってことですか?
    • good
    • 0
この回答へのお礼

それすら出来ないですね。
すみません。

お礼日時:2021/04/28 21:42

Aブックの『D~L列まであり』ってC列と同様にと言う事?


特にB列の値は2行目・5行目の数値が変わったとしても変更はない?
Bブックがどうなっているのかが不明。
何となく数式でも行けそうな気もするけど?
SUMIFS関数とかで。(あ、VBA限定ではないのですかね。数式を埋め込んじゃえば。)
この回答への補足あり
    • good
    • 0

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