プロが教えるわが家の防犯対策術!

はじめまして。vbaや関数などで
a列 b列..c列  ... 
01  △ 02  △ 05 △
といったexcelデータで空白の列があります。
それを重複を含む一覧よりマッチチングしたら
フラグを立てたいのです
1:nです。
関数でcontif,vbaでやってみましたがうまくいきません。
初心者ですみませんが誰がおしえていただけないでしょうか?
よろしくお願いします。

A 回答 (5件)

[Sheet1]


  A  B  C  D  E ・・・ Z  AA
1 01  05     06     ・・・ 09  TRUE

[Sheet2]
  A  B  C  D  E ・・・ Z
1 01  01  01     02 ・・・
2 01  05     01     ・・・ 09
3 01  05     06     ・・・ 09
4 01  01  01     02 ・・・

の状態を想定します。

Sheet1のAA1にユーザー定義関数をセットします。式は、
AA1: =fn_HaniHikaku(A1:Z1,Sheet2!A1:Z4)

最初の解答とが違い、ユーザー定義関数で指定範囲全てを調べています。
第1引数と第2引数の列数は同じとしています。
第1引数は調べる元のセル範囲、第2引数は一覧のセル範囲。見つからなければFalseが表示されます。


下のユーザー定義関数は標準モジュールに貼り付けます。


Function fn_HaniHikaku(Rng1 As Range, Rng2 As Range)
  Dim rg As Range     '// セル
  Dim rw As Long     '// 行カウンタ
  Dim col As Integer   '// 列カウンタ
  Dim judge As Boolean  '// 判定

  For rw = 1 To Rng2.Rows.Count
    judge = True
    For col = 1 To Rng2.Columns.Count
      '// 行rwの各要素を比較する
      If Rng1.Cells(1, col) <> Rng2.Cells(rw, col) Then
        '// 一つでも違えば不一致
        judge = False
        Exit For
      End If
    Next
      '// 1行でも全要素が一致すればいい
      If judge = True Then
        Exit For
      End If
  Next
 
  '// 結果を返す
  fn_HaniHikaku = judge

End Function
    • good
    • 0
この回答へのお礼

大変お役にたちました。
こんなやり方(考え方)もあるんですね。
ありがとうございました。

お礼日時:2004/06/14 00:50

  A  B  C  D  E ・・・ Z  AA


1 01  05    06     ・・・ 09 TRUE
2 01  01  01     02 ・・・    0
3 01  05    01     ・・・ 09  0
4 01  05    06     ・・・ 09  1
5 01  01  01     02 ・・・    0

質問の意味を掴むのが一番難しいのですが・・・

上のようになった表で、1行目A列~Z列の内容が
2行目から5行目でA列~Z列と全て等しいなら『1』をAA列に書いてみます。
AA列の2行目以下でどこかに『1』があれば、一致する行があることになります。

力技で各セルをセル単位に照合すればできますが、ばかばかしいので、ユーザー定義関数を作ってみます。

AA2セルに =fn_HaniHikaku($A$1:$Z$1,A2:Z2) として、AA3以下はこれをコピーします。
(Z列まで使ったのは例です)

AA1セルに =IF(SUM(AA2:AA5)>0,TRUE,FALSE) とします。


質問の意味を捉えていればいいんですが・・・
質問に書いてあることをそのままコードに書いたつもりです。参考にして下さい。


Function fn_HaniHikaku(Rng1 As Range, Rng2 As Range)
  Dim rg As Range     '// セル
  Dim col As Integer   '// 列カウンタ
  Dim judge As Integer  '// 判定

  judge = 1
  For col = 1 To Rng1.Columns.Count
    '// 各要素を比較する
    If Rng1.Cells(1, col) <> Rng2.Cells(1, col) Then
      '// 一つでも違えば不一致
      judge = 0
      Exit For
    End If
  Next
  
  '// 結果を返す
  fn_HaniHikaku = judge

End Function

この回答への補足

ありがとうございます。検索元のデータは別シートで
対象範囲のシートからマッチングして結果を返したいのですがコードはどのようにかえればよいのでしょうか?

補足日時:2004/06/11 00:24
    • good
    • 0

出来ない(「複雑でいやになっちゃう」も含めて)と思います。

下記をご参考にしてください。
(1)エクセル関数では、セルの、1つの文字列にしないと、それを対象にしてしか検索できない。
(2)セルの文字列の結合において「各列定幅(桁)性」を持たせないと比較ができない。A列「AB」B列「C」を結合して「ABC」、A列「A」B列「BC」も結合して「ABC」。両者が等しくなっては(一般的には)困るので、例えばA列は固定4桁、B列は固定3桁とか、合理的に各列の桁数を決めて結合しないといけない。AB・・C・・(・はスペースなど)後者ではA・・・BC・のように。
しかしフィールドが多くなるとそれを作る関数式が結構面倒である。
同じく「検索のために指定する値」もそのフィールド桁数ルールを守って入力しないといけない。結構神経を使う。
(3)空白列の存在に対処するのも(2)と似ていて
全行と決まっておれば、空白の場合は何桁かを決める必要がある。
(4)救いの手は、簡単なVBAを使い、ユーザー関数を作る
ことでしょう。
Function ketugou(a)
r = a.Row
l = Array(4, 3, 5, 3, 4)
sl = 0
For i = 0 To UBound(l)
sl = sl + l(i)
Next i
s = String(sl, "-")
'----
p = 1
For i = 0 To UBound(l)
Mid(s, p, Len(Cells(r, i + 1))) = Cells(r, i + 1)
p = p + l(i)
Next i
ketugou = s
End Function
例えば
A列   B列   C列   D列   E列
ab   (空白)xyz (空白)  ijk
cdf  (空白)v  (空白)  jkll
43534
最下行の桁数で桁数幅を考えた時
F1に=ketugou(A1)と入れると
ab-----xyz-----ijk-
F2に=ketugou(A2)と入れると
cdf----v-------jkll
がセットされると言う風に。(スペースでは桁が判りにくいので、判りやすいように-にした)
(5)後はF1をF2セル以下複写すればF列に望みの
検索される方の文字列が出来る。
(6)ここを対象にしてVLOOKUP関数で検索する。
しかしVlookup関数の検索される列は最左列でないといけなかったと思うので、取りたい情報(例えば会社名)はF列より右にあるかF列をA列(列挿入した後のA列)にもってくる必要がある。
Match関数ならそのような心配はない。
    • good
    • 0

スペースとは、半角又は全角の文字が入っているって事?



01△05△△06△09 は 「01 05  06 09」?

検索範囲のデータはそれぞれ別の列に入ってる?

A1に01、B1は全角1文字、C1は05、D1は全角1文字・・・・
それとも
A1に01、B1は空、C1は05、D1は空・・・・

とりあえずデータを結合してMatch関数やVLOOKUP関数を使えば良いのでは?

検索範囲の列を結合したデータを作る。

=A1&B1&C1&D1&E1

もし空白文字を含まない列を含むなら結合データ作成を工夫する。

=if(A1=""," ",A1) & if(B1=""," ",B1) & ......

そのうえで、検索データのセルとマッチさせる。

=Match(検索データ,検索範囲,FALSE)
    • good
    • 0

ちょっと意味が掴み難いです。



何処と何処をどうマッチさせ、どんな結果を得たいのかサンプル値でも良いので実例を上げた方が良いのでは?

この回答への補足

わかりにくくてすみません。
このようなことがしたいのです。

検索データ:01△05△△06△09
==========================================
検索範囲:
01△01△01△02
01△05△△01△09
01△05△△06△09
01△01△01△02
    .
.
.
=========================================
結果
データがマッチしからtrueやなければflase
を返す

excel関数でなんとかしたいです。

検索データにはスペースを含みます。
△はスペースです。
探索先(範囲)には検索したいデータは必ずあるのが前提ですがなれればエラーを返すようにしたいです(優先度は低いです)
また検索範囲内でデータ重複があります。
マッチして時点でtrueが返ればいいです。

補足日時:2004/06/10 00:17
    • good
    • 0

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