エクセル | の学校 |
8.一覧 | 9.HOME |
1.Top | 2.Last |
『範囲内で不一致を検索する』(さん)
A列に番号が入力されていて、B列に行先が入力されています。 B列を検索し、違う行先が含まれていた場合A列の番号をメッセージボックスに表示をさせるマクロを作成したいのですが、何を使用し検索をしたらベストなのか分からず、ご教授いただけないでしょうか。
A B 123 東京A 345 東京A 126 東京B 115 東京A
この場合3行目の126をメッセージボックス表示させるイメージです。
< 使用 Excel:Excel2010、使用 OS:Windows10 >
1.ループと条件分岐の組み合わせ。。。^^;
一案です。m(__)m (隠居Z) 2024/04/22(月) 11:15:26
ご回答ありがとうございます。 ループをあまり使用したことがないのですが、例えばB列に東京Bや東京Cが複数あっても有効的ですか? (さん) 2024/04/22(月) 11:45:37
条件付き書式案
●適用先 =$A$1:$A$4
●数式 =COUNTIF($B$1:$B$4,$B1)=1
(通りすがり) 2024/04/22(月) 11:59:21
B列は可変となり、作業するたびに同列へ追加されていきます。(作業は1日に何回も行います) その都度の最初の行先を基準としたい為、条件付き書式では私の知識では難しく感じます・・・
例:作業開始が東京Bの時は東京Aや東京Cが混ざってしまっていたらメッセージボックスに表示 (検索範囲は新しく追加した番号のみ。という感じです。)
(さん) 2024/04/22(月) 14:44:59
>「作業開始が東京X」とありますが、これがよく分かりません。 これを、B1を基準(B1と相違するものを抽出)とするということであれば、
●適用先 =$A$1:$A$100 仮に100行としているので適当に変更してください。
●数式 =AND($B1<>"",$B1<>$B$1)
とか。
(通りすがり) 2024/04/22(月) 16:14:37
基準がB1となる訳ではありません。
1回目の基準がB1であれば、Aの作業番号数が30になった場合、次の作業での基準がB31になり番号数が10であれば、そのまた次の作業の基準はB41になります。(作業ごとに最終行を取得し、どんどん追加されるようになっています)
作業番号数も固定ではなく都度変わります。最終的にB列には様々な行先の一覧になりますが、 作業回数毎に行先混載がないかチェックをしたいです。
Sheet1 該当する番号読み込み Sheet2 元データ一覧 Sheet3 番号及び行先一覧控え
Sheet3 1回目→基準B1、番号数30 2回目→基準B31、番号数10 3回目→基準B41、番号数17 4回目→基準B58、番号数・・・
(さん) 2024/04/22(月) 16:46:49
要求仕様が全く違っていたようです。なので私の投稿は無視してください。 他の方からの回答をお待ちください。
(通りすがり) 2024/04/22(月) 16:52:12
例えば、
ブックを開いたら、すぐ入力作業を開始。 入力が終了したら「確認」ボタンをクリックして 不一致がないか確認する。
ということなら、 ブックを開いたときに、A列の最終行を取得して 変数かどこかのセルに格納しておく。 「確認」ボタンがクリックされたら、 格納された最終行の次の行の値を基準に不一致がないか調べる。 方法としてはループして不一致の値を文字列変数に追加していく。 それをMsgboxで表示する、 確認後に、最終行を変数かセルに格納しておく。 というようなコーディングになります。
回答するには、 とりあえず明確な仕様が必要です。 (hatena) 2024/04/22(月) 18:08:30
せっかくご回答いただけましたのに、私の説明不足で申し訳ございませんでした。
hatena 様
作業の流れは下記の通りです。
1,朝ブックを開く。(Sheet2の元データ一覧は全て条件付き書式により色付けされています。) 2,梱包セットが出来たらSheet1へ番号入力。マクロによりSheet2の元データ一覧の色を消込。 3,2の繰り返し 4,Sheet2の色が全て消えたら作業完了。
下記のマクロの中で行先のチェックを追加したいです。 行先はSheet2のC列にあります。
Sub 反映()
Dim sws, dws, kbws As Worksheet Dim row5, row6, row7 As Long Dim i, txt As Long
Application.ScreenUpdating = False
Set sws = Worksheets("Sheet1")'番号入力シート Set dws = Worksheets("Sheet2")'元データ一覧 Set kbws = Worksheets("Sheet3")'控えシート
row5 = sws.Cells(Rows.Count, "B").End(xlUp).Row 'Sheet1の最終行取得 row6 = dws.Cells(Rows.Count, "A").End(xlUp).Row 'Sheet2の最終行取得
If row5 <> 1 Then For i = 2 To row5 txt = sws.Range("B" & i) '検索番号格納
matchAns = 0 dws.Select
matchAns = WorksheetFunction.Match(txt, dws.Range("W2:W" & row6), 0) '検索
If matchAns <> 0 Then '一致した場合 dws.Range("Y" & matchAns + 1) = 1 'Yの欄に「1」を入力 row7 = kbws.Range("A" & Rows.Count).End(xlUp).Row dws.Range("W" & matchAns + 1).Copy kbws.Range("A" & row7 + 1)’番号控え dws.Range("C" & matchAns + 1).Copy kbws.Range("B" & row7 + 1) ’行先控え
ElseIf Err.Number <> 0 Then
Err.Number = 0 'エラー値初期化 MsgBox txt & "の該当ありませんでした。" End If
Next End If Application.ScreenUpdating = True End Sub (さん) 2024/04/23(火) 13:36:12
]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.