- ベストアンサー
Excelの関数で複雑な条件式を解決!
- Excelの関数で複雑な条件式を解決する方法について教えてください。
- A列で同一番号のB~E列の文字列を比較し、異なる文字がある場合にG列に「○」を返すExcelの関数について教えてください。
- Excelの関数を使用してA列で同一番号のB~E列の文字列を比較し、異なる文字がある場合にG列に「○」を返す方法について教えてください。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
A No.1 です。 VBA で作ってみました。 期間限定でダウンロードできます。 ================================== ファイルの取得期限は 2010年1月13日 6時32分29秒 JST です。 https://www.datadeliver.net/receiver/fileBox.do?fb=e1b0b7689828475cb566a022b7b8c5c8&rc=2b31be953cd34d419b87c03de835e448&lang=ja =================== TTT.xls ファイルをダウンロードしてください。 マクロを実行すればすぐにわかります。 ==== サンプル =========== Sub S_DupKey() Dim Ws As Worksheets Worksheets("Sheet1").Select Dim Rcnt, C, I, J As Integer Dim Rg_A, RG_F, HT As Range Dim strKey, strPdt As String strEndAdr = Range("A2").End(xlDown).Address Set Rg_A = Range("A2:" & strEndAdr) Rcnt = Rg_A.Rows.Count If Rcnt <= 1 Then 'データが1件以下しかないなら終了 Exit Sub End If Set RG_F = Range("F2:F" & Rcnt) Set HT = Range("G2:G" & Rcnt) '判定の列 HT.Rows.Clear '判定結果をクリア '重複データを検索する For I = 1 To Rcnt strKey = Rg_A(I).Value & RG_F(I).Value '重複データのKEY If HT.Rows(I).Value <> "○" Then For J = Rcnt To 1 Step -1 strPdt = Rg_A(J).Value & RG_F(J).Value If strKey = strPdt Then If I <> J Then HT.Rows(I).Value = "○" HT.Rows(J).Value = "○" Exit For End If End If Next J End If Next I End Sub ======================
その他の回答 (4)
- NOBNNN
- ベストアンサー率50% (93/186)
手動でやればできます。 H列に =A2 + F2 という式を追加して データ件数分 行をコピー&ペーストしてください。 そうするとキーデーターの一覧が作成されます。 これをもとにデータを探します。 探し方は 表全体を選択、データー/フィルター/オートフィル を実行。 H1セルの↓ をクリック、データを選択する。 2件以上表示されているのが「○」になる データです。2件以上表示されているものに対して 「○」を記入して完成です。 ====================================== >>しかしVBAは慣れていないため自身で応用が利きません。可能であれば単純な関数で出来ないものかと・・ これは無理だと思います。 データを検索して自分以外のでデータを探して見つければ○にする関数は ないです。 マクロでなくてもVBAで関数を作るかなどしなければできないです。 >>しかしVBAは慣れていないため自身で応用が利きません。可能であれば単純な関数で出来ないものかと・・ こういうことは最初に書くべきです。 どれだけ時間をかけてまた説明しているのか考えてください。 相手に失礼だと思いませんか? 結果がでていているのであれば これでクローズ(ポイントを付与) してください。 説明が不足しているために2度3度と書き直すのですか?。 それにここは 技術者向 ですのでVBAをご存知ないのは質問者さまの技量不足と思われます。 MSOFFICE のカテゴリにに投稿しなおしてください。
お礼
手動でできました。 ありがとうございました。 >どれだけ時間をかけてまた説明しているのか考えてください。 すみません。配慮が足りませんでした。 >MSOFFICE のカテゴリにに投稿しなおしてください。 次回からそうします。
- bin-chan
- ベストアンサー率33% (1403/4213)
#2です。一部訂正 式を入力するのは、セルF2ではなくて、セルG2です。 > いづれかが異なり、 B列に「A」、C列に「AB」、D列に「BC」、E列に「CDD」が入っているなどすべて異なる場合も「いづれかが異なり」と同じ扱いにしています。
補足
ご回答ありがとうございます。 しかし上手くできませんでした・・画像の例でG2セルから下にコピーしても全て「×」になってしまいます。 私のやり方が何か悪いのでしょうか・・? またご教授いただいた以下の式は、言葉で言うとどのような条件式なのでしょうか。 =IF(AND(A2=A$1, F2=F$1, NOT(AND(B2=B$1, C2=C$1, D2=D$1, E2=E$1))), "○", "×")]
- bin-chan
- ベストアンサー率33% (1403/4213)
試験してないけど。 "○"でなければ無条件に"×"を出しますよ。 以下 式[ 中略 ]の [ ]は式の範囲を示すだけであり入力不要です。 セルF2に式[=IF(AND(A2=A$1, F2=F$1, NOT(AND(B2=B$1, C2=C$1, D2=D$1, E2=E$1))), "○", "×")]を入力。 セルF2右下の■を下方向にドラッグするかダブルクリックするかして、必要な行数分コピー。 セルアドレスの$記号は、絶対参照指定です。
- NOBNNN
- ベストアンサー率50% (93/186)
実際のデータと結果があるとわかりやすいのですが。 提示していただけませんか 作るのが面倒です。 大体、20~30件分ぐらいのデータを提示してください。 >>A列で同一番号のB0E列の文字列を比較し、いづれかが異なり、且つ、F列の文字列が同一のものがあった場合、G列に「○」を返す。 「F列の文字列が同一のものがあった場合」て何に対して文字列が同一なのですか? 言葉だとあいまいなのです。 「G列に「○」を返す。」 該当したデータの比較もとと比較先の双方に結果を返すのですか? 無駄を省くため 実例をデータで示さないとわかりません。以下参照 No.| A| B| C| D| E|---F----| G| 001 05 AA WW GG YY AAWWGGYY 002 07 AA XX GG QQ AAXXGGQQ 003 01 BB WW II SS BBWWIISS 004 01 BB WW II SS BBWWIISS 005 01 BC WW II SS BBWWIISS このデータで結果と解説を示してください。 ちなみにオートフィル機能で でぼりこみはできると思います。
補足
ご回答ありがとうございます。 マクロを実行してできました。しかしVBAは慣れていないため自身で応用が利きません。可能であれば単純な関数で出来ないものかと・・