『範囲内で不一致を検索する』(さん)
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.