• ベストアンサー

エクセルの関数・マクロで質問です。

たとえば マグロ サンマ サンマ タイ たまご たまご マグロ しめさば しめさば タイ こういった名詞が並ぶデータにあてると マグロ  2 サンマ  2 タイ    2 しめさば 2 たまご  2 というように、種類を表示して、その数を表示させるといった関数・マクロはありますでしょうか。 得意な方おりましたらご教授下さいませ。よろしくお願い致します。

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.2

たとえばA1セルからそういったデータが並んでいるとすると。 sub macro1() range("A1:A" & range("A65536").end(xlUp).row).advancedfilter _  action:=xlfiltercopy, _  copytorange:=range("C1"), _  unique:=true range("C1:C" & range("C65536").end(xlUp).row).Offset(0, 1).Formula = "=COUNTIF(A:A,C1)" end sub といった具合で,CD列に結果を出します。 手動で,2003まではデータメニューのフィルタからフィルタオプションの設定で(2007ではデータタブの重複の削除)で重複を無視した一意のリストを作成し,横にCOUNTIF関数を並べるのでも簡単に結果を出せます。 #別の良い方法 A1セルに「項目」と1セル記入しておいてから2行目以降にデータを並べ Excel2003まではデータメニュー,2007では挿入タブでピボットテーブルレポートの作成を開始し 行の所とデータの所(行とΣ値欄)に「項目」をそれぞれ配置してOKすると,リストアップから数を数えるのまで一気にやってくれます。 いずれにしてもメンドクサイけど一番肝要なのは「重複のない種類の一覧を書き出す」事で,関数式でも出来ないとは言いません(誰か回答してくれると思います)が実地の応用は難しいので,実際の仕事に使うのはお薦めではありません。 それでもどうしてもどうしても操作はイヤで関数だけでやりたいのなら,少し丁寧に作業列を使い 作成例: B列B2からデータを並べる A2セルに =IF(OR(B2="",COUNTIF($B$1:B1,B2)),"",COUNT($A$1:A1)+1)  以下コピー などのような計算を並べると初出のものに連番が計算できるので, D2: =IF(ROW(D1)>MAX(A:A),"",ROW(D1)) と入れて E2: =IF(D2="","",VLOOKUP(D2,A:B,2)) F2: =IF(D2="","",COUNTIF(B:B,E2)) 以下コピー といった具合に順番に作成してくことで出来ます。

kugutus
質問者

お礼

1つ目は何故か400エラーが出てしまい検証できませんでしたが、後ほどPC変えてやってみます。 ピボットテーブルで簡単にできたのですね。。。ありがとうございました。

その他の回答 (4)

noname#204879
noname#204879
回答No.5

関数も苦手、マクロも出来ない、そういう人にはピボットテーブルがある!

kugutus
質問者

お礼

ピボットテーブルの使い方から勉強した方が良いかもですね。情報ありがとうございました。

  • kmetu
  • ベストアンサー率41% (562/1346)
回答No.4

> 名詞の並んだ列がB列というのをA列からマクロもしくは関数で抽出する方法はございますでしょうか? メニューのデータ→フィルタ→フィルタオプションの設定で 指定した範囲にチェック リスト範囲でA列のデータを選択 抽出範囲で B1を選択 重複するレコードは無視するにチェック これでA列の重複しないデータがB列に取り出されます。 この操作をマクロの記録でコードを出せば(A1からA10まで元のデータがあったとしたら) Range("A1:A10").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range( _ "B1"), Unique:=True となります。

kugutus
質問者

お礼

気付いたらたくさんのご返答が、 マクロで一回の操作で結果を出してしまいたかったので、この式は大変助かりす。 ありがとうございました。

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

こんばんは! 一例です。 関数でやる場合ですが、↓の画像のようにB列を作業用の列としています。 作業列B2セルに =IF(COUNTIF($A$2:A2,A2)=1,ROW(),"") という数式を入れオートフィルで下へずぃ~~~!っとしっかりコピーしておきます。 これ以上データがない!というところまでコピーしておいても構いませんん。 そしてD2セルに =IF(COUNT(B:B)<ROW(A1),"",INDEX(A:A,SMALL(B:B,ROW(A1)))) E2セルに =IF(D2="","",COUNTIF(A:A,D2)) という数式を入れ、D2・E2セルを範囲指定しE2セルのフィルハンドルで下へコピーすると 画像のような感じになります。 尚、余計なお世話かもしれませんがVBAで行う場合は当然作業列は必要なく↓のような感じのコードではどうでしょうか? 画面左下にある操作したいSheet見出し上で右クリック → コードの表示 → VBE画面がでますので ↓のコードをコピー&ペーストしてマクロを実行してみてください。 (Alt+F8キー → マクロ → マクロ実行です) Sub test() 'この行から Dim i, j As Long For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row If WorksheetFunction.CountIf(Range(Cells(2, 1), Cells(i, 1)), Cells(i, 1)) = 1 Then Cells(Rows.Count, 4).End(xlUp).Offset(1) = Cells(i, 1) End If Next i For j = 2 To Cells(Rows.Count, 4).End(xlUp).Row Cells(j, 5) = WorksheetFunction.CountIf(Range("A:A"), Cells(j, 4)) Next j End Sub 'この行まで こんなんではどうでしょうか?m(__)m

kugutus
質問者

お礼

こちらの式もばっちり動きました。 同じ結果を出すにも式がたくさんあるとは驚きでした。こちらも使わせていただきます。 ありがとうございました。

  • kmetu
  • ベストアンサー率41% (562/1346)
回答No.1

たとえば 数えたいデータがA列にあって 名詞の並んだ列がB列だとしたら =COUNTIF(A:A,B1) として必要なだけフィルしてください。

kugutus
質問者

補足

早速のご回答ありがとうございます。 名詞の並んだ列がB列というのをA列からマクロもしくは関数で抽出する方法はございますでしょうか?

関連するQ&A

  • 関数エラーによるエクセルマクロの処理中断

    そんなにエクセルVBAが得意じゃないです。よろしく教示くださいませ。 セルにエクセル関数を設定し、マクロを働かせて使用しています。 セルに想定外のデータが入力されると、関数エラーを起こしてしまうのですが、 このエラーが発生すると、マクロも中断になってしまいます。 関数エラーが発生しても、マクロが中断しないような、マクロ命令って あるのでしょうか。 実は、マクロで想定外データのチェックをかけてるのですが、その想定外データが入力されると、 警告は発するのですが、関数エラーが発生し、マクロが中断してしまうのです。 マクロに組み込むべき、コマンドはあるのでしょうか。

  • エクセルexcelの関数やマクロ教えて下さい!

    エクセルexcelについて教えて下さい。 数字が入力されたセルに数を加えていきたいのですが、 "1"が入力されたセルに"3"と入力すると"4"と表示されるようにする方法を教えて下さい。関数やマクロなど勉強中ですが、難しくて出来ません。お願いします。

  • マクロかエクセル関数教えて下さい。

    エクセルマクロ及び関数式で教えていただけないでしょうか?       月  火  水  木  金 太郎   ○ 花子         ○ 一郎      ○ 次郎             ○ 三郎          ○ 担当者名 太郎 一郎 三郎 花子 次郎 このように、丸が入ると担当欄のセルに「担当者名:月は太郎、火は一郎‥」を自動表示させたい。 1.そのセルに関数式 2.マクロ(サンプル) を、ご教授してくださる方が、おられましたら宜しくお願い致します。 これでご覧になれますでしょうか? ↓ http://firestorage.jp/download/37abd45beb74cb129a16bd3a92042647c013... 宜しくお願い致します。

  • エクセル関数について 質問です。

    会社の マクロ使用禁止のパソコン(ヴィスタ)で、 売却数を集計することになりました。 3列に種類が入っており、5列に集計するような配列です。 どのような関数をつかったらいいのでしょうか (+_+) よろしくお願いいたします**

  • Excel、マクロの質問

    Excel、マクロ初心者です。 Excel関数のIF関数ではこのように表示させていますが、マクロではうまく表現できません。 =IF(D89>C90,"b",IF(D89<C90,"a","f")) 比較対象の数がD89から始まり、D5654まであります。 IF関数の式は何となくわかるのですが D89からD5654まで上記の式を適用させるところがうまくいきません どのようにすればよいのでしょうか。

  • エクセルマクロ、教えてください。

    エクセルマクロ、教えてください。 とても困っています 泣 だれかご教授をおねがいいたします。 画像のような表があり、マクロボタンを押すと、画像下のように文字列にして別シートに出力したいのですが、 賢い形で作ることが出来ません。 if文がとても多くなってしまいます。 繰り返し処理などあるようなのですが、難しくてついていけません。 だれかきれいなロジックを教えていただけないでしょうか。 お願いいたします! 条件として、 表は、いくつかあり、画像は果物4種類ですが、野菜8種類の表などにも流用できるマクロをくみたいです。 A商店を左から順番に文字列に格納して、""になるまで繰り返す・・・ ""がきたら、B商店へ・・・といった形でしょうか。 また、商店の数も不特定なので、こちらも""になるまで繰り返すという条件でお願いいたします! エクセル関数で出来るじゃんとおもうでしょうが、例として簡単なものに書き換えただけなので、 回答はぜひマクロでお願いいたします!

  • エクセルでマクロを作りたいのですが上手くいきません

    エクセルで会社で使うファイルを作成していますが、ファイルサイズが大きくなりすぎたので、こういうマクロが作れないかと調べていたのですが、やり方がわからないので困っています。 わからないのは、入力シートのA列にデータを入力して、シート2のB列に自動的に表示する ことを自動的にやってくれるマクロです。 今はIF関数をシート2に入力している状態ですが、セルに関数を入れる方法だとファイルサイズが大きくなりすぎてしまいます。 (IF関数をあらかじめ入力しておくセル数がとてもたくさんある為) なお、入力シートA列がブランクの場合は、シート2のB列には何も表示されないようにしたいです。 大変困っております。よろしくお願いします。 

  • EXCELのマクロについて

    マクロについて質問させてください。 商品コード、商品名、ケース入数、ロケーション、WMS在庫数、実在庫数、在庫差異 の順でAからHまでデータがあります。 商品コード毎で1行ずつで全部で6000行程あります。 実在庫数と在庫差異以外は既にデータが入力されており棚卸を実施した後に実在庫数へ入力、関数を入れて在庫に差異があれば表示されるというようなものです。 但し、かなりのデータ量で1人での入力は時間が掛かりますので4名で入力業務を行うことになりました。 元のファイルをコピーし4名で入力し始めたのは良いのですが、入力し穴だらけになったらファイルを元のファイルに合算する方法がわかりません。 手作業では骨の折れる作業ですし、正確性に欠けます。 そこでマクロを使ってそれぞれの入力したファイルから元のファイルにデータが自動で移行するようにしたいのです。 以前、マクロを少しかじりましたが私の知識では作ることが出来ませんでした。 どなたかお力添え頂けると助かります。 宜しくお願い致します。

  • エクセル関数についてです。

    エクセルにデータを入力をしていきたいのですが、数が何万件とあります。で、項目の中に「種類」があります。この種類にはコード番号がついてます。Aの1にコード番号を手入力したら、Bの1に種類名が自動的に出てくるようにするにはどうすればいいのですか?関数でできるのでしょうか?マクロというのを使用することになるのでしょうか? コード番号 種類名  1111   りんご  1112   ぶどう  1113   バナナ  1114   なし  1115   メロン

  • エクセルの関数およびマクロについて

    お世話になります。 エクセルで,次のようにしたい場合はどうすればいいのでしょうか。 マイピクチャの中に,それぞれ320001~320005という名前の写真が計5枚入っています。 エクセルのA1のセルに,320001を入力すると,320001の名前の写真を表示,320002を入力すると320002の名前の写真を表示という具合にしたいのですが。 写真を表示するのは,どこか特定のセルでも構いませんし,図形(四角など)を挿入して,その中に表示でも構いません。 できれば関数で解決したいのですが,無理ならマクロでも結構です。 ご教授,よろしくお願いします。

専門家に質問してみよう