[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『条件一致したら転記する際に、複数列まとめて転記するには』(マクロくん)
初めまして。
マクロ初心者で手探りで勉強中です。
要約の件、分かる方がいらっしゃいましたら教えてください。
<単価表シート>
商品 産地 単価 メモ いちご 栃木 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.