• ベストアンサー

Excel関数 条件に一致する行 データの種類

エクセルの関数に関して質問です。エクセル2003を使用しています。 A列の値が一致する行に対し、B列のデータの種類を数えたいのですが Excel関数で実現できますか? No  A列 B列   求める結果 1  中国語 Chaina    1 2  中国語 Chaina    1 3  日本語 Japan     2 4  日本語 America   2 5  日本語 Japan     2 どうぞ知恵をお貸しください。よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.1

こんばんは! 関数での方法をご希望だというコトですので、 一例です。 ↓の画像で説明します。 作業用の列を2列設けています。 作業列1のD2セルに =IF(COUNTBLANK(B2:C2),"",B2&"_"&C2) 作業列2のE2セルに =IF(OR(D2="",COUNTIF(D$2:D2,D2)>1),"",1) という数式を入れ、両列ともオートフィルでずぃ~~~!っとしっかり下へコピーしておきます。 最後に結果のG2セルに =IF(D2="","",SUMIF(B:B,B2,E:E)) という数式を入れオートフィルで下へコピー! これで画像のような感じになります。 ※ 作業列が目障りであれば遠く離れた列に設けるか、 作業列を非表示にしてください。m(_ _)m

ruri123456789
質問者

お礼

すごいです!実現できました! 迅速に分かりやすくご回答頂き、大変ありがとうございました。

ruri123456789
質問者

補足

エクセルの関数で実装したところ、処理が重くなってしまい、VBAでの実装を検討しています。 実装案をぜひお聞かせください。

その他の回答 (1)

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

No.1です! 補足の >処理が重くなってしまい、 すなわち、かなりのデータ量がある!というコトですね? となると、For~Next でループさせたり、前回の関数の方法をマクロでやったとしても おそらくExcelが「応答なし」になってしまうと思いますので、 オートフィルタの方法でやってみました。 尚、元データがSheet1にあり、結果をD列に表示させるとします。 そして、Sheet2を作業用のSheetとして使用していますので、 Sheet2は全く使用していない状態でマクロを試してみてください。 今回もSheet1のA2以降にデータがあるとします。 (Sheet1の1行目の項目はA~D列まで入れておいてください。) 標準モジュールです。 Sub Sample1() Dim i As Long, endRow1 As Long, endRow2 As Long, wS1 As Worksheet, ws2 As Worksheet Set wS1 = Worksheets("Sheet1") Set ws2 = Worksheets("Sheet2") Application.ScreenUpdating = False endRow1 = wS1.Cells(Rows.Count, "B").End(xlUp).Row wS1.Range("E:E").Insert '←E列以降使用していない場合は不要 wS1.Range("E1") = "ダミー" Range(wS1.Cells(2, "E"), wS1.Cells(endRow1, "E")).Formula = "=B2 & ""_"" & C2" Range(wS1.Cells(1, "E"), wS1.Cells(endRow1, "E")).AdvancedFilter Action:=xlFilterInPlace, unique:=True wS1.Range("E:E").Copy ws2.Range("A1") wS1.ShowAllData endRow2 = ws2.Cells(Rows.Count, "A").End(xlUp).Row Range(ws2.Cells(2, "B"), ws2.Cells(endRow2, "B")).Formula = "=LEFT(A2,FIND(""_"",A2)-1)" Range(ws2.Cells(2, "C"), ws2.Cells(endRow2, "C")).Formula = "=COUNTIF(B:B,B2)" For i = 2 To endRow2 wS1.Range("A1").AutoFilter field:=5, Criteria1:=ws2.Cells(i, "A") Range(wS1.Cells(2, "D"), wS1.Cells(endRow1, "D")).SpecialCells(xlCellTypeVisible) = ws2.Cells(i, "C") Next i wS1.AutoFilterMode = False wS1.Range("E:E").Delete ws2.Cells.Clear Application.ScreenUpdating = True MsgBox "処理完了" End Sub こんな感じではどうでしょうか?m(_ _)m

ruri123456789
質問者

お礼

アイディアとても参考になります。大変感謝しています。 ご丁寧に回答頂きありがとうございました。

関連するQ&A

  • エクセル関数で条件に一致したものの合計

    エクセル関数で条件に一致したものの合計 を計算することはできますでしょうか? SUMIFを使えばできるような気もするのですが、どうやったら良いのか分かりません。どうか教えてください。 やりたいことは、、 A列に1 or 2が入ってます。下記みたく。 1 2 2 1 2 1 B列に数字が入っていて、A列が2である行のB列の合計を求めたいのです。 よろしくお願いします。 -- エクセル2003

  • 【Excel】一致するデータの検索

    Excel2003を使用しています。 Sheet1のB列の値がSheet2のA列に入力されている値と一致したら、Sheet1のC列とD列の値をSheet2のC列とD列に表示させたく、VLOOKUP関数を使用したところ、Sheet1のB列とSheet2のA列のデータの並び方(順序)が同じではないためか、VLOOKUP関数ではできませんでした。 こういう場合、マクロで処理することは可能でしょうか?可能であれば、どのようにコードを記述すればいいでしょうか? Sheet1のデータは4行目から、Sheet2のデータは6行目から入力されています。 よろしくお願いします。

  • 二つの条件に合った行のセルの値を取得する関数は

    H2に圃場番号を入力して、その値と一致する圃場番号をB列から取得します。 I2に農薬NOを入力して、その値と一致する農薬NOをD列の農薬NOから取得します。 両方の条件が合致した行の値をF列(散布量)の値をから参照して、散布量の値をJ2に取得し、二つの条件に合致しない場合、空欄にしたいです。 尚、B列の圃場番号は重複する番号が登録されている場合もあり、D列の農薬NOも重複する農薬NOが登録されている場合まあります。 しかし同じ圃場が同じ農薬を2度散布することはありません。例えばB列に圃場番号5が3回出てきますが、該当する行のD列の農薬NOは10,15,12と、それぞれ別になっています。 圃場番号5で農薬NOの10が登録された場合、この組み合わせが重複する行は絶対にないとします。 関数だけでこの操作を実現したいのですが、よろしくお願いします。

  • Excel2003、配列から、複数の条件一致する行のデータを取り出す方

    Excel2003、配列から、複数の条件一致する行のデータを取り出す方法 配列は最大で10行、10列程度ですが、このデータはリアルタイム(0.5秒間隔)で更新されますので、 分類等はできません。 A列のデータがZ1のセルのデータと一致し、かつ、B列は、特定の”文字列”と一致し、かつ、C列は数量で、0より大きい(負のデータは無いが、""はあり得る)という条件に合致した行があったら、その行のD列の値をZ2のセルに格納したい。 条件に合致する行は複数あり得るが、そのときは最初に条件が合致した行のデータが必要。 いくつかの関数を調べましたが、つまづいています。

  • Excel関数

    緊急です。 ExcelでVBAを使用せずに、 セルA1と列Bのどれかが一致した時に、 一致した行の、つまりセルA1と一致したB○の横の列Cにある値をとってくることって出来ますか?

  • 一致した行を返したい

    excel2007を使っています おしえてください    A   B   C 1   1   3 2   2   8 3   2   3 4   1   3 5   7   8 6   2   8 7   1   3 このような表がありA1の1と同じ1をA列2行目から検索 B1の3と同じ3をB列2行目から検索 どちらも値が一致した行(検索開始行から数えて何番目)をC1に返したい (この場合3と6がありますが早く一致した3を返したい) C2は4となります Cに入れる数式を是非教えてください

  • 一致するデータを検索する関数って?

    Excelの関数を教えてほしいのですが。 A表とB表があります。A表にはB表と一致するデータも含まれていて、 一致しないデータ-もあります。 A表の中でB表と一致するものを検索したいのです。 最終的にはA表の中のB表と一致するものは削除したいのですが。 まずは、一致するデータを検索できればと思います。 表のデータはかなり数が多いので、列づつではなく表と表で検索できる ようなものがあれば思うのですが。 列の方でもできそうな関数がありましたら教えて頂きたいと思っています。 また、数値と文字列でも使用する関数が違うのでしょうか? 説明が不十分とは思いますがよろしくお願いします。

  • Excel関数2つの項目が一致する場合・・・

    誰か助けて下さい。 EXCEL2002を使い、3つの項目が一致した場合その合計を出す方法。 数百行に渡り A列には、日付 B列には、商品項目コード c列には、金額 日付が同じもの同士で、尚且つ商品項目コードが同じ時の金額の合計を出したいのですが どの関数を使っていいのかわかりません。 どうぞ、おしえてください。

  • Excelにて複数条件を満たす行の特定のセルの値を返す関数

    Excelにて複数条件を満たす行の特定のセルの値を返す関数を作りたいのですが、上手く行きません。 <Sheet1>   A列  B列  C列 1 2008/6/1 ★  320 2 2008/6/1 ☆  300 : : : Sheet2のA1に、「A列が2008/6/1で、B列が☆の場合、C列の値を返す」という関数を入れたいのですが、どうも上手く行きません。 良い式がありましたら教えて下さいm(_ _)m

  • エクセル 関数を使わずにデータを取りたい

    EXCELを使ってデータ入力をしたいです。 下の図のように、シート1のA列にコードを入力すると、シート2のテーブルから値を引っ張ってくるようにしたい。 たとえば、シート1のA1に"C001"を入力したら、B1に"赤"が自動入力されるようにしたい。 シート1 A列 B列 行1 C001 シート2 A列 B列 行1 C001 赤 行2 C002 青 行3 C003 黄色 ただし、シート1のB列の値は、入力後に編集するため、ここには計算式を入れたくないのです。 なので、通常ならばB列にVLOOKUP関数を使えばすむことですが、計算式を入れずに上記を実現する方法を教えてください。