
こんばんは。エクセルについて質問があります。
今、エクセルで同じ構造で中身の違うデータベースの様なシートを数枚作り、
そこから参照して、別の入力シートにそのデータを引っ張って来るということをしたいです。
調べてみた感じVLOOKUP関数などを使うのかなと思うのですが、
どうもうまいこといきません。
DBのような扱いをしているデータシートの構造は
【データシート】
A1(クラス名)列| B1(番号) 列 | C1(名前:漢字) 列 | D1(名前:かな) 列 |
-------------------------------------------------------------------
A2 1-1 | B2 1番 | C2 鈴木 太郎 | D2 すずき たろう |
のようなデータの入れ方をしており、クラスは1-7まである感じで、
B1の列はA1列のクラスの人数分が連番になっています。
なので、番号は重複してる部分が多いです。
これが複数枚シートあるといった具合です。
データを反映させたいシートも前4列は同じ様な構造をしています。
これにあと複数列足した感じになってます。
【反映させたいシート】
A1(クラス名)列| B1(番号) 列 | C1(名前:漢字) 列 | D1(名前:かな) 列 | E1 別項目 |…
--------------------------------------------------------------------------------
A2 3-7 | B2 2 | C2 田中 次郎 | D2 たなか じろう | ×× |…
ここで名前列に名前(漢字、もしくはかな)を入れるか、
もしくはクラス名+番号ですぐさま該当シートの特定し、
合致するE列以前の残りのデータを全て取得してくる。
反映させたシートのE列などに入れたデータを
今度はデータシートへとリンクさせるという風な
プログラムを組みたいです。
こういった具合のエクセルシートを作成したいのですが、
どのようにしたら良いでしょうか?
プログラムの様にIF文などを使用する感じになるのでしょうか?
それともデータのシートに別でIDなどユニークな値を各々の
データに割り振らないとダメでしょうか?
また参考として知りたいのですが、
1行に引っ張りたくないデータが多数あっても行単位で3列の分だけ取得して、
1行にある3列分のデータを同じ1行3列に反映させることは可能でしょうか?
説明が下手で意味が解り辛い所もあるかもしれませんが、
回答よろしくお願いします。
No.4ベストアンサー
- 回答日時:
>エクセルで同じ構造で中身の違うデータベースの様なシートを数枚作り、
⇒シート分散するとデータ処理が複雑になりますので中身が同じならば同一シートをお勧めします。
エクセル本来の機能(オートフィルタやフィルタオプションの設定等)を活用し易くなります。
>プログラムの様にIF文などを使用する感じになるのでしょうか?
>それともデータのシートに別でIDなどユニークな値を各々のデータに割り振らないとダメでしょうか?
⇒プログラムはなるべく介在させないようにデータ主体に構築した方がよく、1データにはユニークな情報(例えば、クラス+番号)も持たせた方がプログラム(ワークシート関数やマクロ)が必要になった場合でもシンプルになる、3行以上に跨るような数式は改定等の保守性上、お勧めできません
>1行に引っ張りたくないデータが多数あっても行単位で3列の分だけ取得して、
>1行にある3列分のデータを同じ1行3列に反映させることは可能でしょうか?
⇒可能です。
一度、添付のURLを覗いてみてください。
参考URL:http://www.eurus.dti.ne.jp/~yoneyama/
回答ありがとうございます。
やはり何かしらユニークな値を持っている方がいいんですね。
今の所、No.1さんの回答に書いた通り、IDを振って
簡素にやりたいことを一応は実現させることができました。
でも簡素にするためにデータベースシートも構造や内容も書き換えて
余りよくありませんし…もうちょっと改良の余地があるかなーといった具合です。
すごい参考になりました。ありがとうございました。
No.3
- 回答日時:
質問を文章だけで書こうとするから、読みにくい。
エクセル経験が少ないと、こうなるのだろうが、余分な記述も多く、経験を積めば聞きたいところだけ絞って質問できる。
ーー
こう書いたら
データを採ってくるシート(=関数をいれるシート)Sheet1 ーー>反映させたいシートといっているシート
条件はA1セルにセットするものとする。
参照して持って来たいシート Sheet2
列構成は
A-F列
クラス名 番号 名前漢字 名前かな) 英語点数」 国語点数
A 12 田中 たなか 30 50
・・・・
と書けば判るのだ。こんなに簡単になるのだ。
ーー
エクセル関数での検索は、2列を条件にするのは難しいのだ。
だから両者を結合したセルの列を作っておく
=A2&B2 クラス名と番号を結合した文字列を作る(ワーク列)
例データ
Sheet2 A-G列
クラス名番号名前漢字名前かな)英語点数」国語点数ワーク列
クラス25大田おおた5040クラス2 5
クラス112田中たなか3050クラス1 12
Sheet1 A1:B1
クラス112
式 A2に =INDEX(Sheet2!$A$1:$F$100,MATCH($A$1&" "&$B$1,Sheet2!$G$1:$G100,0),COLUMN())
右方向に式を引っ張る。
結果
クラス112
クラス112田中たなか3050
ーーーーー
質問と少し違うかもしれないが、応用して。
ー
VLOOKUP関数がMATCH関数に手要るのはワーク列がデータ列より右に来ているため。A列に列挿入してワーク列をおくのは体裁が悪かろう。
ーー
>また参考として知りたいのですが、
1行に引っ張りたくないデータが多数あっても行単位で3列の分だけ取得して、
1行にある3列分のデータを同じ1行3列に反映させることは可能でしょうか
ー
1質問にあれこれ詰め込まないで。
私の質問の書き方を参考にして、実例を挙げて、完結に別質問にしてください。
回答ありがとうございます。
なかなか説明が難しくて…。すいません。
簡素に書けたら良かったんですが。
他のやり方も考えていて、1つの質問に対して
複数質問してしまいました。
参考に勉強させていただきます。ありがとうございました。
No.2
- 回答日時:
例えばシート1が反映させたいシートとします。
A1セルにはクラス名、B1セルには番号、C1セルには氏名(漢字)、D1セルには氏名(ひらがな)の文字があり、2行目か下方にはデータを入力または関数で表示するなどができるようにします。
氏名で入力してデータをデータシートから表示させるのは氏名などがダブっている場合もありますので適当ではありません。A列とB列にデータを入力してC列とD列には関数を使ってデータシートからデータを取り込んで表示させることにします。
A列に3-7、B列に2と入力してC列でD列にデータを表示させるとしたらそれぞれのデータシートの名前はクラス名と同じになっているとします。例えばシート名が3-7のシートがあるとします。各データシートはシート1と同じ項目名で列ができているとします。
そこでシート1のC2セルには次の式を入力してD2セルまでオートフィルドラッグしたのちに下方にもオートフィルドラッグします。
=IF($A2="","",IF(INDEX(INDIRECT("'"&$A2&"'!C1:D100"),SUMPRODUCT((INDIRECT("'"&$A2&"'!A1:A100")=$A2)*(INDIRECT("'"&$A2&"'!B1:B100")=$B2)*ROW(INDIRECT("'"&$A2&"'!A1:A100"))),COLUMN(A1))=0,"該当なし",INDEX(INDIRECT("'"&$A2&"'!C1:D100"),SUMPRODUCT((INDIRECT("'"&$A2&"'!A1:A100")=$A2)*(INDIRECT("'"&$A2&"'!B1:B100")=$B2)*ROW(INDIRECT("'"&$A2&"'!A1:A100"))),COLUMN(A1))))
これで氏名がC列およびD列に表示されます。
シート1のE列より右側の列に、例えばL列までに項目が有ってそれらのデータを今度は元のデータシートに表示させるようにするためには各データシートのE2セルに次の式を入力してL2セルまでオートフィルドラッグしたのちに下方にもオートフィルドラッグします。
=IF(INDEX(Sheet1!$E:$L,SUMPRODUCT((Sheet1!$A$1:$A$100=$A2)*(Sheet1!$B$1:$B$100=$B2)*ROW(Sheet1!$B$1:$B$100)),COLUMN(A1))=0,"",INDEX(Sheet1!$E:$L,SUMPRODUCT((Sheet1!$A$1:$A$100=$A2)*(Sheet1!$B$1:$B$100=$B2)*ROW(Sheet1!$B$1:$B$100)),COLUMN(A1)))
回答ありがとうございます。
この数式参考にさせていただきます。
ものすごい式ですね。
凄過ぎて何がどう作用してどうなっているのかすら
自分には意味がわからない状態です(笑
やっぱりどうしても長くなるのは必然ですかね。
これをコピーしてちょっと使ってみます。
ほんとにありがとうございました。
No.1
- 回答日時:
>反映させたシートのE列などに入れたデータを
>今度はデータシートへとリンクさせる
ACCESS向きの処理だと思います。
>プログラムを組みたいです。
とりあえず、Excelでどの程度までプログラムを書かれたのでしょうか?
数式では処理できないので
シート数3で強引にハイパーリンク(^.^;
C2セルに
=IF(OR(A2="",B2=""),"",
HYPERLINK("#"&ADDRESS(MIN(IF(CHOOSE({1,2,3},Sheet1!$A$2:$A$45,Sheet2!$A$2:$A$45,Sheet3!$A$2:$A$45)&"_"&CHOOSE({1,2,3},Sheet1!$B$2:$B$45,Sheet2!$B$2:$B$45,Sheet3!$B$2:$B$45)=A2&"_"&B2,ROW($A$2:$A$45)-1)),5,,,CHOOSE(MIN(IF(CHOOSE({1,2,3},Sheet1!$A$2:$A$45,Sheet2!$A$2:$A$45,Sheet3!$A$2:$A$45)&"_"&CHOOSE({1,2,3},Sheet1!$B$2:$B$45,Sheet2!$B$2:$B$45,Sheet3!$B$2:$B$45)=A2&"_"&B2,{1,2,3})),
"Sheet1","Sheet2","Sheet3"))))
ご連絡遅くなりました。回答ありがとうございます。
ハイパーリンクですか。
今の所、A列にIDを振ることでユニークなものにして
VLOOKUPで取ってくる形にして一応はやりたいことを
簡易的ではありますが、実現してあります。
できればIDを無くしてやってみたいんですが…。
やっぱりもの凄く長くなるんですね…。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Excel VBA 最終行を取得しVlookup関数をコピーする方法をコーディングで教えてください。 3 2023/05/11 13:14
- Excel(エクセル) EXCEL 関数を教えてください。(A列の同じ値が複数ある場合vlookupで出来ますか) 4 2022/12/07 20:54
- Visual Basic(VBA) vbaエクセルマクロ RemoveDuplicatesについて RemoveDuplicatesを使 3 2023/02/28 01:13
- Excel(エクセル) マクロか関数で処理したいのですが、教えて頂けませんか。 8 2022/10/31 15:18
- Visual Basic(VBA) VBAで、1つのエクセルで、2つのシートからもう1つのシートに条件のある転記コードを教えてください。 1 2023/03/16 18:07
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- Excel(エクセル) 【エクセル」 特定のセルで条件抽出した列を、別シートに上から詰めて表示したい。 8 2022/04/08 16:00
- Excel(エクセル) 関数EXACT(文字列,文字列)とexcelVBA 3 2022/04/14 15:07
- Excel(エクセル) ある数値に対して、値を返す数式についてです 2 2022/09/13 22:06
- Visual Basic(VBA) vbaについて 主に以下のような設定をしたいです。 Aブックの表の行数が20未満だったら Bブックの 1 2023/06/08 23:40
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
9月17日でサービス終了らし...
-
エクセルのdatedif関数を使って...
-
エクセルのVBAで集計をしたい
-
【マクロ】【配列】3つのシー...
-
特定のセルだけ結果がおかしい...
-
エクセル ドロップダウンリスト...
-
【マクロ】列を折りたたみ非表...
-
vba テキストボックスとリフト...
-
【関数】同じ関数なのに、エラ...
-
ページが変なふうに切れる
-
【条件付き書式】シートの中で...
-
【マクロ】オートフィルターの...
-
【マクロ】EXCELで読込したCSV...
-
【マクロ】アクティブセルの時...
-
【マクロ】3行に上から下に並...
-
エクセルの循環参照、?
-
【マクロ】A列にある、日付(本...
-
iPhoneのExcelアプリで、別のシ...
-
エクセル
-
【マクロ】WEBシステムから保存...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
9月17日でサービス終了らし...
-
エクセル
-
【マクロ】WEBシステムから保存...
-
エクセルの循環参照、?
-
エクセル ドロップダウンリスト...
-
エクセルのdatedif関数を使って...
-
特定のセルだけ結果がおかしい...
-
【マクロ】A列にある、日付(本...
-
【マクロ】EXCELで読込したCSV...
-
【マクロ】アクティブセルの時...
-
【エクセル】期限アラートについて
-
iPhoneのExcelアプリで、別のシ...
-
【関数】同じ関数なのに、エラ...
-
Excelの新しい空白のブックを開...
-
【マクロ】3行に上から下に並...
-
【マクロ】宣言は、何のために...
-
VBA チェックボックスをオーバ...
-
Excelについての質問です 並べ...
-
【マクロ】アクティブセルの2...
-
【関数】不規則な文章から●●-●●...
おすすめ情報