[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『条件一致したら転記する際に、複数列まとめて転記するには』(マクロくん)
初めまして。
マクロ初心者で手探りで勉強中です。
要約の件、分かる方がいらっしゃいましたら教えてください。
<単価表シート>
商品 産地 単価 メモ いちご 栃木 100 OK いちご 福岡 150 NG いちご 熊本 200 〇 いちご 静岡 200 × メロン 茨城 100 OK メロン 熊本 200 ▽ メロン 青森 250 ▲ メロン 静岡 300
<抽出シート>
商品 産地 単価 メモ メロン 静岡 いちご 福岡 メロン 青森 いちご 栃木 いちご 栃木
抽出シートの商品と産地が単価表シートと一致したら、
抽出シートの単価列とメモ列に単価表シートの内容を転記するマクロまではわかりました。
今回やりたいことは、メモ欄が例えばメモ1, メモ2…, メモ100まであったとした時、
下記マクロだとメモを転記するのに100列分コードを用意することになります。
ここを100個用意。
Chusyutu_Sht.Cells(i, 3) = MyList(j, 3)
Chusyutu_Sht.Cells(i, 4) = MyList(j, 4)
何か一度に複数列転記する方法はありますか?
Chusyutu_Sht.Cells(i, 3) = MyList(j, 3).Resize(,100)とするとエラーになってしまいます。
Dim Chusyutu_Sht As Worksheet
Dim Tanka_Sht As Worksheet
Dim MyList() As Variant
Dim LastRow As Long
Dim i As Long
Dim j As Long
Set Chusyutu_Sht = Sheets("抽出") Set Tanka_Sht = Sheets("単価表") '「単価表」シート A列〜D列のデータを配列に格納 Tanka_Sht.Select MyList = Tanka_Sht.Range("A2", Range("A" & Rows.Count). _ End(xlUp)).Resize(, 4).Value LastRow = Chusyutu_Sht.Cells(Rows.Count, 1).End(xlUp).Row For i = 1 To LastRow For j = 1 To UBound(MyList) '複数条件一致で別シート転記 If Chusyutu_Sht.Cells(i, 1) = MyList(j, 1) And _ Chusyutu_Sht.Cells(i, 2) = MyList(j, 2) Then
Chusyutu_Sht.Cells(i, 3) = MyList(j, 3) Chusyutu_Sht.Cells(i, 4) = MyList(j, 4) End If Next j Next End Sub
よろしくお願いします。
< 使用 Excel:Microsoft365、使用 OS:Windows10 >
今回はマクロで考えたいので、引き続き何か良い方法あればよろしくお願いします。
(マクロくん) 2023/03/05(日) 17:10:25
もうひとつループしてみては。
For k = 3 To UBound(MyList, 2) Chusyutu_Sht.Cells(i, k) = MyList(j, k) Next (缶ピー) 2023/03/05(日) 17:44:12
Sub test() Dim Chusyutu_Sht As Worksheet, Tanka_Sht As Worksheet Dim LastR As Long Set Chusyutu_Sht = Worksheets("抽出") Set Tanka_Sht = Worksheets("単価表") With Tanka_Sht .Range("E1") = "作業列" .Range("E2", .Cells(.Cells(Rows.Count, 1).End(xlUp).Row, "E")).Formula = "=A2&B2" End With With Chusyutu_Sht LastR = .Cells(Rows.Count, 1).End(xlUp).Row .Range("C2").Resize(LastR - 1).Formula = "=INDEX(単価表!C:C,MATCH($A2&$B2,単価表!$E:$E,0))" .Range("D2").Resize(LastR - 1).Formula = "=INDEX(単価表!D:D,MATCH($A2&$B2,単価表!$E:$E,0))" .Range("C2").Resize(LastR - 1, 2).Value = .Range("C2").Resize(LastR - 1, 2).Value End With Tanka_Sht.Range("E:E").Delete End Sub (フォーキー) 2023/03/05(日) 17:53:52
For k = 3 To UBound(MyList, 2) Chusyutu_Sht.Cells(i, k) = MyList(j, k) Next
フォーキー様
ありがとうございます。
このようなやり方もあるのですね。
関数埋め込むと便利ですね。
範囲指定の方法もいろいろ参考になりました。
(くるみ) 2023/03/05(日) 18:44:29
Chusyutu_Sht.Cells(i, 3) = MyList(j, 3) Chusyutu_Sht.Cells(i, 4) = MyList(j, 4)
上記部分を置き換えです。 メモ欄が張り付かないのは、配列の大きさを変更していないのでは? (.Resize(, 4)のまま。) コード全部を見直すつもりはありませんので、ご自身で対応お願いします。
あと、ニックネーム直し忘れてますよ。 (缶ピー) 2023/03/05(日) 19:28:32
別の質問で投稿させて頂いた時にニックネーム変えた方がいいかと思って変えたらそのままになっていました。
(そちらの方でも缶ピー様に回答頂いたようで、大変ありがとうございます。)
(マクロくん) 2023/03/05(日) 20:30:52
>の質問で投稿させて頂いた時にニックネーム変えた方がいいかと思って
いやぁーあの手この手と色々考えますね。 今回はバレて残念。 (残念) 2023/03/05(日) 21:00:46
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.