アプリ版:「スタンプのみでお礼する」機能のリリースについて

以前も似たような質問したのですが、よくわからなくなってしまったのでまたお願いします。


A列 B列 C列
1052 1052 1033
1230 1033 1044
1335 1044
1560 1335
1650 1650

このように、「A列とB列を比較して、A列にない数字を、C列に上から順に揃えて抽出する」にはどのようにすればよいのでしょうか?
文字列は300行位になります。

バージョンは2002です。
VBはよくわからないので、簡単にできる方法があれば幸いです。

A 回答 (3件)

こんばんは



フィルタオプションでの操作例です

データ範囲がA1:B300まであるとして

  A列 B列 C列 D列
1 data1 data2 data2
2 1052 1052     式
3 1230 1033
4 1335 1044
5 1560 1335
6 1650 1650
:  : :
300  : :

式 セルD2に =COUNTIF($A$2:$A$300,B2)=0
・1行目に適当な項目名を記載
 C1(抽出場所に抽出対象:B列 と同様の項目名を記載
・A1:B300までを選択
・メニューのデータ フィルタ フィルタオプション
 抽出先 指定した範囲 にチェク
 リスト範囲 $A$1:$B$300
 検索条件範囲 $D$1:$D$2 ←D1は空白 D2が条件数式
 抽出範囲 $C$1

で試してみて下さい
    • good
    • 0
この回答へのお礼

おおおお!すばらしい!できました。
上手にいきました。ありがとうございます!!

お礼日時:2003/08/05 00:32

C1に=IF(ISERROR(MATCH(B1,$A$1:$A$310,0)),B1,"")


D1に=IF(ISERROR(MATCH(B1,$A$1:$A$310,0)),ROW(),"")
をいれB列最下行まで複写。A列データを310行と仮定。
B1:CXX(XXはB列最下行)を値のみ複写で値にする。
B1:CXXをD列で並べ替えする。
(サンプル)A1:B8。式は
=IF(ISERROR(MATCH(B1,$A$1:$A$8,0)),B1,"")
=IF(ISERROR(MATCH(B1,$A$1:$A$8,0)),ROW(),"")

10551033
10681053
10781078
10881099
10992000
20112002
20122011
20202013
(結果)C1:D5
10331
10532
20005
20026
20138
D列は消す。
    • good
    • 0

以前の質問の時に、どのような回答を頂いたのか分かりませんので、


重複していたらすみません。

頑張って書いてる内に#1さんの回答が入っていたので、
必要なければ、読み飛ばしてください。
(やばいなー 読み飛ばされそう!)

でも、頑張って書いたので見れたら見てね。

一応、思いつくのを3つ挙げてみました。
何を持って簡単とするかは、gilfffoさん次第ですが、
お勧めは、VBAです。(早い!)私の回答の中ではです。
VBはよくわからないようですが、一応VBAの方法も記述しましたので、他と比べてみてください。

1.手動にて(面倒!)さらに#1さんの方が簡単そう!
  (1)C1セルに
    =IF(COUNTIF($A$1:$A$300,B1)=0,B1,"")
    と入力しC300セルまでコピー
  (2)C列全体をコピーし、C列に値のみ貼り付け
  (3)「データ」→「並べ替え」で値を並べ替える

2.関数にて(必要行が増えると再計算に時間が掛かる!)
  (1)C1セルに
    =IF(SUM(IF((COUNTIF($A$1:$A$300,$B$1:$B$300)=0)*($B$1:$B$300),1,0))<ROW(A1),"",INDEX($B$1:$B$300,SMALL(IF(COUNTIF($A$1:$A$300,$B$1:$B$300)=0,ROW($B$1:$B$300),""),ROW(A1)),))
    と入力し、[Enter]の代わりに[Ctrl]+[Shift]+[Enter]を押す
  (2)必要行までコピー

3.VBAにて(若干の知識が必要!)
  (1)[Alt]+[F11]でVisial Basic Editerに移動する。
  (2)「挿入」→「標準モジュール」でモジュールを追加する。
  (3)右上の広い場所([General]と書いてある下)に
     以下のコードを貼り付ける。
     '----------この下から--------
Sub test()
  With Worksheets("Sheet1")
    .Range("c:c").ClearContents
    tbl = .Range("A1:C300").Value
    
    cnt = 0
    For i = 1 To UBound(tbl, 1)
      If (tbl(i, 2) <> "") Then
        flg = False
        For j = 1 To UBound(tbl, 1)
          If (tbl(j, 1) = tbl(i, 2)) Then
            flg = True
            Exit For
          End If
        Next j
        If (flg = False) Then
          cnt = cnt + 1
          tbl(cnt, 3) = tbl(i, 2)
        End If
      End If
    Next i
    .Range("A1:C300").Value = tbl
  End With
End Sub
     '----------この上まで--------
  (4)[Alt]+[F11]でEXCELに戻る
  (5)「ツール」→「マクロ」→「マクロ」
     から[Test]を選択して実行
  (「フォーム」のツールバーからボタンを選択してマクロを登録してもよい。)

分からない所やおかしい所があれば、補足してください。

長文失礼しました。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!