【復活求む!】惜しくも解散してしまったバンド|J-ROCK編 >>

添付写真は元データとなるリストを上部、データを移したいマトリックス表を下部に、同じシートに作成しています。実際は別々のシートです。
リストにある所属部署と等級を基準に、マトリックス表の部署と等級が交錯するセルに、該当する氏名と評価を表示されるようにしたいです。(添付写真のマトリックス表が理想形です)

Excel初心者で、自分なりに調べましたが、マトリックス表からのデータ抽出の方法しか見当たりませんでした。ご回答宜しくお願いします。

「リストのデータをマトリックス図へ移す関数」の質問画像

質問者からの補足コメント

  • うーん・・・

    追加質問させて下さい。

    マトリックス表に表示させる項目を増やす場合は、どの関数の範囲を広げればいいのでしょうか?元データとなるリストのF列に年齢を追加するとして教えていただければ幸いです。
    また、表示する人数を増やす為、行を増やすとすれば、どの関数の範囲を広げればいいのでしょうか?

    質問ばかりで申し訳ありませんが、宜しくお願い致します。

    No.1の回答に寄せられた補足コメントです。 補足日時:2019/03/19 17:07
  • つらい・・・

    お返事ありがとうございます。
    おっしゃられていることは分かります。
    教えていただいた数式の関数を分けて、調べましたが、以下の部分だけでも教えて下さい。
    (COLUMN()/2)*2)やINT(ROW()/3)*3)やMOD(COLUMN(),2)*2 +1)にみられる【*2や*3】はどの部分を指しているのでしょうか。

    No.2の回答に寄せられた補足コメントです。 補足日時:2019/03/20 12:12
  • つらい・・・

    詳細にご説明いただきありがとうございます。
    単体の関数では理解できるのですが、複数組み合わせると上手くいきません。
    添付の画像の通り、元データと部門別・等級別のシートを作成しています。元データシートは他のシートからVLOOKUP関数で導いています。一覧表のA列は20行ごと、部署は5列ごとになっています。

    =IFERROR(INDEX(元データ!$B$2:$I$200,SMALL(IF((元データ!$C$2:$C$200=INDEX($3:$3,INT(COLUMN()/5)*2))*(元データ!$D$2:$D$200=INDEX($A:$A,INT(ROW()/5)*3)),ROW(元データ!$B$2:$B$200)),MOD(ROW(),20)+1),MOD(COLUMN(),5)*2+1),"")

    申し訳ありませんが、上記の計算式を指摘していただけないでしょうか。

    「リストのデータをマトリックス図へ移す関数」の補足画像3
    No.3の回答に寄せられた補足コメントです。 補足日時:2019/03/20 20:31

A 回答 (4件)

No3です。



No2の回答を再読していただくのが宜しいように思います。
    • good
    • 0

No2です



>【*2や*3】はどの部分を指しているのでしょうか。
セルに計算式を入れて、ドラッグしてみるるわかると思います。
ROW()、COLUMN()は自身のセル位置を意味します。
(計算上は、ROW(A1)とかCOLUMN(B1)のように、都合の良い位置を指定しておくのもありです)

=INT(COLUMN()/2)*2 を入力して横にコピーすれば、2,2,4,4,6,6…と
=INT(ROW()/3)*3 を縦にコピーすると、9,9,9,12,12,12,15,15,15…と並ぶはずです。
それぞれセル結合された部署と等級(8行目とA列)を参照するためのセル位置を計算しています。
セル結合的なレイアウトになっている場合、このような計算が増加する分だけ、式が複雑でわかりにくいものになります。

一方、=MOD(COLUMN(),2)*2+1 を右方向にコピーすると、1,3,1,3,1,3…となり
元になる表から参照したい列数を示します。
(1列おきに、氏名と評価を参照しているので、1、3…となる)
この部分も、表の作り方次第では、不要にできるかもしれない計算と言えるかも知れません。
この回答への補足あり
    • good
    • 0

No1です。



>表示する人数を増やす為、行を増やすとすれば、
>どの関数の範囲を広げればいいのでしょうか?
No1の参考に挙げた式で、最終的に参照しているのは
 INDEX($B$1:$D$5, 行番号, 列番号)
の形式になっているので、対象範囲を$B$1:$D$5としています。
その範囲から欲しいデータを選択するために、「行番号」「列番号」を正しく計算する必要があるので、範囲だけ拡張しても何も起こりません。
併せて、行、列の計算など、全体を再構成する必要があります。

ついでながら、No1の回答で伝わっていなかったと思われるので、以下を補足しておきます。
回答の添付図では、データ入力は簡略化していますが、セルの結合した状態と同等になるように想定していますので、元のご質問にあるようなセルの結合を含む表に対して計算できるように関数式を作成してあります。
(セル結合を省いて計算式を簡略化するのなら、「部署名や等級を該当する各セルに入れておく」ことで実現できます。)


実は、No1の回答の意図は、回答の前半は
・ご質問の表形式には欠点があるように見受けられるし、表計算として勧められるものではないので考え直した方が良いのではないか。
ということと、後半は
・「どうしてもこの形式でやりたい」と言うのであれば、技術的には不可能ではないと思うけれど、大変、面倒でわかりにくいものになりやすいですよ。
(率直に言えば、やめた方が良いと思いますの意)
というつもりでした。

なお、追加質問に関しては、すでに別のトピで質問なさっていらっしゃるようなので、そちらにお任せすることにいたします。
https://oshiete.goo.ne.jp/qa/11035579.html
この回答への補足あり
    • good
    • 0

こんにちは



>添付写真のマトリックス表が理想形です
大変失礼ながら、およそ表計算には向いていない表形式になっていると思われます。

セルの結合を行っているので、計算を無駄に複雑にしています。、
何よりも「該当者が4人以上いる場合に、記載欄が用意されていない」という大きな欠点があります。
(3人より少ないことが保証されているのなら別ですが)
元のデータが何人分あるのかは不明ですが、自動で処理させようというくらいの人数であるなら、ある程度の人数なのでしょうから、すぐに破綻しそうなことが目に見えています。

とは言うものの、不可能ではありませんので、以下は計算方法のご参考までに。

添付図は必要なデータしか入力していないので、一部ご提示のデータとは異なります。
B9セルに以下の式を入力し、
=IFERROR(INDEX($B$1:$D$5,SMALL(IF(($C$2:$C$5=INDEX($8:$8,INT(COLUMN()/2)*2))*($E$2:$E$5=INDEX($A:$A,INT(ROW()/3)*3)),ROW($B$2:$B$5)),MOD(ROW(),3)+1),MOD(COLUMN(),2)*2 +1),"")

Ctrl+Shift+Enterで確定します。(←配列数式なので必須です)
確定後、右、下方にフィルコピーしています。
(セル位置に依存する式になっていますので、移動する場合はセル範囲・位置計算の調整が必要になります)
「リストのデータをマトリックス図へ移す関数」の回答画像1
この回答への補足あり
    • good
    • 1
この回答へのお礼

早速のご回答ありがとうございます!
添付いただいた写真通りにサンプルを作成したところ、希望通りの結果となりました。感動すら覚えました。

マトリックス表に表示させる項目を増やす場合は、どの関数の範囲を広げればいいのでしょうか?元データとなるリストのF列に年齢を追加するとして教えていただければ幸いです。

宜しくお願い致します。

お礼日時:2019/03/19 14:21

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

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aと関連する良く見られている質問

Q【関数】複数条件に応じてポイントをつけたい

お世話になっております。

条件によってポイント付与する数式を組みたいのですが
条件が複雑で、どのような関数を組めば良いか、関数の知識も乏しく頭を悩ませております。
詳しい方教えて頂けないでしょうか?

K列 担当者ID
L列 計画
M列 実績
N列 達成率
O列 達成額/未達額
P列 ポイント付与欄

上記のようなデータがあります。

下記条件で、O列「達成額/未達額」の降順にポイントを付与したいです。
その際、下記の条件でポイントを付与したいのです。

ポイント集計先
①黄色セル K5~K18:担当者ID
➁赤色セル K4:部門コード
※画像添付いたします。

ポイント付与条件別表
黄色セル E列:担当者ID ※上記①と紐づく
ピンクセル F列:担当者に紐づく主担当部門コード ※上記➁と紐づく
※補足へ画像添付いたします。

★条件★
・基本
O列
①「達成額/未達成額」が0以上なら降順に10Pからポイント付与
➁「達成額/未達成額」が0orマイナスならポイント付与せず
※ただし、マイナスでも実績があればポイント付与

上記、基本条件に加えて、下記条件も組み込みたいです。
①担当者ID+主担当部門コードが紐づけはO列に10PからポイントMAX付与
➁担当者ID+主担当部門コード以外だったら該当ポイントの1/2付与
かつ、「達成額/未達成額」が0orマイナスなら1/2のポイントの半分付与

何卒、よろしくお願いいたします。

お世話になっております。

条件によってポイント付与する数式を組みたいのですが
条件が複雑で、どのような関数を組めば良いか、関数の知識も乏しく頭を悩ませております。
詳しい方教えて頂けないでしょうか?

K列 担当者ID
L列 計画
M列 実績
N列 達成率
O列 達成額/未達額
P列 ポイント付与欄

上記のようなデータがあります。

下記条件で、O列「達成額/未達額」の降順にポイントを付与したいです。
その際、下記の条件でポイントを付与したいのです。

ポイント集計先
①黄色セル...続きを読む

Aベストアンサー

まず基本条件の方からいきます。
1.セルP5に 「 =IF($M5>0,MAX(10+1-RANK.AVG($O5,IF($M$5:$M$1000>0,$O$5:$O$1000,"")),0),"") 」を入力します。
2.必要なだけ下方向にコピーします。(完了)

*RANK.AVG関数で”達成額/未達成額”の順にランキング(1~)をつけ、11から差し引く、という方法をとります
*”実績”がマイナスのものはランキング付けそのものから除外するので、IF関数で検索対象の配列を絞り込みます
(IF関数に配列を入れたら答えも配列で返してくれるので、その絞り込んだ配列に対してRANK.AVR関数を使います。)
*マイナスのポイントは排除したいので、MAX関数でゼロと比較して正の値のみを採択します

追加条件込みの方は、以下です。
1.セルP5に 「 =IF($M5>0,MAX(10+1-RANK.AVG($O5,IF($M$5:$M$1000>0,$O$5:$O$1000,"")),0)*IF(VLOOKUP($K5,$E$3:$F$1000,2,FALSE)=$K$4,1,IF($O5>0,0.5,0.25)),"") 」を入力します。
2.必要なだけ下方向にコピーします。(完了)

*担当IDから担当部門コードの検索にはVLOOK関数を使います。VLOOK関数が正常に動作するには、担当IDに漏れがない事と番号順に並んでいる事が必要ですので、これ前提で考えて下さい。
*追加条件に準じ、ポイントを1倍したり、0.5倍したり、0.25倍したり、しました。

まず基本条件の方からいきます。
1.セルP5に 「 =IF($M5>0,MAX(10+1-RANK.AVG($O5,IF($M$5:$M$1000>0,$O$5:$O$1000,"")),0),"") 」を入力します。
2.必要なだけ下方向にコピーします。(完了)

*RANK.AVG関数で”達成額/未達成額”の順にランキング(1~)をつけ、11から差し引く、という方法をとります
*”実績”がマイナスのものはランキング付けそのものから除外するので、IF関数で検索対象の配列を絞り込みます
(IF関数に配列を入れたら答えも配列で返してくれるので、その絞り込んだ配列に対してRAN...続きを読む

Q【エクセル】指定した日付に一番近い日付を抽出する関数について

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


A____B_______
佐藤 2011/5/2
佐藤 2011/8/25
佐藤 2012/1/8
山田 2011/6/7
山田 2012/2/13
高橋 2010/7/10
高橋 2010/11/1
高橋 2010/12/5
高橋 2011/2/10

というデータから、




A____B________
佐藤 2011/5/1
佐藤 2011/9/1
山田 2011/6/1
山田 2011/8/1
高橋 2011/1/1
高橋 2011/2/1


のデータの日付に一番近い日付を
①のデータから抽出する関数を教えて頂きたいです。
指定日に一番近い日付を、
未来と過去から抽出する関数です。

分かりづらくて申し訳ございません。
ご教示願います。
よろしくお願いいたします。



iPhoneから送信

Aベストアンサー

もし、
D1に 入力された、
日と 同じ日を、
抜き出したいのなら、
此ですかね?


ファイル、
https://1drv.ms/x/s!AjviygfJDgV_3CyTu_uDNnR5Xlwk


尚、
ファイルは 必ず、
エクセルで 一度、
開き、

ローカルに 別名保存を、
してくださいね、

別名保存でないと、
意味が 無いですよ。


そうすれば、
閲覧も、編集も、
可能に なると、
思います。

Qエクセルについて。

次の数式を求める関数(下の方のプラン表)は、どんな数式を打てば良いのでしょうか?教えていただけると幸いです。

Aベストアンサー

単純な足し算ですよね。
添付画像のように作ったとして

[C8]=SUM($B$2,C$7,$B8)

これを[C8:F12]の範囲にコピーすればOK。

通常、数式のセルは、コピー貼り付けすると、移動先に応じてセルアドレスが変わってしまいますが、
「$」をつけることで、固定することができます。

上の式だと、どこに移動しても

$B$2 は B2 を参照するように固定される。

C$7 は 7行目 を参照するように固定される。
(式を下にコピーしても、7行目に固定される)

$B8 は B列 を参照するように固定される。
(式を右にコピーしても、B列に固定される)

ということになります。
$をつけて参照先を固定するのを「絶対参照」、
つけていない普通の場合は「相対参照」、
と言います。
より詳しいことは、このキーワードで検索して調べてみてください。

金額表示については、セルの書式から、
分類:通貨
記号:\
にしてあります。
実際のセルに「\」は入力されていません。

Qエクセル リストと完全一致するセルに色をつける

シート1のA列とB列に
aaa ccc
bbb ggg
ccc kkk
ddd ooo
と言うリストがあって、A1〜A4はAチーム、B1〜B4まではBチームと名前を付けています
シート2にAチームのリスト4個が続いているものがあればセルを赤、Bチームのリスト4個が続いているものがあればセルを黄色に塗りたいです
AチームとBチームの中には同じ品番がある時もあります
条件付き書式で設定は出来るでしょうか?

Aベストアンサー

(´・ω・`)
”○” の数を数えるんじゃないんだよなあ。

・・・本題・・・

条件付き書式ですよね。

シート2のリストの並び順は
 aaa
 ccc
 bbb
 ddd
では「Aチーム」と認識しないという事でよろしいでしょうか?
ならば、とても簡単です。

シート2の一覧において、

 判定するセル1
 判定するセル2
 判定するセル3
 色を付けるセル
 判定するセル4
 判定するセル5
 判定するセル6

という範囲について調べれば良いという事。

 判定するセル1
 判定するセル2
 判定するセル3
 色を付けるセル

 判定するセル2
 判定するセル3
 色を付けるセル
 判定するセル4

 判定するセル3
 色を付けるセル
 判定するセル4
 判定するセル5

 色を付けるセル
 判定するセル4
 判定するセル5
 判定するセル6

の4パターンについてそれぞれ調べれば良いだけ。

自分なら
 aaa-bbb-ccc-ddd
のようにシート1から文字列を作り、それが調べるセルで同じパターンになるかを調べます。
シート1はA5セルから、シート2はA11セルからデータが入力されているなら、

 シート1!A5 & シート1!A6 & シート1!A7 & シート1!A8 = A11 & A12 & A13 & A14
 シート1!A5 & シート1!A6 & シート1!A7 & シート1!A8 = A12 & A13 & A14 & A15
 シート1!A5 & シート1!A6 & シート1!A7 & シート1!A8 = A13 & A14 & A15 & A16
 シート1!A5 & シート1!A6 & シート1!A7 & シート1!A8 = A14 & A15 & A16 & A17

という条件になる。
この4つのうちの一つでも条件を満たせばセルに赤色を付ければいい。
「Bチーム」についても同様にすればいいので、
この場合、8つの条件式を設定することになります。

面倒でもこの考え方ができていないと、ちょっと条件が変わっただけで対処できずに終わります。
冒頭で「並び順」について書きましたが、並び順がシート1のリストの通りでなくとも色を付けたい場合でも、この考え方は必要ということです。

・・・
ちなみに厄介なのが、どちらのチームにも「ccc」がいるというところかな。
これが無ければ違う方法でシンプルにできるんですけどねえ。

(´・ω・`)
”○” の数を数えるんじゃないんだよなあ。

・・・本題・・・

条件付き書式ですよね。

シート2のリストの並び順は
 aaa
 ccc
 bbb
 ddd
では「Aチーム」と認識しないという事でよろしいでしょうか?
ならば、とても簡単です。

シート2の一覧において、

 判定するセル1
 判定するセル2
 判定するセル3
 色を付けるセル
 判定するセル4
 判定するセル5
 判定するセル6

という範囲について調べれば良いという事。

 判定するセル1
 判定するセル2
 判定するセル3
 色を付け...続きを読む

QExcelの計算式を教えてほしいです

残業の累計をとっています。

画像にありますように、
11月16日は勤務時間「8:00」のところ「9:00」で累計「1:00」
11月17日は同様で「累計2:00」となっています。

他の月も同じフォーマットで利用するため、11月は空欄ですが
「C8」には=IF(C7="","",C7-C6)
「D8」には=IF(D7="","",C8+(D7-D6))と入れました。
それを右にコピーしたところ「H8」が「#」のエラーとなってしまいました。

画像はエラーにならないように、計算式を修正してあります。
H8はIF(H7="","",H7-H6)
I8はIF(I7="","",H8+(I7-I6))

<質問1>
C8やD8をどのようにすれば計算式が正しくできますか?

<質問2>
画像の11/20(火)は休日です。現在休日セルには「/」が表示されています。
当然こちらも計算できず「#」となります。
これはどのように回避すれば良いでしょうか?

よろしくお願いします。

Aベストアンサー

No5です。

>勤務時間が「/」の日に出勤をして7行目に「8:00」となっていた場合にエラーとなってしまいました。
6行目が「/」のままとかでは?
式をご覧になればわかるはずですが、単純に、7行目が数値(=時刻)なら、6行目との差を求める式になっているので6行目が数値で無ければエラーになります。
また、その場合の計算方法の説明がないのでわかりません。

そのような場合は、6行目を0と判断して良いものと勝手に仮定して、
さらにNo4様の考え方をお借りして拡張するなら、
C8セルに
 =IF(C7="","",SUM($B7:C7)-SUM($B6:C6))
の式を入力して、右側にフィルコピーの方が良いでしょう。

※ 説明にない条件に関しては、回答者側で適当に補って考えています。
  ですので、その想定外の条件で利用すれば、エラーが発生したり、
  想像していた(=求めていた?)のとは違う計算結果になったりします。

QExcelのフィルター後のセルにコピー

エクセルでSHEET1にデータがあり 例えば 右横項目として 名前 年齢 出身地 あだ名項目(これはまだ未入力) など 横にならんでいて左端縦には下にいろんな人の名前がずらっと並んであった場合、例えば 県別項目の青森県でフィルターを掛けた場合 そのとき必ず6人いるとものして、SHEET2に用意していた、A列下のセルに縦に あだ名6個用意していたとする、たぬき、くま、きりん、ぞう、ウサギ、カラス それを6個まるごとフィルター後のSHEET1のあだな項目欄に一回でスポット コピーペーストできるものでしょうか。

Aベストアンサー

こんばんは!

一気に!という訳にはいきませんが、VBAでの一例です。
Sheet1の1行目は項目行でデータは2行目以降にあり、
D列が「あだ名」列になっているとします。
そして、Sheet2のA1セル以降に表示したいデータが羅列してあるという前提で・・・

Sub Sample1()
 Dim i As Long, cnt As Long
  With Worksheets("Sheet1")
   If .AutoFilterMode Then
    If .AutoFilter.FilterMode Then
     For i = 2 To .Cells(Rows.Count, "A").End(xlUp).Row
      If .Rows(i).Hidden = False Then
       cnt = cnt + 1
       .Cells(i, "D") = Worksheets("Sheet2").Cells(cnt, "A")
      End If
     Next i
    Else
     MsgBox "絞り込まれていません"
    End If
   Else
    MsgBox "フィルタが設定されていません"
   End If
  End With
End Sub

とりあえずはお望みの動きになると思います。m(_ _)m

こんばんは!

一気に!という訳にはいきませんが、VBAでの一例です。
Sheet1の1行目は項目行でデータは2行目以降にあり、
D列が「あだ名」列になっているとします。
そして、Sheet2のA1セル以降に表示したいデータが羅列してあるという前提で・・・

Sub Sample1()
 Dim i As Long, cnt As Long
  With Worksheets("Sheet1")
   If .AutoFilterMode Then
    If .AutoFilter.FilterMode Then
     For i = 2 To .Cells(Rows.Count, "A").End(xlUp).Row
      If .Rows(i).Hidden = False T...続きを読む

Q急ぎ教えてくださいDの区分に数字をいれたら倍率、支給額まで表示する計算式ありましか? エクセルは我流

急ぎ教えてくださいDの区分に数字をいれたら倍率、支給額まで表示する計算式ありましか?
エクセルは我流で生きてきたので、分かりません。
よろしくお願い申し上げます。

Aベストアンサー

私もNo.2さんのようなことを考えたのですが、基準額とか関係なく区分で金額が固定ならVLOOKUP関数でいいんじゃないですか?

QCODE関数から他の文字コードの求め方

セル A1 に1文字が入力されているとき、私は今まで JIS、SJISコードを次式で求めてきました。間違い、あるいは、より簡便な方法があればご指摘ください。

JISコード B1: =DEC2HEX(CODE(A1),4)
SJISコード C1: =DEC2HEX(IF(ROUNDUP(HEX2DEC(LEFT(B1,2))/2,0)+112<=159,ROUNDUP(HEX2DEC(LEFT(B1,2))/2,0)+112,ROUNDUP(HEX2DEC(LEFT(B1,2))/2,0)+112+64))&DEC2HEX(IF(MOD(HEX2DEC(LEFT(B1,2)),2),IF(HEX2DEC(RIGHT(B1,2))+32>=127,HEX2DEC(RIGHT(B1,2))+32,HEX2DEC(RIGHT(B1,2))+32-1),HEX2DEC(RIGHT(B1,2))+126))

それから、上記の関数を利用して、あるいは、他の方法でも、UNICODE を求める数式を教えてください。
ついでながら、区点コードを求める方法はありますでしょうか?

セル A1 に1文字が入力されているとき、私は今まで JIS、SJISコードを次式で求めてきました。間違い、あるいは、より簡便な方法があればご指摘ください。

JISコード B1: =DEC2HEX(CODE(A1),4)
SJISコード C1: =DEC2HEX(IF(ROUNDUP(HEX2DEC(LEFT(B1,2))/2,0)+112<=159,ROUNDUP(HEX2DEC(LEFT(B1,2))/2,0)+112,ROUNDUP(HEX2DEC(LEFT(B1,2))/2,0)+112+64))&DEC2HEX(IF(MOD(HEX2DEC(LEFT(B1,2)),2),IF(HEX2DEC(RIGHT(B1,2))+32>=127,HEX2DEC(RIGHT(B1,2))+32,HEX2DEC(RIGHT(B1,2))+32-1),HEX2DEC(RIGHT(B1,2))+12...続きを読む

Aベストアンサー

Shift JISコードとは、JISコードをずらす(シフトする)ことで実現しているコードです。
そのため、その法則に従って計算することで JIS←→Shift JIS の変換ができます。

UNICODEは、JISとは違った文字の並び順になっています。
そのため、対応表を使った変換となります。

JISを使った CODE / CHAR に対応した
UNICODE盤の UNICODE / UNICHAR があります。
ただし、古いExcelにはありません
https://support.office.com/ja-jp/article/unicode-%E9%96%A2%E6%95%B0-adb74aaa-a2a5-4dde-aff6-966e4e81f16f



> ついでながら、区点コードを求める方法はありますでしょうか?

「JIS 区点 Excel」で検索してみましょう。

Qエクセル データの入力規制「リスト」でこんな事できますか?

エクセルでこんな事できますか?
並列したQ列 R列があり、
また、添付には表記されていませんが、
その隣にS列 T列があり、
Q列、S列は、「コード」という事で、
Q列は1,2,3,4,5,6,7,8,9,10
S列は11,12,13,14,15,16,17,18,19,20
です。
R列は、「材質」でQ列に対応し、添付ファイルのように10項目
T列も「材質」でS列に対応し、10項目あります。

R列 T列「材質」を見て Q37セルにコードを入力したく、
その時、ドロップダウンリストとして、R列、続けて、T列の項目を表示したいです。

データの入力規制「リスト」で、できそうかと思い、頑張っていたのですが、
うまくいかず困っています。
データの入力規制「リスト」にはこだわりませんが、
マクロはできるだけ使わず完成したく思います。
エクセル詳しいかたご教授よろしくお願いします。

Aベストアンサー

あー…
入力規則はあくまでも、データ入力を補助するための機能ですからリストと違う文字を反映させることはできませんよ。

例えばリストデータは、01りんご・02プリンのように作って置いて、コードを出す時に
=LEFT(Q37,2)*1
と入れておくとか?

QCSVデータ(Test.csv)に A1,B1 A1,B1 A1,C1 A2,B2 A2,B2 A3

CSVデータ(Test.csv)に
A1,B1
A1,B1
A1,C1
A2,B2
A2,B2
A3,B3
A3,B3
というデータが1万レコード入っていたとします。(A1~A100まで100種類)

本来は
A1のペアはB1
A2のペアはB2
A3のペアはB3
となるはずが、上記のように誤ってC1が混在していることに気づく手段はございますでしょうか。

Excelの機能、プログラムなどどんな方法でも構いませんので、Excelフィルタ機能で100回確認する以外の方法がございましたら教えて頂けないでしょうか。

Aベストアンサー

No.5です。

>A列とB列を結合(=A1&"_"&B1)したものを『データ→重複を削除』で重複を削除し、A1で重複しているものをcountifでカウントして2以上のものがおかしい行と判断できる気がしてきました。

具体的なデータがどのようになっているのか不明なので、
C列に A列とB列を連結したデータがいくつあるか?を表示するコードにしてみました。

Sub Sample2()
 Dim myDic As Object
 Dim i As Long, lastRow As Long
 Dim myStr As String
 Dim myR

  Set myDic = CreateObject("Scripting.Dictionary")
   lastRow = Cells(Rows.Count, "A").End(xlUp).Row
    myR = Range(Cells(1, "A"), Cells(lastRow, "C"))
     For i = 1 To UBound(myR, 1)
      myStr = myR(i, 1) & "_" & myR(i, 2)
       If Not myDic.exists(myStr) Then
        myDic.Add myStr, 1
       Else
        myDic(myStr) = myDic(myStr) + 1
       End If
     Next i
     For i = 1 To UBound(myR, 1)
      myStr = myR(i, 1) & "_" & myR(i, 2)
      myR(i, 3) = myDic(myStr)
     Next i
    Range(Cells(1, "A"), Cells(lastRow, "C")) = myR
   Set myDic = Nothing
   MsgBox "完了"
End Sub

これで重複がある場合はC列に2以上の数値が表示されます。m(_ _)m

No.5です。

>A列とB列を結合(=A1&"_"&B1)したものを『データ→重複を削除』で重複を削除し、A1で重複しているものをcountifでカウントして2以上のものがおかしい行と判断できる気がしてきました。

具体的なデータがどのようになっているのか不明なので、
C列に A列とB列を連結したデータがいくつあるか?を表示するコードにしてみました。

Sub Sample2()
 Dim myDic As Object
 Dim i As Long, lastRow As Long
 Dim myStr As String
 Dim myR

  Set myDic = CreateObject("Scripting.Dictionary")
 ...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング