こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

Excel2007でセル範囲の数字記号を利用して

(1)、(E6:M6)の各セルに0~9のいずれかがランダムにはいります(同じ数字が2個、3個と重複したりもします)。

(2)、(1)と同様に(N6:V6)にもランダムに数字がはいります。

(3)、(1)の(E6:M6)の数字を利用して(2)の(N6:V6)の中の同じ数字を消し、
消えずに残った数字をG19から右に表したいです。

※例
(E6:M6)に5が何個入ってても(N6:V6)に入ってる5が全部消える。

(E6:M6)に4が1個入ってても(N6:V6)に何個も入ってる4が全部消える。

と、マクロボタンで処理する形にしたいです。
よろしくお願いいたします。

投稿日時 - 2019-06-17 15:48:51

QNo.9626708

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(8)

ANo.8

>Andの次の下線「_」←は、いりますか?無しならエラーなしにいきます。
参考に
長いコードを複数行に分けて記述する
http://plus1excel.web.fc2.com/learning/l301/t810.html

投稿日時 - 2019-06-20 20:02:53

ANo.7

>Andの次の下線「_」←は、いりますか?無しならエラーなしにいきます。
一行で書くと長くなるので改行する行の行末に「_」を記述しています
「_」の直前には半角スペースが必要です。
もちろん改行しなくても大丈夫です。
If IsError(Application.Match(c.Value, Range("E6:M6"), 0)) And IsError(Application.Match(c.Value, Range("G19:O19"), 0)) Then

投稿日時 - 2019-06-20 06:47:18

お礼

ありがとうございました。

投稿日時 - 2019-06-23 08:33:59

ANo.6

Match関数に代わりCountIf関数を使ってみました。
Sub Test3()
  Dim c As Range, i As Long
  i = 16
  Range("P10:X10").ClearContents
  For Each c In Range("N6:V6")
    If Application.CountIf(Range("E6:M6"), c.Value) = 0 And _
      Application.CountIf(Range("P10:X10"), c.Value) = 0 Then
      Cells(10, i).Value = c.Value
      i = i + 1
    End If
  Next
End Sub

投稿日時 - 2019-06-19 23:11:14

ANo.5

>で合ってますかね?
>IsError(Application.Match(c.Value, Range("P10:X10").0)) Then
                カンマに訂正⇒ , 0)) Then

投稿日時 - 2019-06-19 23:02:58

お礼

Andの次の下線「_」←は、いりますか?無しならエラーなしにいきます。

投稿日時 - 2019-06-19 23:18:59

ANo.4

>G19から右には重複無しにしたいです。
そうでしたね。m(_ _)m
Sub Test2()
  Dim c As Range, i As Long
  i = 7
  Range("G19:O19").ClearContents
  For Each c In Range("N6:V6")
    If IsError(Application.Match(c.Value, Range("E6:M6"), 0)) And _
      IsError(Application.Match(c.Value, Range("G19:O19"), 0)) Then
      Cells(19, i).Value = c.Value
      i = i + 1
    End If
  Next
End Sub

投稿日時 - 2019-06-19 21:31:11

補足

後、If IsError(Application.Match(c.Value, Range("E6:M6"), 0)) And _
のところがエラーになります。thenかgo toに、と。

投稿日時 - 2019-06-19 22:52:19

お礼

あの、すみません。G19のところをP10に変えると
Sub Test2()
  Dim c As Range, i As Long
  i = 16
  Range("P10:X10").ClearContents
  For Each c In Range("N6:V6")
    If IsError(Application.Match(c.Value, Range("E6:M6"), 0)) And _
      IsError(Application.Match(c.Value, Range("P10:X10").0)) Then
      Cells(10, i).Value = c.Value
      i = i + 1
    End If
  Next
End Sub
で合ってますかね?

投稿日時 - 2019-06-19 22:26:43

ANo.3

>(N6:V6)の中が消えずにすることはできますか?
Sub Test()
  Dim c As Range, i As Long
  i = 5
  For Each c In Range("N6:V6")
    If IsError(Application.Match(c.Value, Range("E6:M6"), 0)) Then
      Cells(19, i).Value = c.Value
      i = i + 1
    End If
  Next
End Sub

投稿日時 - 2019-06-18 08:03:25

補足

残りの数字が重複しててもG19からペイストするときは1つだけという形なんですが。

投稿日時 - 2019-06-19 20:13:04

お礼

こんにちはwatabe007さん。
消されずに残った数字が重複してる場合があり、それを1つにしてG19から右に出すのはどうしたらよろしいですか?G19から右には重複無しにしたいです。

投稿日時 - 2019-06-19 17:58:40

ANo.2

私のようなマクロ音痴向けの別解です。

範囲 W6:AE6 を作業範囲として使用します。
式 =IF(COUNTIF($E$6:$M$6,N6),"",N6) を入力したセル W6 を右方にズズーッと(AE列まで)オートフィル
次式を入力したセル G19 を右方にズズーッと(O列まで)オートフィル
=IFERROR(INDEX(6:6,SMALL(IF($W6:$AE6<>"",COLUMN($W6:$AE6)),COLUMN(A1))),"")
【お断り】上式は必ず配列数式として入力のこと

投稿日時 - 2019-06-17 22:41:04

お礼

こんばんはmsMikeさん。多様性があって勉強になります。私なんてどっちも音痴です。アイデアだけ浮かんで説明が上手く行かないのがほとんどです。(笑)
協力ありがとうございました。

投稿日時 - 2019-06-18 01:24:22

ANo.1

こんにちは、参考に
Sub Test()
  Dim c As Range
  With Range("N6:V6")
    For Each c In Range("E6:M6")
      .Replace What:=c.Value, Replacement:="", LookAt:=xlWhole
    Next
    If Application.CountA(.Cells) <> 0 Then
      .SpecialCells(xlCellTypeConstants).Copy Range("G19")
    End If
  End With
End Sub

投稿日時 - 2019-06-17 16:38:30

お礼

こんばんはwatabe007さん。お久しぶりです。解答ありがとうございます。(N6:V6)の中が消えずにすることはできますか?

投稿日時 - 2019-06-18 01:18:58

あなたにオススメの質問