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

取り込み先ファイルの各シートの項目名(外注在庫)を検索して、検索した項目のデーターを元ファイルの各シートの項目名(外注)に転記するのですが、取り込み先ファイル項目(外注在庫)を検索するVBAコードが分からず苦慮しております。どなたかお分かりになる方ご教授願います。
※取り込み先ファイルの各シートの項目名(外注在庫)の列は決まっておらず検索してデーターを取得して、元ファイルのE列(外注)に転記する。
元ファイルのE列は固定です。

添付画像
画像上が、取り込み先ファイル
画像中が、元ファイル
画像下が、ユーザーフォーム

Private Sub CommandButton1_Click()
Dim fpath As String
Dim wb1 As Workbook, wb2 As Workbook
Dim sh As Worksheet
Dim r As Long
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Set wb1 = ThisWorkbook
fpath = wb1.Path & "\"
Set wb2 = Workbooks.Open(fpath & ComboBox1.Text)
For Each sh In wb2.Worksheets
With sh
r = wb1.Worksheets(sh.Name).Cells(Rows.Count, "E").End(xlUp).Row + 1
.Range("AN2:AN" & .Cells(Rows.Count, "AN").End(xlUp).Row).Copy
wb1.Worksheets(sh.Name).Range("E" & r).PasteSpecial Paste:=xlPasteValues
End With
Next sh
wb2.Close
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub

よろしくお願いいたします

「Excelにて、取り込み先ファイルの項目」の質問画像

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

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

    実行した所、コンパイルエラーとなってしまいます。
    (参照が不正または不完全)

    変更の仕方が悪いのか分かりません

    No.1の回答に寄せられた補足コメントです。 補足日時:2020/07/04 18:05
  • すみません
    コンパイルエラーは発生しないのですが、現在 ”外注在庫”データーが転記されず
    E列の外注のデーターが転記されています。
    Private Sub CommandButton1_Click()
    Dim fpath As String
    Dim wb1 As Workbook, wb2 As Workbook
    Dim sh As Worksheet
    Dim r As Long
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    Set wb1 = ThisWorkbook
    fpath = wb1.Path & "\"
    Set wb2 = Workbooks.Open(fpath & ComboBox1.Text)
    For Each sh In wb2.Worksheets
    以下は次に

    No.2の回答に寄せられた補足コメントです。 補足日時:2020/07/04 19:08
  • With sh
    r = wb1.Worksheets(sh.Name).Cells(Rows.Count, "E").End(xlUp).Row + 1
    With .Columns(WorksheetFunction.Match("?O?????", .Rows(1)))
    Range(.Rows(2), .Rows(Rows.Count).End(xlUp)).Copy
    End With
    wb1.Worksheets(sh.Name).Range("E" & r).PasteSpecial Paste:=xlPasteValues
    End With
    Next sh
    wb2.Close
    Application.ScreenUpdating = True
    Application.DisplayAlerts = True

    End Sub

      補足日時:2020/07/04 19:13
  • お忙しい中 対応して頂きありがとうございます。
    状況ですが、
    With .Columns(WorksheetFunction.Match("外注在庫", .Rows(1), 0))へ変更し実行した所
    変更したところで、実行時エラーが出ます。データーは取り込み先ファイルから元ファイルに
    転記されていますが、変更したところでエラーになっているようなのですが、分かりません。
    画像添付します

    お手数をお掛けてすみません

    「Excelにて、取り込み先ファイルの項目」の補足画像4
    No.3の回答に寄せられた補足コメントです。 補足日時:2020/07/05 05:44
  • 忙しい中対応して頂きあ誠にありがとうございます。
    もう一度、別の新しい取り込み用ファイルで、確認した所動作がokとなりました。
    すみません確認不足で貴重な時間を使わせてしまいました。
    ちなみに前のファイルを使用するとダメでした。
    親切丁寧にアドバイス頂きありがとうございました。

    No.4の回答に寄せられた補足コメントです。 補足日時:2020/07/05 16:09

A 回答 (4件)

Copyしている行を次のように変更すれば、行けると思うのですが・・・。



With .Columns(WorksheetFunction.Match("外注在庫", .Rows(1)))
Range(.Rows(2), .Rows(Rows.Count).End(xlUp)).Copy
End With

ただですね、外注在庫って、数式で求めていませんか?
その場合、End(xlUp)は、求めたい最終行を返してくれませんよ。
最終列を求めたいのであれば、「部品」等の列で判断した方が良いような気がします。
この回答への補足あり
    • good
    • 1

コンパイルエラーですか?そんな要素、無いような気がするのですが・・・。


全コードを補足にアップできますか?
この回答への補足あり
    • good
    • 0

With .Columns(WorksheetFunction.Match("外注在庫", .Rows(1)))



上記の行を下記のように修正してみて下さい。

With .Columns(WorksheetFunction.Match("外注在庫", .Rows(1)、0))

もしこれでエラーになるようであれば、転記元の1行目に、"外注在庫"の文字列が無いはずです。念のため、入力されている文字列を確認してみて下さい。
この回答への補足あり
    • good
    • 1

Match関数はご存知ですよね?検索範囲の中から検索値を検索して、その位置を返してくれる関数です。


今回追加していただいた第3パラメータは「照合の型」で、0を指定すると検査値に一致する値のみが検索の対象となります。なお、一致するものが無かった場合、エラーとなります。
今回のエラーの原因は、これだと思います。取り込み先ブックのすべてのシートに、”外注在庫”があることを確認してください。

「”外注在庫”の列が無いシートもある」なんて落ちは、勘弁してくださいね。

ちなみに、「照合の型」を省略した場合は、検査値以下の最大の値が検索されます。
前回、E列(外注)の値が転記されたのは、これが原因と思われます。
この回答への補足あり
    • good
    • 1
この回答へのお礼

本当にありがとうございました。
丁寧な対応に感謝しております。
ありがとうございました。

お礼日時:2020/07/05 16:12

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