[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『エクセルマクロで複数条件での検索方法 2』(もみじ坂)
先日大変お世話になりました。
教えていただいたコードが大活躍で大変助かりました。
使用しているうちにもう一つの条件を追加したいのですが。
うまくいきませんでした
原因がわかりましたら教えてください。よろしくお願いします。
【検索】
[A] [B] [C] [D] [2] 028963 「3」 NO 商品名前 サイズ 価格 「4」 A01 人参 L 401 「5」 A03 トマト 特 503
【list】
[C] [D] [E] [f] [g [h] [i] [j] [k] [l] [m] [n] [o]
サイズ 価格2 027021 027638 028023 028963 033732 A01 人参 L 501 101 201 301 401 A02 きゅうり M 502 102 202 302 402 A03 トマト 特 503 103 203 303 A04 なす N 504 104 204 304 404
コード
Dim リスト As Range '価格セル範囲 Dim 会社コード As Range '会社コードセル範囲 Dim 商品コード As Range '商品コードセル範囲 Dim 商品行 '商品コード検索結果(行) Dim 会社列 '会社コード検索結果(列) Dim r As Long Set リスト = Worksheets("list").Range("L3:CZ500") Set 会社コード = リスト.Rows(1).Offset(-1) Set 商品コード = リスト.Columns(1).Offset(, -10) With Worksheets("検索") For r = 4 To 38 商品行 = Application.Match(.Cells(r, "A"), 商品コード, 0) 会社列 = Application.Match(.Cells(2, 1), 会社コード, 0)
’=======★追加条件の部分=======
’★検索結果が空欄の時リストシートの11行目の価格を引っ張ってくる
’★検索結果ある時は会社別価格を引っ張ってくる
If IsNumeric(商品行) And IsNumeric(会社列)="" Then .Cells(r, "D").Value = リスト.Cells(商品行, "K").Value ' 価格 Else .Cells(r, "D").Value = リスト.Cells(商品行, 会社列).Value’会社別価格
End If Next End With
’======追加条件2======
’検索シート M5 に ’特取’がある場合
’検索シートの最終行 +1 に 特取と記載する
IF Worksheets("検索").Range("M5")="特取" Then
i = Worksheets("検索").Cells(Rows.Count, 1).End(xlUp).Row
Worksheets("検索").Cells(i, "A").Value = "000"
Worksheets("検索").Cells(i, "B").Value = "特取" End If
コードの考え方がずれているんでしょうかすみません ≧≦
実行したところ
「形が一致しませんと。。。。。」
< 使用 Excel:Excel2010、使用 OS:Windows7 >
if文のところは、 1)商品コードが見つかったかどうか 2)会社コードがみつかったかどうか の2段階で評価するとよいです。
また★の行もを修正する必要があります。
>リスト.Cells(商品行, "K").Value は、リスト内の相対的な位置なので
リスト.Cells(商品行, "A").Value とします。
Sub 計算() Dim リスト As Range '価格セル範囲 Dim 会社コード As Range '会社コードセル範囲 Dim 商品コード As Range '商品コードセル範囲 Dim 商品行 '商品コード検索結果(行) Dim 会社列 '会社コード検索結果(列) Dim r As Long Set リスト = Worksheets("list").Range("K3:CZ500") '★ Set 会社コード = リスト.Rows(1).Offset(-1) Set 商品コード = リスト.Columns(1).Offset(, -9) '★ With Worksheets("検索") For r = 4 To 38 商品行 = Application.Match(.Cells(r, "A"), 商品コード, 0) 会社列 = Application.Match(.Cells(2, "A"), 会社コード, 0) If IsNumeric(商品行) Then If IsNumeric(会社列) Then .Cells(r, "D").Value = リスト.Cells(商品行, 会社列).Value Else .Cells(r, "D").Value = リスト.Cells(商品行, "A").Value End If Else .Cells(r, "D").Value = "未登録" End If End If Next End With
End Sub
(マナ) 2014/08/03(日) 11:59
度々ありがとうございます。
お陰様で今回も無事に欲しい結果を得ることができました
大変勉強になりました。
また何かありましたらよろしくお願いします。
商品行 = Application.Match(.Cells(r, "A"), 商品コード, 0)
会社列 = Application.Match(.Cells(2, "A"), 会社コード, 0)
★IF関数の場合 すべて 条件を 入れてから 最後に欲しい結果を入力すれば うまくいくんですね 感激で本当に大変助かりました。 ゚・:,。☆Uo・ェ・oU/~♪了└|力"├ テ"ス ♪~\Uo・ェ・oU ☆,。・:・゚
If IsNumeric(商品行) Then If IsNumeric(会社列) Then
If リスト.Cells(商品行, 会社列).Value = "" Then .Cells(r, "D").Value = リスト.Cells(商品行, 1).Value '範囲がRange("K3:CZ500") のため K=1列目 Else .Cells(r, "D").Value = リスト.Cells(商品行, 会社列).Value End If End If Else .Cells(r, "D").Value = "未登録"
End If Next
If .Range("M5") = "特取" Then i = .Cells(Rows.Count, 1).End(xlUp).Row + 1 .Cells(i, "A").Value = "000" .Cells(i, "B").Value = "特取" End If
>追加条件2のほうは、突然請求書シートがでてきてよくわかりません。
はすみません コピペ―で 使用していたので そのままついてきちゃいました (*´ノД`)
(もみじ坂) 2014/08/03(日) 13:43
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.